in Extensions/Common/lib/vsts-task-lib/toolRunner.js [112:174]
exec(options) {
var defer = Q.defer();
this._debug('exec tool: ' + this.toolPath);
this._debug('Arguments:');
this.args.forEach((arg) => {
this._debug(' ' + arg);
});
var success = true;
options = options || {};
var ops = {
cwd: options.cwd || process.cwd(),
env: options.env || process.env,
silent: options.silent || false,
outStream: options.outStream || process.stdout,
errStream: options.errStream || process.stderr,
failOnStdErr: options.failOnStdErr || false,
ignoreReturnCode: options.ignoreReturnCode || false
};
var argString = this.args.join(' ') || '';
var cmdString = this.toolPath;
if (argString) {
cmdString += (' ' + argString);
}
this._debug('ignoreTempPath=' + process.env['MOCK_IGNORE_TEMP_PATH']);
this._debug('tempPath=' + process.env['MOCK_TEMP_PATH']);
if (process.env['MOCK_IGNORE_TEMP_PATH'] === 'true') {
// Using split/join to replace the temp path
cmdString = cmdString.split(process.env['MOCK_TEMP_PATH']).join('');
}
if (!ops.silent) {
ops.outStream.write('[command]' + cmdString + os.EOL);
}
// TODO: filter process.env
var res = mock.getResponse('exec', cmdString);
//console.log(JSON.stringify(res, null, 2));
if (res.stdout) {
this.emit('stdout', res.stdout);
if (!ops.silent) {
ops.outStream.write(res.stdout + os.EOL);
}
}
if (res.stderr) {
this.emit('stderr', res.stderr);
success = !ops.failOnStdErr;
if (!ops.silent) {
var s = ops.failOnStdErr ? ops.errStream : ops.outStream;
s.write(res.stderr + os.EOL);
}
}
var code = res.code;
ops.outStream.write('rc:' + res.code + os.EOL);
if (code != 0 && !ops.ignoreReturnCode) {
success = false;
}
ops.outStream.write('success:' + success + os.EOL);
if (success) {
defer.resolve(code);
}
else {
defer.reject(new Error(this.toolPath + ' failed with return code: ' + code));
}
return defer.promise;
}