mirror of https://github.com/lukechilds/node.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.2 KiB
51 lines
1.2 KiB
|
|
// handle some git configuration for windows
|
|
|
|
exports.spawn = spawnGit
|
|
exports.chainableExec = chainableExec
|
|
exports.whichAndExec = whichAndExec
|
|
|
|
var exec = require("child_process").execFile
|
|
, spawn = require("./spawn")
|
|
, npm = require("../npm.js")
|
|
, which = require("which")
|
|
, git = npm.config.get("git")
|
|
, assert = require("assert")
|
|
, 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)
|
|
})
|
|
}
|
|
|