109 lines
2.4 KiB
JavaScript
109 lines
2.4 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
var argv = require('minimist')(process.argv.slice(2))
|
|
var execshell = require('exec-sh')
|
|
var cp = require('child_process');
|
|
var path = require('path')
|
|
var watch = require('./main.js')
|
|
|
|
if(argv._.length === 0) {
|
|
console.error([
|
|
'Usage: watch <command> [...directory]',
|
|
'[--wait=<seconds>]',
|
|
'[--filter=<file>]',
|
|
'[--interval=<seconds>]',
|
|
'[--ignoreDotFiles]',
|
|
'[--ignoreUnreadable]',
|
|
'[--ignoreDirectoryPattern]',
|
|
'[--exit]'
|
|
].join(' '))
|
|
process.exit()
|
|
}
|
|
|
|
var watchTreeOpts = {}
|
|
var command = argv._[0]
|
|
var dirs = []
|
|
|
|
var i
|
|
var argLen = argv._.length
|
|
if (argLen > 1) {
|
|
for(i = 1; i< argLen; i++) {
|
|
dirs.push(argv._[i])
|
|
}
|
|
} else {
|
|
dirs.push(process.cwd())
|
|
}
|
|
|
|
var waitTime = Number(argv.wait || argv.w)
|
|
if (argv.interval || argv.i) {
|
|
watchTreeOpts.interval = Number(argv.interval || argv.i || 0.2);
|
|
}
|
|
|
|
var exitShell = (argv.exit || argv.e);
|
|
|
|
if(argv.ignoreDotFiles || argv.d)
|
|
watchTreeOpts.ignoreDotFiles = true
|
|
|
|
if(argv.ignoreUnreadable || argv.u)
|
|
watchTreeOpts.ignoreUnreadableDir = true
|
|
|
|
if(argv.ignoreDirectoryPattern || argv.p) {
|
|
var match = (argv.ignoreDirectoryPattern || argv.p).match(/^\/(.*)\/([gimuy]*)$/);
|
|
watchTreeOpts.ignoreDirectoryPattern = new RegExp(match[1], match[2])
|
|
}
|
|
|
|
if(argv.filter || argv.f) {
|
|
try {
|
|
watchTreeOpts.filter = require(path.resolve(process.cwd(), argv.filter || argv.f));
|
|
} catch (e) {
|
|
console.error(e)
|
|
process.exit(1)
|
|
}
|
|
}
|
|
|
|
watchTreeOpts.filter = function (file, stat) {
|
|
var ext = path.extname(file);
|
|
return (ext == "" || ext == ".hx");
|
|
};
|
|
|
|
var wait = false
|
|
var shell = null;
|
|
|
|
var dirLen = dirs.length
|
|
var skip = dirLen - 1
|
|
for(i = 0; i < dirLen; i++) {
|
|
var dir = dirs[i]
|
|
console.error('> Watching', dir)
|
|
watch.watchTree(dir, watchTreeOpts, function (f, curr, prev) {
|
|
if(skip) {
|
|
skip--
|
|
return
|
|
}
|
|
if(wait) return
|
|
|
|
if(exitShell && shell != null) {
|
|
try {
|
|
var isWin = /^win/.test(process.platform);
|
|
if(!isWin) {
|
|
shell.kill('SIGKILL');
|
|
} else {
|
|
cp.exec('taskkill /PID ' + shell.pid + ' /T /F', function(error, stdout, stderr) {
|
|
});
|
|
}
|
|
} catch (e) {}
|
|
}
|
|
try {
|
|
shell = execshell(command)
|
|
} catch (e) {
|
|
console.error (e);
|
|
}
|
|
|
|
if(waitTime > 0) {
|
|
wait = true
|
|
setTimeout(function () {
|
|
wait = false
|
|
}, waitTime * 1000)
|
|
}
|
|
})
|
|
}
|