Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Continuation of #1492 ("bump request to 2.87.0") #1521

Closed
wants to merge 3 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion package.json
Expand Up @@ -29,7 +29,7 @@
"nopt": "2 || 3",
"npmlog": "0 || 1 || 2 || 3 || 4",
"osenv": "0",
"request": ">=2.9.0 <2.82.0",
"request": "^2.87.0",
"rimraf": "2",
"semver": "~5.3.0",
"tar": "^2.0.0",
Expand Down
138 changes: 138 additions & 0 deletions test/process-exec-sync.js
@@ -0,0 +1,138 @@
'use strict'

var fs = require('graceful-fs')
var child_process = require('child_process')

if (!String.prototype.startsWith) {
String.prototype.startsWith = function(search, pos) {
return this.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search
}
}

function processExecSync(file, args, options) {
var child, error, timeout, tmpdir, command, quote
command = makeCommand(file, args)

/*
this function emulates child_process.execSync for legacy node <= 0.10.x
derived from https://github.com/gvarsanyi/sync-exec/blob/master/js/sync-exec.js
*/

options = options || {}
// init timeout
timeout = Date.now() + options.timeout
// init tmpdir
var os_temp_base = '/tmp'
var os = determine_os()
os_temp_base = '/tmp'

if (process.env.TMP) {
os_temp_base = process.env.TMP
}

if (os_temp_base[os_temp_base.length - 1] !== '/') {
os_temp_base += '/'
}

tmpdir = os_temp_base + 'processExecSync.' + Date.now() + Math.random()
fs.mkdirSync(tmpdir)

// init command
if (os === 'linux') {
command = '(' + command + ' > ' + tmpdir + '/stdout 2> ' + tmpdir +
'/stderr); echo $? > ' + tmpdir + '/status'
} else {
command = '(' + command + ' > ' + tmpdir + '/stdout 2> ' + tmpdir +
'/stderr) | echo %errorlevel% > ' + tmpdir + '/status | exit'
}

// init child
child = child_process.exec(command, options)

var maxTry = 100000 // increases the test time by 6 seconds on win-2016-node-0.10
var tryCount = 0
while (tryCount < maxTry) {
try {
var x = fs.readFileSync(tmpdir + '/status')
if (x.toString() === '0') {
break
}
} catch (ignore) {}
tryCount++
if (Date.now() > timeout) {
error = child
break
}
}

['stdout', 'stderr', 'status'].forEach(function (file) {
child[file] = fs.readFileSync(tmpdir + '/' + file, options.encoding)
setTimeout(unlinkFile, 500, tmpdir + '/' + file)
})

child.status = Number(child.status)
if (child.status !== 0) {
error = child
}

try {
fs.rmdirSync(tmpdir)
} catch (ignore) {}
if (error) {
throw error
}
return child.stdout
}

function makeCommand(file, args) {
var command, quote
command = file
if (args.length > 0) {
for(var i in args) {
command = command + ' '
if (args[i][0] === '-') {
command = command + args[i]
} else {
if (!quote) {
command = command + '\"'
quote = true
}
command = command + args[i]
if (quote) {
if (args.length === (parseInt(i) + 1)) {
command = command + '\"'
}
}
}
}
}
return command
}

function determine_os() {
var os = ''
var tmpVar = ''
if (process.env.OSTYPE) {
tmpVar = process.env.OSTYPE
} else if (process.env.OS) {
tmpVar = process.env.OS
} else {
//default is linux
tmpVar = 'linux'
}

if (tmpVar.startsWith('linux')) {
os = 'linux'
}
if (tmpVar.startsWith('win')) {
os = 'win'
}

return os
}

function unlinkFile(file) {
fs.unlinkSync(file)
}

module.exports = processExecSync
4 changes: 2 additions & 2 deletions test/test-addon.js
Expand Up @@ -6,12 +6,12 @@ var fs = require('graceful-fs')
var child_process = require('child_process')
var addonPath = path.resolve(__dirname, 'node_modules', 'hello_world')
var nodeGyp = path.resolve(__dirname, '..', 'bin', 'node-gyp.js')
var execFileSync = child_process.execFileSync
var execFileSync = child_process.execFileSync || require('./process-exec-sync')
var execFile = child_process.execFile

function runHello() {
var testCode = "console.log(require('hello_world').hello())"
return execFileSync('node', ['-e', testCode], { cwd: __dirname }).toString()
return execFileSync(process.execPath, ['-e', testCode], { cwd: __dirname }).toString()
}

function getEncoding() {
Expand Down