blob: 06c1e3f9f7eb7cdc717701f410c432290bdfdd6d [file] [log] [blame]
// cheesy hackaround for test deps (read: nock) that rely on setImmediate
if (!global.setImmediate || !require('timers').setImmediate) {
require('timers').setImmediate = global.setImmediate = function () {
var args = [arguments[0], 0].concat([].slice.call(arguments, 1))
setTimeout.apply(this, args)
}
}
var spawn = require('child_process').spawn
var path = require('path')
var port = exports.port = 1337
exports.registry = 'http://localhost:' + port
process.env.npm_config_loglevel = 'error'
var npm_config_cache = path.resolve(__dirname, 'npm_cache')
process.env.npm_config_cache = exports.npm_config_cache = npm_config_cache
process.env.npm_config_userconfig = exports.npm_config_userconfig = path.join(__dirname, 'fixtures', 'config', 'userconfig')
process.env.npm_config_globalconfig = exports.npm_config_globalconfig = path.join(__dirname, 'fixtures', 'config', 'globalconfig')
process.env.random_env_var = 'foo'
// suppress warnings about using a prerelease version of node
process.env.npm_config_node_version = process.version.replace(/-.*$/, '')
var bin = exports.bin = require.resolve('../bin/npm-cli.js')
var chain = require('slide').chain
var once = require('once')
exports.npm = function npm (cmd, opts, cb) {
cb = once(cb)
cmd = [bin].concat(cmd)
opts = opts || {}
opts.env = opts.env || process.env
if (!opts.env.npm_config_cache) {
opts.env.npm_config_cache = npm_config_cache
}
var stdout = ''
var stderr = ''
var node = process.execPath
var child = spawn(node, cmd, opts)
if (child.stderr) {
child.stderr.on('data', function (chunk) {
stderr += chunk
})
}
if (child.stdout) {
child.stdout.on('data', function (chunk) {
stdout += chunk
})
}
child.on('error', cb)
child.on('close', function (code) {
cb(null, code, stdout, stderr)
})
return child
}
exports.makeGitRepo = function makeGitRepo (params, cb) {
// git must be called after npm.load because it uses config
var git = require('../lib/utils/git.js')
var root = params.path || process.cwd()
var user = params.user || 'PhantomFaker'
var email = params.email || 'nope@not.real'
var added = params.added || ['package.json']
var message = params.message || 'stub repo'
var opts = { cwd: root, env: { PATH: process.env.PATH }}
var commands = [
git.chainableExec(['init'], opts),
git.chainableExec(['config', 'user.name', user], opts),
git.chainableExec(['config', 'user.email', email], opts),
git.chainableExec(['add'].concat(added), opts),
git.chainableExec(['commit', '-m', message], opts)
]
if (Array.isArray(params.commands)) {
commands = commands.concat(params.commands)
}
chain(commands, cb)
}
exports.rmFromInShrinkwrap = function rmFromInShrinkwrap (obj) {
for (var i in obj) {
if (i === "from")
delete obj[i]
else if (i === "dependencies")
for (var j in obj[i])
exports.rmFromInShrinkwrap(obj[i][j])
}
return obj
}