diff options
Diffstat (limited to 'deps/npm/lib/utils/git.js')
-rw-r--r-- | deps/npm/lib/utils/git.js | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/deps/npm/lib/utils/git.js b/deps/npm/lib/utils/git.js new file mode 100644 index 0000000000..7e20151938 --- /dev/null +++ b/deps/npm/lib/utils/git.js @@ -0,0 +1,45 @@ + +// handle some git configuration for windows + +exports.spawn = spawnGit +exports.chainableExec = chainableExec +exports.whichAndExec = whichAndExec + +var exec = require("child_process").execFile + , spawn = require("child_process").spawn + , npm = require("../npm.js") + , which = require("which") + , git = npm.config.get("git") + +function prefixGitArgs() { + return process.platform === "win32" ? ["-c", "core.longpaths=true"] : [] +} + +function execGit(args, options, cb) { + return exec(git, prefixGitArgs().concat(args || []), options, cb) +} + +function spawnGit(args, options, cb) { + 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) { + // check for git + whichGit(function (err) { + if (err) { + err.code = "ENOGIT" + return cb(err) + } + + execGit(args, options, cb) + }) +} |