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:
parent
801e61ad5a
commit
556ebab30e
@ -574,8 +574,7 @@ function checkExecSyncError(ret, args, cmd) {
|
|||||||
err = new Error(msg);
|
err = new Error(msg);
|
||||||
}
|
}
|
||||||
if (err) {
|
if (err) {
|
||||||
err.status = ret.status < 0 ? errname(ret.status) : ret.status;
|
Object.assign(err, ret);
|
||||||
err.signal = ret.signal;
|
|
||||||
}
|
}
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
const common = require('../common');
|
const common = require('../common');
|
||||||
const assert = require('assert');
|
const assert = require('assert');
|
||||||
|
|
||||||
const { execFileSync, execSync } = require('child_process');
|
const { execFileSync, execSync, spawnSync } = require('child_process');
|
||||||
|
|
||||||
const TIMER = 200;
|
const TIMER = 200;
|
||||||
const SLEEP = 2000;
|
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.
|
// Verify the execFileSync() behavior when the child exits with a non-zero code.
|
||||||
{
|
{
|
||||||
const args = ['-e', 'process.exit(1)'];
|
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(() => {
|
assert.throws(() => {
|
||||||
execFileSync(process.execPath, args);
|
execFileSync(process.execPath, args);
|
||||||
@ -121,6 +131,11 @@ assert.strictEqual(ret, `${msg}\n`);
|
|||||||
assert(err instanceof Error);
|
assert(err instanceof Error);
|
||||||
assert.strictEqual(err.message, msg);
|
assert.strictEqual(err.message, msg);
|
||||||
assert.strictEqual(err.status, 1);
|
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;
|
return true;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user