diff options
Diffstat (limited to 'deps/npm/lib/utils/error-handler.js')
-rw-r--r-- | deps/npm/lib/utils/error-handler.js | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/deps/npm/lib/utils/error-handler.js b/deps/npm/lib/utils/error-handler.js index 089c71228b..5c4f4c99e8 100644 --- a/deps/npm/lib/utils/error-handler.js +++ b/deps/npm/lib/utils/error-handler.js @@ -9,6 +9,8 @@ var cbCalled = false , path = require("path") , wroteLogFile = false , exitCode = 0 + , rollbacks = npm.rollbacks + , chain = require("slide").chain process.on("exit", function (code) { @@ -50,8 +52,24 @@ function exit (code, noLog) { log.verbose("exit", [code, doExit]) if (log.level === "silent") noLog = true - if (code && !noLog) writeLogFile(reallyExit) - else rm("npm-debug.log", function () { rm(npm.tmp, reallyExit) }) + if (rollbacks.length) { + chain(rollbacks.map(function (f) { + return function (cb) { + npm.commands.unbuild([f], true, cb) + } + }), function (er) { + if (er) { + log.error("error rolling back", er) + if (!code) errorHandler(er) + else reallyExit(er) + } else { + rm("npm-debug.log", reallyExit) + } + }) + rollbacks.length = 0 + } + else if (code && !noLog) writeLogFile(reallyExit) + else reallyExit() function reallyExit() { // truncate once it's been written. |