child_process: restore exec{File}Sync error props

In PR [1], a bunch of properties were removed from the error thrown by
execSync and execFileSync. It turns out that some of those were still
supposed to be there, as the documentation states that the error
contains the entire result from the spawnSync call.

[1] https://github.com/nodejs/node/pull/13601

PR-URL: https://github.com/nodejs/node/pull/16060
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
This commit is contained in:
Michaël Zasso 2017-10-06 21:06:18 -07:00
parent 801e61ad5a
commit 556ebab30e
2 changed files with 17 additions and 3 deletions

View File

@ -574,8 +574,7 @@ function checkExecSyncError(ret, args, cmd) {
err = new Error(msg);
}
if (err) {
err.status = ret.status < 0 ? errname(ret.status) : ret.status;
err.signal = ret.signal;
Object.assign(err, ret);
}
return err;
}

View File

@ -23,7 +23,7 @@
const common = require('../common');
const assert = require('assert');
const { execFileSync, execSync } = require('child_process');
const { execFileSync, execSync, spawnSync } = require('child_process');
const TIMER = 200;
const SLEEP = 2000;
@ -112,6 +112,16 @@ assert.strictEqual(ret, `${msg}\n`);
// Verify the execFileSync() behavior when the child exits with a non-zero code.
{
const args = ['-e', 'process.exit(1)'];
const spawnSyncResult = spawnSync(process.execPath, args);
const spawnSyncKeys = Object.keys(spawnSyncResult).sort();
assert.deepStrictEqual(spawnSyncKeys, [
'output',
'pid',
'signal',
'status',
'stderr',
'stdout'
]);
assert.throws(() => {
execFileSync(process.execPath, args);
@ -121,6 +131,11 @@ assert.strictEqual(ret, `${msg}\n`);
assert(err instanceof Error);
assert.strictEqual(err.message, msg);
assert.strictEqual(err.status, 1);
assert.strictEqual(typeof err.pid, 'number');
spawnSyncKeys.forEach((key) => {
if (key === 'pid') return;
assert.deepStrictEqual(err[key], spawnSyncResult[key]);
});
return true;
});
}