| |
| // 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) |
| }) |
| } |