Compare commits

...

8 commits

Author SHA1 Message Date
Sami Samhuri
0452df8944 fix package version 2012-02-24 20:42:30 -08:00
Sami Samhuri
e1ea5e39b7 allow spaces in directory names 2012-02-24 20:10:11 -08:00
Sami Samhuri
a9f0908e1f 0.1.9 2011-11-05 18:59:06 -07:00
Sami Samhuri
4f7823d11a fix required node version 2011-11-05 18:58:32 -07:00
Sami Samhuri
4da17cbfcc 0.1.8 2011-11-05 15:52:03 -07:00
Sami Samhuri
f0bf25fa79 node v0.6 2011-11-05 15:51:35 -07:00
Sami Samhuri
18215d0a79 version 0.1.6 2011-06-12 19:02:09 -07:00
Sami Samhuri
62c3256d3e add command line options for rcfile and logfile 2011-06-12 19:01:40 -07:00
3 changed files with 37 additions and 13 deletions

2
.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
node_modules
*.tmproj

View file

@ -15,11 +15,30 @@
// - *maybe* a minimum interval at which commands are run, e.g. at most once every 5 minutes
var fs = require('fs')
, argv = require('optimist')
.alias('l', 'log')
.default('l', process.env.NORTHWATCHER_LOG)
.argv
, log
if (argv.log) {
var logStream = fs.createWriteStream(argv.log, {
flags: 'a'
, mode: 0644
})
log = function (s) {
logStream.write(s + '\n')
}
process.on('exit', logStream.end.bind(logStream))
}
else {
log = console.log
}
function main() {
var path = require('path')
, eachLine = require('batteries').fs.eachLine
, rcFile = require('path').join(process.env.HOME, '.northwatcher')
, rcFile = argv._.shift() || require('path').join(process.env.HOME, '.northwatcher')
fs.stat(rcFile, function(err, s) {
if (err) {
@ -35,17 +54,17 @@ function main() {
// <trigger> <dir> <command>
var m
if (m = line.match(/^([-+]{0,2})\s*(\S+)\s+(.+)$/i)) {
if (m = line.match(/^([-+]{0,2})\s*(?:"([^"]+)"|(\S+))\s+(.+)$/i)) {
var trigger = m[1] || '+-' // default watches for both
, dir = m[2]
, command = m[3]
, dir = m[2] || m[3]
, command = m[4]
, options = { create: trigger.indexOf('+') !== -1
, remove: trigger.indexOf('-') !== -1
, command: command
}
if (dir.charAt(0) !== '/') dir = path.resolve(process.env.HOME, dir)
ensureDirectory(dir)
console.log('>>> watch ' + line)
log('>>> watch ' + line)
watch(dir, options)
}
@ -92,7 +111,7 @@ function watcherForDir(dir, options) {
, c = unset(setDiff(newFiles, files[dir]))
, r = unset(setDiff(files[dir], newFiles))
files[dir] = newFiles
console.log('>>> ' + dir + ' changed! c: ' + JSON.stringify(c) + ' r: ' + JSON.stringify(r))
log('>>> ' + dir + ' changed! c: ' + JSON.stringify(c) + ' r: ' + JSON.stringify(r))
watchedDirs[dir].forEach(function(o) {
if (c.length > 0 && o.create || r.length > 0 && o.remove) {
runCommand({ command: o.command
@ -106,7 +125,7 @@ function watcherForDir(dir, options) {
}
function runCommand(options) {
console.log('>>> running command: ' + options.command)
log('>>> running command: ' + options.command)
var spawn = require('child_process').spawn
// TODO quoting
, args = options.command.split(/\s+/)
@ -162,7 +181,9 @@ function spiel() {
, " - todo update-remote-todo-list.sh"
, ""
, "So each line has an optional trigger followed by a directory and"
, "then a command. The triggers are:"
, "then a command. The directory can be quoted if it contains spaces."
, ""
, "The triggers are:"
, ""
, " + files are created"
, " - files are removed"
@ -173,7 +194,7 @@ function spiel() {
, "No frills."
, ""
, "Create a watch file and then run NorthWatcher again."
].forEach(function(s) { console.log(s) })
].forEach(function(s) { log(s) })
}
if (require.main === module) main()

View file

@ -1,7 +1,7 @@
{
"name": "northwatcher",
"description": "NorthWatcher is cron for filesystem changes.",
"version": "0.1.5",
"version": "0.2.0",
"homepage": "http://samhuri.net/proj/NorthWatcher",
"author": "Sami Samhuri <sami@samhuri.net>",
"repository": {
@ -17,7 +17,7 @@
},
"main": "./northwatcher.js",
"engines": {
"node": "0.4.x"
"node": ">=0.4.x"
},
"licenses": [
{
@ -26,7 +26,8 @@
}
],
"dependencies": {
"batteries": "0.4.x"
"batteries": "0.4.x",
"optimist": "0.2.x"
},
"devDependencies": {}
}
}