Skip to content

Commit 0da963b

Browse files
committed
Merge pull request shelljs#357 from jcoreio/master
config.fatal now throws an exception
2 parents bceac92 + 6bf7d77 commit 0da963b

5 files changed

Lines changed: 20 additions & 25 deletions

File tree

README.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -637,12 +637,13 @@ Example:
637637
```javascript
638638
require('shelljs/global');
639639
config.fatal = true; // or set('-e');
640-
cp('this_file_does_not_exist', '/dev/null'); // dies here
640+
cp('this_file_does_not_exist', '/dev/null'); // throws Error here
641641
/* more commands... */
642642
```
643643

644-
If `true` the script will die on errors. Default is `false`. This is
645-
analogous to Bash's `set -e`
644+
If `true` the script will throw a Javascript error when any shell.js
645+
command encounters an error. Default is `false`. This is analogous to
646+
Bash's `set -e`
646647

647648
### config.verbose
648649
Example:

shell.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -159,12 +159,13 @@ exports.config = common.config;
159159
//@ ```javascript
160160
//@ require('shelljs/global');
161161
//@ config.fatal = true; // or set('-e');
162-
//@ cp('this_file_does_not_exist', '/dev/null'); // dies here
162+
//@ cp('this_file_does_not_exist', '/dev/null'); // throws Error here
163163
//@ /* more commands... */
164164
//@ ```
165165
//@
166-
//@ If `true` the script will die on errors. Default is `false`. This is
167-
//@ analogous to Bash's `set -e`
166+
//@ If `true` the script will throw a Javascript error when any shell.js
167+
//@ command encounters an error. Default is `false`. This is analogous to
168+
//@ Bash's `set -e`
168169

169170
//@
170171
//@ ### config.verbose

src/common.js

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,11 @@ function error(msg, _continue) {
3838
else
3939
state.error += '\n' + log_entry;
4040

41+
if(!_continue || config.fatal)
42+
throw new Error(log_entry);
43+
4144
if (msg.length > 0)
4245
log(log_entry);
43-
44-
if (config.fatal)
45-
process.exit(1);
46-
47-
if (!_continue)
48-
throw '';
4946
}
5047
exports.error = error;
5148

test/exec.js

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,20 +19,14 @@ assert.ok(result.code > 0);
1919

2020
// Test 'fatal' mode for exec, temporarily overriding process.exit
2121
var old_fatal = shell.config.fatal;
22-
var old_exit = process.exit;
23-
24-
var exitcode = 9999;
25-
process.exit = function (_exitcode) {
26-
exitcode = _exitcode;
27-
};
2822

2923
shell.config.fatal = true;
3024

31-
var result = shell.exec('asdfasdf'); // could not find command
32-
assert.equal(exitcode, 1);
25+
assert.throws(function() {
26+
shell.exec('asdfasdf'); // could not find command
27+
}, /exec: internal error/);
3328

3429
shell.config.fatal = old_fatal;
35-
process.exit = old_exit;
3630

3731
//
3832
// Valids

test/set.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,11 @@ assert.equal(result.stderr, 'ls: no such file or directory: file_doesnt_exist\n'
2828

2929
// set -e
3030
var result = shell.exec('node -e \"require(\'../global\'); set(\'-e\'); ls(\'file_doesnt_exist\'); echo(1234);\"');
31-
assert.equal(result.code, 1);
31+
var nodeVersion = process.versions.node.split('.').map(function(str) { return parseInt(str, 10); });
32+
var uncaughtErrorExitCode = (nodeVersion[0] === 0 && nodeVersion[1] < 11) ? 8 : 1;
33+
assert.equal(result.code, uncaughtErrorExitCode);
3234
assert.equal(result.stdout, '');
33-
assert.equal(result.stderr, 'ls: no such file or directory: file_doesnt_exist\n');
35+
assert(result.stderr.indexOf('Error: ls: no such file or directory: file_doesnt_exist') >= 0);
3436

3537
// set -v
3638
var result = shell.exec('node -e \"require(\'../global\'); set(\'-v\'); ls(\'file_doesnt_exist\'); echo(1234);\"');
@@ -40,9 +42,9 @@ assert.equal(result.stderr, 'ls: no such file or directory: file_doesnt_exist\n'
4042

4143
// set -ev
4244
var result = shell.exec('node -e \"require(\'../global\'); set(\'-ev\'); ls(\'file_doesnt_exist\'); echo(1234);\"');
43-
assert.equal(result.code, 1);
45+
assert.equal(result.code, uncaughtErrorExitCode);
4446
assert.equal(result.stdout, 'ls file_doesnt_exist\n');
45-
assert.equal(result.stderr, 'ls: no such file or directory: file_doesnt_exist\n');
47+
assert(result.stderr.indexOf('Error: ls: no such file or directory: file_doesnt_exist') >= 0);
4648

4749
// set -e, set +e
4850
var result = shell.exec('node -e \"require(\'../global\'); set(\'-e\'); set(\'+e\'); ls(\'file_doesnt_exist\'); echo(1234);\"');

0 commit comments

Comments
 (0)