Skip to content

Commit

Permalink
feat: add unpublishRemoveTarball mode (#1536)
Browse files Browse the repository at this point in the history
  • Loading branch information
XadillaX authored and fengmk2 committed Dec 12, 2019
1 parent e7bafb2 commit 2c511f2
Show file tree
Hide file tree
Showing 5 changed files with 91 additions and 28 deletions.
2 changes: 2 additions & 0 deletions config/index.js
Expand Up @@ -160,6 +160,8 @@ var config = {
downloadRedirectToNFS: false,
// don't check database and just download tgz from nfs
downloadTgzDontCheckModule: false,
// remove original tarball when publishing
unpublishRemoveTarball: true,

// registry url name
registryHost: 'r.cnpmjs.org',
Expand Down
33 changes: 18 additions & 15 deletions controllers/registry/package/remove.js
Expand Up @@ -6,6 +6,7 @@ var packageService = require('../../../services/package');
var totalService = require('../../../services/total');
var nfs = require('../../../common/nfs');
var logger = require('../../../common/logger');
var config = require('../../../config');

// DELETE /:name/-rev/:rev
// https://github.com/npm/npm-registry-client/blob/master/lib/unpublish.js#L25
Expand All @@ -27,23 +28,25 @@ module.exports = function* remove(next) {
totalService.plusDeleteModule(),
];

var keys = [];
for (var i = 0; i < mods.length; i++) {
var row = mods[i];
var dist = row.package.dist;
var key = dist.key;
if (!key) {
key = urlparse(dist.tarball).pathname;
if (config.unpublishRemoveTarball) {
var keys = [];
for (var i = 0; i < mods.length; i++) {
var row = mods[i];
var dist = row.package.dist;
var key = dist.key;
if (!key) {
key = urlparse(dist.tarball).pathname;
}
key && keys.push(key);
}
key && keys.push(key);
}

try {
yield keys.map(function (key) {
return nfs.remove(key);
});
} catch (err) {
logger.error(err);
try {
yield keys.map(function (key) {
return nfs.remove(key);
});
} catch (err) {
logger.error(err);
}
}

// remove the maintainers
Expand Down
31 changes: 18 additions & 13 deletions controllers/registry/package/remove_version.js
Expand Up @@ -5,6 +5,7 @@ var packageService = require('../../../services/package');
var nfs = require('../../../common/nfs');
var logger = require('../../../common/logger');
var getCDNKey = require('../../../lib/common').getCDNKey;
var config = require('../../../config');

// DELETE /:name/download/:filename/-rev/:rev
// https://github.com/npm/npm-registry-client/blob/master/lib/unpublish.js#L97
Expand Down Expand Up @@ -38,21 +39,25 @@ module.exports = function* removeOneVersion(next) {
return yield next;
}

var key = mod.package && mod.package.dist && mod.package.dist.key;
if (!key) {
key = getCDNKey(mod.name, filename);
}
if (config.unpublishRemoveTarball) {
var key = mod.package && mod.package.dist && mod.package.dist.key;
if (!key) {
key = getCDNKey(mod.name, filename);
}

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);
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 packageService.removeModulesByNameAndVersions(name, [version]);
debug('removed %s@%s', name, version);
Expand Down
26 changes: 26 additions & 0 deletions test/controllers/registry/package/remove.test.js
Expand Up @@ -65,6 +65,32 @@ describe('test/controllers/registry/package/remove.test.js', function () {
});
});

it('should not remove nfs', function (done) {
let called = false;
mm(config, 'unpublishRemoveTarball', false);
mm(nfs, 'remove', function* () {
called = true;
});

var pkg = utils.getPackage('@cnpmtest/testmodule-remove-2', '3.0.0', utils.otherUser);
request(app)
.put('/' + pkg.name)
.set('authorization', utils.otherUserAuth)
.send(pkg)
.expect(201, function() {
request(app)
.del('/@cnpmtest/testmodule-remove-2/-rev/1')
.set('authorization', utils.adminAuth)
.expect(200, function (err) {
called.should.equal(false);
should.not.exist(err);
request(app)
.get('/@cnpmtest/testmodule-remove-2')
.expect(404, done);
});
});
});

describe('mock error', function () {
beforeEach(function (done) {
var pkg = utils.getPackage('@cnpmtest/testmodule-remove-mock-1', '2.0.0', utils.admin);
Expand Down
27 changes: 27 additions & 0 deletions test/controllers/registry/package/remove_version.test.js
Expand Up @@ -7,6 +7,7 @@ var app = require('../../../../servers/registry');
var utils = require('../../../utils');
var packageService = require('../../../../services/package');
var nfs = require('../../../../common/nfs');
var config = require('../../../../config');

describe('test/controllers/registry/package/remove_version.test.js', function () {
afterEach(mm.restore);
Expand Down Expand Up @@ -78,6 +79,32 @@ describe('test/controllers/registry/package/remove_version.test.js', function ()
.expect(200, done);
});

it('should not remove nfs', function (done) {
let called = false;
mm(config, 'unpublishRemoveTarball', false);
mm(nfs, 'remove', function* () {
called = true;
});

var pkg = utils.getPackage('@cnpmtest/testmodule-remove_version-2', '3.0.0', utils.otherUser);
request(app)
.put('/' + pkg.name)
.set('authorization', utils.otherUserAuth)
.send(pkg)
.expect(201, function() {
request(app)
.del('/@cnpmtest/testmodule-remove_version-2/download/@cnpmtest/testmodule-remove_version-2-3.0.0.tgz/-rev/1')
.set('authorization', utils.adminAuth)
.expect(200, function (err) {
called.should.equal(false);
should.not.exist(err);
request(app)
.get('/@cnpmtest/testmodule-remove-2')
.expect(404, done);
});
});
});

describe('mock error', function () {
before(function (done) {
var pkg = utils.getPackage('@cnpmtest/testmodule-remove_version-1', '0.0.2', utils.otherUser);
Expand Down

0 comments on commit 2c511f2

Please sign in to comment.