From d97c34627cc169310ec5ccff83e1a09cf204bb42 Mon Sep 17 00:00:00 2001 From: Nils Bunger Date: Sun, 8 Sep 2013 17:08:33 -0700 Subject: [PATCH] Make shell.exec() treat process error return codes as shelljs errors --- src/exec.js | 4 ++++ test/exec.js | 16 ++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/exec.js b/src/exec.js index 592b459..beb4e0e 100644 --- a/src/exec.js +++ b/src/exec.js @@ -82,6 +82,10 @@ function execSync(cmd, opts) { try { common.unlinkSync(codeFile); } catch(e) {} try { common.unlinkSync(sleepFile); } catch(e) {} + // some shell return codes are defined as errors, per http://tldp.org/LDP/abs/html/exitcodes.html + if (code === 1 || code === 2 || code >= 126) { + common.error('Exec returned error code' + code, true); + } // True if successful, false if not var obj = { code: code, diff --git a/test/exec.js b/test/exec.js index e721808..f7d8ef5 100644 --- a/test/exec.js +++ b/test/exec.js @@ -22,6 +22,22 @@ assert.ok(shell.error()); var result = shell.exec('asdfasdf'); // could not find command assert.ok(result.code > 0); +// Test 'fatal' mode for exec, temporarily overriding process.exit +var old_fatal = shell.config.fatal; +var old_exit = process.exit; + +var exitcode = 9999; +process.exit = function (_exitcode) { + exitcode = _exitcode; +}; + +shell.config.fatal = true; + +var result = shell.exec('asdfasdf'); // could not find command +assert.equal(exitcode, 1); + +shell.config.fatal = old_fatal; +process.exit = old_exit; // // Valids