From 6ae26226ebd7a3a5d3466357fe4faad475bff940 Mon Sep 17 00:00:00 2001 From: Alex Kocharin Date: Tue, 22 Oct 2013 17:33:39 +0400 Subject: [PATCH] removing all tarballs on unpublish --force --- lib/local-storage.js | 40 +++++++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/lib/local-storage.js b/lib/local-storage.js index 71573d3a6..d45097d7e 100644 --- a/lib/local-storage.js +++ b/lib/local-storage.js @@ -61,17 +61,39 @@ Storage.prototype.add_package = function(name, metadata, callback) { Storage.prototype.remove_package = function(name, callback) { var self = this - self.storage.unlink(name + '/' + info_file, function(err) { - if (err && err.code === 'ENOENT') { - return callback(new UError({ - status: 404, - msg: 'no such package available', - })) + self.storage.read_json(name + '/' + info_file, function(err, data) { + if (err) { + if (err.code === 'ENOENT') { + return callback(new UError({ + status: 404, + msg: 'no such package available', + })) + } else { + return callback(err) + } } + self._normalize_package(data) - // try to unlink the directory, but ignore errors because it can fail - self.storage.rmdir(name, function(err) { - callback() + self.storage.unlink(name + '/' + info_file, function(err) { + if (err) return callback(err) + + var files = Object.keys(data._attachments) + + function unlinkNext(cb) { + if (files.length === 0) return cb() + + var file = files.shift() + self.storage.unlink(name + '/' + file, function() { + unlinkNext(cb) + }) + } + + unlinkNext(function() { + // try to unlink the directory, but ignore errors because it can fail + self.storage.rmdir(name, function(err) { + callback() + }) + }) }) }) }