Example #1
0
function runScripts(scripts, files) {
	const spawnOptions = {
		env: Object.assign({}, process.env, {PATH: npmRunPath({cwd: __dirname})}),
		stdio: 'inherit'
	};

	scripts.forEach(script => {
		const result = execa.sync(require.resolve('.bin/jscodeshift'), ['-t', script].concat(files), spawnOptions);

		if (result.error) {
			throw result.error;
		}
	});
}
Example #2
0
	return new Promise(function (resolve, reject) {
		var parsed = crossSpawnAsync._parse(cmd, args, opts);

		opts = objectAssign({
			maxBuffer: TEN_MEBIBYTE,
			stripEof: true,
			preferLocal: true
		}, parsed.options);

		var handle = function (val) {
			if (opts.stripEof) {
				val = stripEof(val);
			}

			return val;
		};

		if (opts.preferLocal) {
			opts.env = objectAssign({}, opts.env || process.env);
			opts.env[pathKey] = npmRunPath({
				cwd: opts.cwd,
				path: opts.env[pathKey]
			});
		}

		var spawned = childProcess.execFile(parsed.command, parsed.args, opts, function (err, stdout, stderr) {
			if (err) {
				err.stdout = stdout;
				err.stderr = stderr;
				reject(err);
				return;
			}

			resolve({
				stdout: handle(stdout),
				stderr: handle(stderr)
			});
		});

		crossSpawnAsync._enoent.hookChildProcess(spawned, parsed);
	});
Example #3
0
function handleArgs(cmd, args, opts) {
	var parsed;

	if (opts && opts.__winShell === true) {
		delete opts.__winShell;
		parsed = {
			command: cmd,
			args: args,
			options: opts,
			file: cmd,
			original: cmd
		};
	} else {
		parsed = crossSpawnAsync._parse(cmd, args, opts);
	}

	opts = objectAssign({
		maxBuffer: TEN_MEBIBYTE,
		stripEof: true,
		preferLocal: true,
		encoding: 'utf8'
	}, parsed.options);

	if (opts.preferLocal) {
		opts.env = objectAssign({}, opts.env || process.env);
		opts.env[pathKey] = npmRunPath({
			cwd: opts.cwd,
			path: opts.env[pathKey]
		});
	}

	return {
		cmd: parsed.command,
		args: parsed.args,
		opts: opts
	};
}
Example #4
0
	grunt.registerMultiTask('shell', 'Run shell commands', function () {
		var cb = this.async();
		var opts = this.options({
			stdout: true,
			stderr: true,
			stdin: true,
			failOnError: true,
			stdinRawMode: false,
			preferLocal: false,
			execOptions: {
				env: null
			}
		});

		var cmd = typeof this.data === 'string' ? this.data : this.data.command;

		if (cmd === undefined) {
			throw new Error('`command` required');
		}

		cmd = grunt.template.process(typeof cmd === 'function' ? cmd.apply(grunt, arguments) : cmd);

		if (opts.preferLocal === true) {
			opts.execOptions.env = opts.execOptions.env || objectAssign({}, process.env);
			opts.execOptions.env.PATH = npmRunPath({path: opts.execOptions.env.PATH});
		}

		var cp = exec(cmd, opts.execOptions, function (err, stdout, stderr) {
			if (typeof opts.callback === 'function') {
				opts.callback.call(this, err, stdout, stderr, cb);
			} else {
				if (err && opts.failOnError) {
					grunt.warn(err);
				}
				cb();
			}
		}.bind(this));

		var captureOutput = function (child, output) {
			if (grunt.option('color') === false) {
				child.on('data', function (data) {
					output.write(chalk.stripColor(data));
				});
			} else {
				child.pipe(output);
			}
		};

		grunt.verbose.writeln('Command:', chalk.yellow(cmd));

		if (opts.stdout || grunt.option('verbose')) {
			captureOutput(cp.stdout, process.stdout);
		}

		if (opts.stderr || grunt.option('verbose')) {
			captureOutput(cp.stderr, process.stderr);
		}

		if (opts.stdin) {
			process.stdin.resume();
			process.stdin.setEncoding('utf8');

			if (opts.stdinRawMode && process.stdin.isTTY) {
				process.stdin.setRawMode(true);
			}

			process.stdin.pipe(cp.stdin);
		}
	});