From 89786ccad60bf0db9e28f13d76e7c9ec3f234c72 Mon Sep 17 00:00:00 2001 From: wuxiaoqing Date: Tue, 23 May 2017 22:54:13 +0800 Subject: [PATCH 1/3] support killCommand --- cli.js | 42 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/cli.js b/cli.js index 8299e4f..b142dc8 100755 --- a/cli.js +++ b/cli.js @@ -13,7 +13,9 @@ if(argv._.length === 0) { '[--interval=]', '[--ignoreDotFiles]', '[--ignoreUnreadable]', - '[--ignoreDirectoryPattern]' + '[--ignoreDirectoryPattern]', + '[--killCommand]', + '[--killSignal]' ].join(' ')) process.exit() } @@ -48,6 +50,16 @@ if(argv.ignoreDirectoryPattern || argv.p) { watchTreeOpts.ignoreDirectoryPattern = new RegExp(match[1], match[2]) } +if(argv.killCommand || argv.k) { + watchTreeOpts.killCommand = true +} + +if(argv.killSignal || argv.s) { + watchTreeOpts.killSignal = argv.killSignal || argv.s +} else { + watchTreeOpts.killSignal = "SIGHUP" +} + if(argv.filter || argv.f) { try { watchTreeOpts.filter = require(path.resolve(process.cwd(), argv.filter || argv.f)) @@ -61,6 +73,17 @@ var wait = false var dirLen = dirs.length var skip = dirLen - 1 +var child = null +var childHasExit = false + +function run_child(command) { + child = execshell(command) + child.on("exit", () => { + childHasExit = true + }) + return child +} + for(i = 0; i < dirLen; i++) { var dir = dirs[i] console.error('> Watching', dir) @@ -71,7 +94,22 @@ for(i = 0; i < dirLen; i++) { } if(wait) return - execshell(command) + if (watchTreeOpts.killCommand) { + if (child && !childHasExit) { + // stop previous child and fun + child.removeAllListeners() + child.on("exit", () => { + child = run_child(command) + }) + child.kill(watchTreeOpts.killSignal) + } else { + // run at first time or previous child has exited + child = run_child(command) + childHasExit = false + } + } else { + execshell(command) + } if(waitTime > 0) { wait = true From 633dcafd6da581fbc0ca93fd8a634592a0000e18 Mon Sep 17 00:00:00 2001 From: wuxiaoqing Date: Tue, 23 May 2017 23:10:20 +0800 Subject: [PATCH 2/3] add rerunTimeout: --- cli.js | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/cli.js b/cli.js index b142dc8..af55df5 100755 --- a/cli.js +++ b/cli.js @@ -15,7 +15,8 @@ if(argv._.length === 0) { '[--ignoreUnreadable]', '[--ignoreDirectoryPattern]', '[--killCommand]', - '[--killSignal]' + '[--killSignal]', + '[--rerunTimeout]' ].join(' ')) process.exit() } @@ -50,16 +51,18 @@ if(argv.ignoreDirectoryPattern || argv.p) { watchTreeOpts.ignoreDirectoryPattern = new RegExp(match[1], match[2]) } +var killCommand = false if(argv.killCommand || argv.k) { - watchTreeOpts.killCommand = true + killCommand = true } +var killSignal = "SIGHUP" if(argv.killSignal || argv.s) { - watchTreeOpts.killSignal = argv.killSignal || argv.s -} else { - watchTreeOpts.killSignal = "SIGHUP" + killSignal = argv.killSignal || argv.s } +var rerunTimeout = Number(argv.rerunTimeout || argv.r) + if(argv.filter || argv.f) { try { watchTreeOpts.filter = require(path.resolve(process.cwd(), argv.filter || argv.f)) @@ -94,14 +97,15 @@ for(i = 0; i < dirLen; i++) { } if(wait) return - if (watchTreeOpts.killCommand) { + if (killCommand) { if (child && !childHasExit) { // stop previous child and fun child.removeAllListeners() child.on("exit", () => { - child = run_child(command) + console.log(rerunTimeout, "\n\n") + setTimeout(() => child = run_child(command), rerunTimeout * 1000) }) - child.kill(watchTreeOpts.killSignal) + child.kill(killSignal) } else { // run at first time or previous child has exited child = run_child(command) From a64fc7d609ecfa4f89c18bd725bfb02fe705d164 Mon Sep 17 00:00:00 2001 From: wuxiaoqing Date: Fri, 2 Jun 2017 13:23:55 +0800 Subject: [PATCH 3/3] remove redundant log --- cli.js | 1 - 1 file changed, 1 deletion(-) diff --git a/cli.js b/cli.js index af55df5..cd16848 100755 --- a/cli.js +++ b/cli.js @@ -102,7 +102,6 @@ for(i = 0; i < dirLen; i++) { // stop previous child and fun child.removeAllListeners() child.on("exit", () => { - console.log(rerunTimeout, "\n\n") setTimeout(() => child = run_child(command), rerunTimeout * 1000) }) child.kill(killSignal)