diff --git a/lib/child_process.js b/lib/child_process.js index bcbd08d6cb..8afd7b225c 100644 --- a/lib/child_process.js +++ b/lib/child_process.js @@ -664,7 +664,7 @@ exports.execFile = function(file /* args, options, callback */) { var exited = false; var timeoutId; - var ex; + var ex = null; function exithandler(code, signal) { if (exited) return; @@ -689,16 +689,25 @@ exports.execFile = function(file /* args, options, callback */) { } if (ex) { - callback(ex, stdout, stderr); + // Will be handled later } else if (code === 0 && signal === null) { callback(null, stdout, stderr); - } else { - ex = new Error('Command failed: ' + stderr); + return; + } + + var cmd = file; + if (args.length !== 0) + cmd += ' ' + args.join(' '); + + if (!ex) { + ex = new Error('Command failed: ' + cmd + '\n' + stderr); ex.killed = child.killed || killed; ex.code = code < 0 ? uv.errname(code) : code; ex.signal = signal; - callback(ex, stdout, stderr); } + + ex.cmd = cmd; + callback(ex, stdout, stderr); } function errorhandler(e) { diff --git a/test/simple/test-child-process-exec-error.js b/test/simple/test-child-process-exec-error.js index 2afe114434..afe1997643 100644 --- a/test/simple/test-child-process-exec-error.js +++ b/test/simple/test-child-process-exec-error.js @@ -28,6 +28,7 @@ function test(fun, code) { fun('does-not-exist', function(err) { assert.equal(err.code, code); + assert(/does\-not\-exist/.test(err.cmd)); errors++; });