Skip to content
This repository has been archived by the owner on Jun 2, 2024. It is now read-only.

unpublish pkg@version bug hotfix. fixed #400 #401

Merged
merged 1 commit into from
Aug 1, 2014
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 38 additions & 10 deletions controllers/registry/module.js
Original file line number Diff line number Diff line change
Expand Up @@ -747,7 +747,7 @@ exports.removeWithVersions = function* (next) {
debug('remove versions: %j, remain versions: %j', removeVersions, remainVersions);

// step 4: remove all the versions which need to remove
yield Module.removeByNameAndVersions(name, removeVersions);
// let removeTar do remove versions from module table
var tags = yield Module.listTags(name);

var removeTags = [];
Expand Down Expand Up @@ -785,20 +785,24 @@ exports.removeTar = function* (next) {
var name = this.params.name || this.params[0];
var filename = this.params.filename || this.params[1];
var id = Number(this.params.rev || this.params[2]);
debug('remove tarball with filename: %s, id: %s', filename, id);

var username = this.user.name;
if (isNaN(id)) {
// cnpmjs.org-2.0.0.tgz
var version = filename.split(name + '-')[1];
if (version) {
// 2.0.0.tgz
version = version.substring(0, version.lastIndexOf('.tgz'));
}
if (!version) {
return yield* next;
}

var mod = yield Module.getById(id);
if (!mod || mod.name !== name) {
debug('remove tarball with filename: %s, version: %s, revert to => rev id: %s', filename, version, id);

var username = this.user.name;
if (isNaN(id)) {
return yield* next;
}

var isMaintainer = yield* packageService.isMaintainer(name, username);

if (!isMaintainer && !this.user.isAdmin) {
this.status = 403;
this.body = {
Expand All @@ -807,9 +811,33 @@ exports.removeTar = function* (next) {
};
return;
}
var key = mod.package.dist && mod.package.dist.key;

var rs = yield [
Module.getById(id),
Module.get(name, version),
];
var revertTo = rs[0];
var mod = rs[1]; // module need to delete
if (!mod || mod.name !== name) {
return yield* next;
}

var key = mod.package && mod.package.dist && mod.package.dist.key;
key = key || common.getCDNKey(mod.name, filename);
yield nfs.remove(key);

if (revertTo && revertTo.package) {
debug('removing key: %s from nfs, revert to %s@%s', key, revertTo.name, revertTo.package.version);
} else {
debug('removing key: %s from nfs, no revert mod', key);
}
try {
yield nfs.remove(key);
} catch (err) {
logger.error(err);
}
// remove version from table
yield Module.removeByNameAndVersions(name, [version]);
debug('removed %s@%s', name, version);
this.body = { ok: true };
};

Expand Down