Skip to content

Commit

Permalink
cache: Remove race condition in git fetch/resolve
Browse files Browse the repository at this point in the history
  • Loading branch information
isaacs committed Mar 4, 2013
1 parent da54a74 commit a3d9965
Showing 1 changed file with 18 additions and 21 deletions.
39 changes: 18 additions & 21 deletions lib/cache.js
Original file line number Diff line number Diff line change
Expand Up @@ -471,33 +471,30 @@ function archiveGitRemote (p, u, co, origUrl, cb) {
stdout = (stdout + "\n" + stderr).trim()
if (er) {
log.error("git fetch -a origin ("+u+")", stdout)
return next(er)
return cb(er)
}
log.verbose("git fetch -a origin ("+u+")", stdout)
tmp = path.join(npm.tmp, Date.now()+"-"+Math.random(), "tmp.tgz")
next()
})

exec(git, resolve, env, false, p, function (er, code, stdout, stderr) {
stdout = (stdout + "\n" + stderr).trim()
if (er) {
log.error("Failed resolving git HEAD (" + u + ")", stderr)
return next(er)
}
log.verbose("git rev-list -n1 " + co, stdout)
var parsed = url.parse(origUrl)
parsed.hash = stdout
resolved = url.format(parsed)
log.verbose('resolved git url', resolved)
next()
resolveHead()
})

function next (er) {
if (errState) return
if (er) return cb(errState = er)

if (++n < 2) return
function resolveHead () {
exec(git, resolve, env, false, p, function (er, code, stdout, stderr) {
stdout = (stdout + "\n" + stderr).trim()
if (er) {
log.error("Failed resolving git HEAD (" + u + ")", stderr)
return cb(er)
}
log.verbose("git rev-list -n1 " + co, stdout)
var parsed = url.parse(origUrl)
parsed.hash = stdout
resolved = url.format(parsed)
log.verbose('resolved git url', resolved)
next()
})
}

function next () {
mkdir(path.dirname(tmp), function (er) {
if (er) return cb(er)
var gzip = zlib.createGzip({ level: 9 })
Expand Down

0 comments on commit a3d9965

Please sign in to comment.