diff options
author | isaacs <i@izs.me> | 2011-02-25 04:56:11 +0300 |
---|---|---|
committer | isaacs <i@izs.me> | 2011-02-25 04:56:11 +0300 |
commit | bd5629559d50317bf7acca36e4857999c5fdcacd (patch) | |
tree | e293bbad9bdb4592ec17e6b3fdb4ff32220e68a7 | |
parent | d7dcacea6f17437fd88321987ca6aa8fe3c017d8 (diff) |
Don't try to chdir when it'll fail
-rw-r--r-- | lib/utils/lifecycle.js | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/lib/utils/lifecycle.js b/lib/utils/lifecycle.js index 5dd10a0f7..00968c844 100644 --- a/lib/utils/lifecycle.js +++ b/lib/utils/lifecycle.js @@ -18,7 +18,12 @@ function lifecycle (pkg, stage, wd, cb) { if (!pkg) return cb(new Error("Invalid package data")) log(pkg._id, stage) - wd = validWd(wd || path.join(npm.dir, pkg.name, pkg.version, "package")) + var pkgdir = path.join(npm.dir, pkg.name, pkg.version, "package") + wd = validWd(wd || pkgdir) + if (wd !== pkgdir && !npm.config.get("unsafe-perm")) { + log.warn(pkg._id, "Skipping "+stage+" script, since it'll fail.") + return cb() + } // set the env variables, then run scripts as a child process. var env = makeEnv(pkg) @@ -146,11 +151,14 @@ function runPackageLifecycle (pkg, env, wd, cb) { , user = pkg._link || up ? null : npm.config.get("user") , group = pkg._link || up ? null : npm.config.get("group") , cmd = env.npm_lifecycle_script + , cwd = process.cwd() log.verbose(up, "unsafe-perm in lifecycle") + process.chdir(wd) exec( "sh", ["-c", cmd], env, true, wd , user, group , function (er, code, stdout, stderr) { + process.chdir(cwd) if (er && !npm.ROLLBACK) { log("Failed to exec "+stage+" script", pkg._id) er.message = pkg._id + " " @@ -185,9 +193,12 @@ function runHookLifecycle (pkg, env, wd, cb) { fs.stat(hook, function (er) { if (er) return cb() + var cwd = process.cwd() + process.chdir(wd) exec( "sh", ["-c", cmd], env, true, wd , user, group , function (er) { + process.chdir(cwd) if (er) { er.message += "\nFailed to exec "+stage+" hook script" log(er, pkg._id) |