summaryrefslogtreecommitdiff
path: root/deps/npm/lib/utils/error-handler.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/npm/lib/utils/error-handler.js')
-rw-r--r--deps/npm/lib/utils/error-handler.js22
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.