Skip to content

Commit

Permalink
do not fork if no node flags present (#3827)
Browse files Browse the repository at this point in the history
* do not fork if no node flags present

* peer review changes, also ensure `lib/cli/cli.js` is executable
  • Loading branch information
boneskull authored and juergba committed Jun 10, 2019
1 parent d02a096 commit 9ea45e7
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 26 deletions.
58 changes: 32 additions & 26 deletions bin/mocha
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@
'use strict';

/**
* This wrapper executable checks for known node flags and appends them when found, before invoking the "real" _mocha(1) executable.
* This wrapper executable checks for known node flags and appends them when found,
* before invoking the "real" executable (`lib/cli/cli.js`)
*
* @module bin/mocha
* @private
*/

const {deprecate, warn} = require('../lib/utils');
const {spawn} = require('child_process');
const {loadOptions} = require('../lib/cli/options');
const {
unparseNodeFlags,
Expand All @@ -22,7 +22,6 @@ const debug = require('debug')('mocha:cli:mocha');
const {aliases} = require('../lib/cli/run-option-metadata');
const nodeEnv = require('node-environment-flags');

const mochaPath = require.resolve('./_mocha');
const mochaArgs = {};
const nodeArgs = {};

Expand Down Expand Up @@ -118,32 +117,39 @@ if (nodeArgs.gc) {
delete nodeArgs.gc;
}

debug('final node args', nodeArgs);
if (Object.keys(nodeArgs).length) {
const {spawn} = require('child_process');
const mochaPath = require.resolve('../lib/cli/cli.js');

const args = [].concat(
unparseNodeFlags(nodeArgs),
mochaPath,
unparse(mochaArgs, {alias: aliases})
);
debug('final node args', nodeArgs);

debug(`exec ${process.execPath} w/ args:`, args);
const args = [].concat(
unparseNodeFlags(nodeArgs),
mochaPath,
unparse(mochaArgs, {alias: aliases})
);

const proc = spawn(process.execPath, args, {
stdio: 'inherit'
});
debug(`exec ${process.execPath} w/ args:`, args);

proc.on('exit', (code, signal) => {
process.on('exit', () => {
if (signal) {
process.kill(process.pid, signal);
} else {
process.exit(code);
}
const proc = spawn(process.execPath, args, {
stdio: 'inherit'
});
});

// terminate children.
process.on('SIGINT', () => {
proc.kill('SIGINT'); // calls runner.abort()
proc.kill('SIGTERM'); // if that didn't work, we're probably in an infinite loop, so make it die.
});
proc.on('exit', (code, signal) => {
process.on('exit', () => {
if (signal) {
process.kill(process.pid, signal);
} else {
process.exit(code);
}
});
});

// terminate children.
process.on('SIGINT', () => {
proc.kill('SIGINT'); // calls runner.abort()
proc.kill('SIGTERM'); // if that didn't work, we're probably in an infinite loop, so make it die.
});
} else {
require('../lib/cli/cli').main(unparse(mochaArgs, {alias: aliases}));
}
2 changes: 2 additions & 0 deletions lib/cli/cli.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
#!/usr/bin/env node

'use strict';

/**
Expand Down

0 comments on commit 9ea45e7

Please sign in to comment.