node/deps/npm/lib/utils/git.js
Rebecca Turner 41923c0c07 deps: upgrade npm to 3.3.6
PR-URL: https://github.com/nodejs/node/pull/3310
Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
2015-10-22 13:56:09 -04:00

51 lines
1.2 KiB
JavaScript

// handle some git configuration for windows
exports.spawn = spawnGit
exports.chainableExec = chainableExec
exports.whichAndExec = whichAndExec
var exec = require('child_process').execFile
var spawn = require('./spawn')
var npm = require('../npm.js')
var which = require('which')
var git = npm.config.get('git')
var assert = require('assert')
var log = require('npmlog')
function prefixGitArgs () {
return process.platform === 'win32' ? ['-c', 'core.longpaths=true'] : []
}
function execGit (args, options, cb) {
log.info('git', args)
var fullArgs = prefixGitArgs().concat(args || [])
return exec(git, fullArgs, options, cb)
}
function spawnGit (args, options) {
log.info('git', args)
return spawn(git, prefixGitArgs().concat(args || []), options)
}
function chainableExec () {
var args = Array.prototype.slice.call(arguments)
return [execGit].concat(args)
}
function whichGit (cb) {
return which(git, cb)
}
function whichAndExec (args, options, cb) {
assert.equal(typeof cb, 'function', 'no callback provided')
// check for git
whichGit(function (err) {
if (err) {
err.code = 'ENOGIT'
return cb(err)
}
execGit(args, options, cb)
})
}