Compare commits
5 Commits
3.0.0-alph
...
3.0.0-alph
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ee79a80fc0 | ||
|
|
ee9bf331c4 | ||
|
|
5b63dbe514 | ||
|
|
32434b22dc | ||
|
|
bb77186bbc |
@@ -3,7 +3,6 @@ language: node_js
|
||||
node_js:
|
||||
- '4'
|
||||
- '6'
|
||||
- '7'
|
||||
- '8'
|
||||
addons:
|
||||
- postgresql: '9.3'
|
||||
|
||||
@@ -1,19 +1,5 @@
|
||||
/**!
|
||||
* cnpmjs.org - controllers/registry/package/deprecate.js
|
||||
*
|
||||
* Copyright(c) fengmk2 and other contributors.
|
||||
* MIT Licensed
|
||||
*
|
||||
* Authors:
|
||||
* fengmk2 <fengmk2@gmail.com> (http://fengmk2.github.com)
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
var packageService = require('../../../services/package');
|
||||
|
||||
module.exports = deprecateVersions;
|
||||
@@ -51,10 +37,10 @@ function* deprecateVersions() {
|
||||
}
|
||||
yield updateTasks;
|
||||
// update last modified
|
||||
yield* packageService.updateModuleLastModified(name);
|
||||
yield packageService.updateModuleLastModified(name);
|
||||
|
||||
this.status = 201;
|
||||
this.body = {
|
||||
ok: true
|
||||
ok: true,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,19 +1,5 @@
|
||||
/**!
|
||||
* cnpmjs.org - controllers/registry/package/list_all.js
|
||||
*
|
||||
* Copyright(c) fengmk2 and other contributors.
|
||||
* MIT Licensed
|
||||
*
|
||||
* Authors:
|
||||
* fengmk2 <fengmk2@gmail.com> (http://fengmk2.github.com)
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
var packageService = require('../../../services/package');
|
||||
|
||||
// GET /-/all
|
||||
|
||||
@@ -1,21 +1,32 @@
|
||||
/**!
|
||||
* Copyright(c) cnpm and other contributors.
|
||||
* MIT Licensed
|
||||
*
|
||||
* Authors:
|
||||
* fengmk2 <fengmk2@gmail.com> (http://fengmk2.com)
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
var packageService = require('../../../services/package');
|
||||
const packageService = require('../../../services/package');
|
||||
const config = require('../../../config');
|
||||
|
||||
// GET /-/short
|
||||
// List all packages names only
|
||||
// List public all packages names only
|
||||
module.exports = function* () {
|
||||
if (this.query.private_only) {
|
||||
const tasks = [];
|
||||
for (let i = 0; i < config.scopes.length; i++) {
|
||||
const scope = config.scopes[i];
|
||||
tasks.push(packageService.listPrivateModulesByScope(scope));
|
||||
}
|
||||
|
||||
if (config.privatePackages && config.privatePackages.length > 0) {
|
||||
tasks.push(packageService.listModules(config.privatePackages));
|
||||
}
|
||||
|
||||
const results = yield tasks;
|
||||
const names = [];
|
||||
for (const rows of results) {
|
||||
for (const row of rows) {
|
||||
names.push(row.name);
|
||||
}
|
||||
}
|
||||
this.body = names;
|
||||
return;
|
||||
}
|
||||
|
||||
this.body = yield packageService.listAllPublicModuleNames();
|
||||
};
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
var packageService = require('../../../services/package');
|
||||
|
||||
var A_WEEK_MS = 3600000 * 24 * 7;
|
||||
var TWA_DAYS_MS = 3600000 * 24 * 2;
|
||||
|
||||
// GET /-/all/since?stale=update_after&startkey={key}
|
||||
// List packages names since startkey
|
||||
@@ -30,9 +31,9 @@ module.exports = function* listSince() {
|
||||
|
||||
var updated = Date.now();
|
||||
if (updated - startkey > A_WEEK_MS) {
|
||||
startkey = updated - A_WEEK_MS;
|
||||
console.warn('[%s] list modules since time out of range: query: %j, ip: %s',
|
||||
Date(), query, this.ip);
|
||||
startkey = updated - TWA_DAYS_MS;
|
||||
console.warn('[%s] list modules since time out of range: query: %j, ip: %s, limit to %s',
|
||||
Date(), query, this.ip, startkey);
|
||||
}
|
||||
|
||||
var names = yield packageService.listPublicModuleNamesSince(startkey);
|
||||
|
||||
@@ -21,6 +21,7 @@ var common = require('../lib/common');
|
||||
var npmSerivce = require('../services/npm');
|
||||
var packageService = require('../services/package');
|
||||
var logService = require('../services/module_log');
|
||||
var hook = require('../services/hook');
|
||||
var User = require('../models').User;
|
||||
var os = require('os');
|
||||
|
||||
@@ -105,7 +106,7 @@ SyncModuleWorker.prototype._saveLog = function () {
|
||||
var logstr = that._log;
|
||||
that._log = '';
|
||||
co(function* () {
|
||||
yield* logService.append(that._logId, logstr);
|
||||
yield logService.append(that._logId, logstr);
|
||||
}).then(function () {
|
||||
that._loging = false;
|
||||
if (that._log) {
|
||||
@@ -589,6 +590,8 @@ SyncModuleWorker.prototype._sync = function* (name, pkg) {
|
||||
}
|
||||
}
|
||||
|
||||
// any properties changed versions
|
||||
var changedVersions = {};
|
||||
var missingVersions = [];
|
||||
var missingTags = [];
|
||||
var missingDescriptions = [];
|
||||
@@ -734,6 +737,7 @@ SyncModuleWorker.prototype._sync = function* (name, pkg) {
|
||||
id: exists.id,
|
||||
description: version.description
|
||||
});
|
||||
changedVersions[v] = 1;
|
||||
}
|
||||
|
||||
if (config.enableAbbreviatedMetadata) {
|
||||
@@ -751,6 +755,7 @@ SyncModuleWorker.prototype._sync = function* (name, pkg) {
|
||||
id: exists.id,
|
||||
readme: version.readme,
|
||||
});
|
||||
changedVersions[v] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -760,6 +765,7 @@ SyncModuleWorker.prototype._sync = function* (name, pkg) {
|
||||
id: exists.id,
|
||||
deprecated: version.deprecated,
|
||||
});
|
||||
changedVersions[v] = 1;
|
||||
}
|
||||
if (exists.package.deprecated && !version.deprecated) {
|
||||
// remove deprecated info
|
||||
@@ -767,6 +773,7 @@ SyncModuleWorker.prototype._sync = function* (name, pkg) {
|
||||
id: exists.id,
|
||||
deprecated: undefined,
|
||||
});
|
||||
changedVersions[v] = 1;
|
||||
}
|
||||
// find missing abbreviatedMetadata
|
||||
if (abbreviatedMetadata) {
|
||||
@@ -791,6 +798,7 @@ SyncModuleWorker.prototype._sync = function* (name, pkg) {
|
||||
Object.assign(version, abbreviatedMetadata);
|
||||
}
|
||||
missingVersions.push(version);
|
||||
changedVersions[v] = 1;
|
||||
}
|
||||
|
||||
// find out deleted versions
|
||||
@@ -1148,6 +1156,21 @@ SyncModuleWorker.prototype._sync = function* (name, pkg) {
|
||||
yield syncAbbreviatedMetadatas();
|
||||
yield syncDeprecatedsOnExistsModuleAbbreviated();
|
||||
|
||||
changedVersions = Object.keys(changedVersions);
|
||||
// hooks
|
||||
const envelope = {
|
||||
event: 'package:sync',
|
||||
name: name,
|
||||
type: 'package',
|
||||
version: null,
|
||||
hookOwner: null,
|
||||
payload: {
|
||||
changedVersions,
|
||||
},
|
||||
change: null,
|
||||
};
|
||||
hook.trigger(envelope);
|
||||
|
||||
return syncedVersionNames;
|
||||
};
|
||||
|
||||
|
||||
@@ -1,20 +1,5 @@
|
||||
/**!
|
||||
* cnpmjs.org - controllers/web/package/list_privates.js
|
||||
*
|
||||
* Copyright(c) cnpmjs.org and other contributors.
|
||||
* MIT Licensed
|
||||
*
|
||||
* Authors:
|
||||
* dead_horse <dead_horse@qq.com> (http://deadhorse.me)
|
||||
* fengmk2 <fengmk2@gmail.com> (http://fengmk2.github.com)
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
var packageService = require('../../../services/package');
|
||||
var config = require('../../../config');
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "cnpmjs.org",
|
||||
"version": "3.0.0-alpha.8",
|
||||
"version": "3.0.0-alpha.11",
|
||||
"description": "Private npm registry and web for Enterprise, base on MySQL and Simple Store Service",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
@@ -87,8 +87,7 @@
|
||||
"web": "https://github.com/cnpm/cnpmjs.org"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/cnpm/cnpmjs.org/issues",
|
||||
"email": "fengmk2@gmail.com"
|
||||
"url": "https://github.com/cnpm/cnpmjs.org/issues"
|
||||
},
|
||||
"keywords": [
|
||||
"cnpmjs.org",
|
||||
|
||||
@@ -27,7 +27,7 @@ function* getFirstSyncPackages(lastSyncModule) {
|
||||
|
||||
module.exports = function* sync() {
|
||||
var syncTime = Date.now();
|
||||
var info = yield* totalService.getTotalInfo();
|
||||
var info = yield totalService.getTotalInfo();
|
||||
if (!info) {
|
||||
throw new Error('can not found total info');
|
||||
}
|
||||
@@ -36,7 +36,7 @@ module.exports = function* sync() {
|
||||
logger.syncInfo('Last sync time %s', new Date(info.last_sync_time));
|
||||
if (!info.last_sync_time) {
|
||||
logger.syncInfo('First time sync all packages from official registry');
|
||||
packages = yield* getFirstSyncPackages(info.last_sync_module);
|
||||
packages = yield getFirstSyncPackages(info.last_sync_module);
|
||||
} else {
|
||||
var result = yield npmService.fetchUpdatesSince(info.last_sync_time);
|
||||
syncTime = result.lastModified;
|
||||
|
||||
@@ -1,19 +1,6 @@
|
||||
/**!
|
||||
* cnpmjs.org - test/controllers/registry/package/deprecate.test.js
|
||||
*
|
||||
* Copyright(c) cnpmjs.org and other contributors.
|
||||
* MIT Licensed
|
||||
*
|
||||
* Authors:
|
||||
* fengmk2 <fengmk2@gmail.com> (http://fengmk2.github.com)
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
var assert = require('assert');
|
||||
var should = require('should');
|
||||
var request = require('supertest');
|
||||
var mm = require('mm');
|
||||
@@ -105,56 +92,61 @@ describe('controllers/registry/package/deprecate.test.js', function () {
|
||||
});
|
||||
});
|
||||
|
||||
it('should deprecate version@<1.0.0', function (done) {
|
||||
request(app.listen())
|
||||
.put('/' + pkgname)
|
||||
.set('authorization', utils.adminAuth)
|
||||
.send({
|
||||
name: pkgname,
|
||||
versions: {
|
||||
'1.0.0': {
|
||||
version: '1.0.0'
|
||||
},
|
||||
'0.0.1': {
|
||||
deprecated: 'mock test deprecated message 0.0.1'
|
||||
},
|
||||
'0.0.2': {
|
||||
deprecated: 'mock test deprecated message 0.0.2'
|
||||
it('should deprecate version@<1.0.0', function* () {
|
||||
yield request(app.listen())
|
||||
.put('/' + pkgname)
|
||||
.set('authorization', utils.adminAuth)
|
||||
.send({
|
||||
name: pkgname,
|
||||
versions: {
|
||||
'1.0.0': {
|
||||
version: '1.0.0'
|
||||
},
|
||||
'0.0.1': {
|
||||
deprecated: 'mock test deprecated message 0.0.1'
|
||||
},
|
||||
'0.0.2': {
|
||||
deprecated: 'mock test deprecated message 0.0.2'
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
.expect({
|
||||
ok: true
|
||||
})
|
||||
.expect(201, function (err) {
|
||||
should.not.exist(err);
|
||||
done = pedding(3, done);
|
||||
})
|
||||
.expect({
|
||||
ok: true
|
||||
})
|
||||
.expect(201);
|
||||
|
||||
request(app.listen())
|
||||
yield request(app.listen())
|
||||
.get('/' + pkgname + '/0.0.1')
|
||||
.expect(200, function (err, res) {
|
||||
should.not.exist(err);
|
||||
.expect(200)
|
||||
.expect(res => {
|
||||
res.body.deprecated.should.equal('mock test deprecated message 0.0.1');
|
||||
done();
|
||||
});
|
||||
|
||||
request(app.listen())
|
||||
yield request(app.listen())
|
||||
.get('/' + pkgname + '/0.0.2')
|
||||
.expect(200, function (err, res) {
|
||||
should.not.exist(err);
|
||||
.expect(200)
|
||||
.expect(res => {
|
||||
res.body.deprecated.should.equal('mock test deprecated message 0.0.2');
|
||||
done();
|
||||
});
|
||||
|
||||
// not change 1.0.0
|
||||
request(app.listen())
|
||||
// not change 1.0.0
|
||||
yield request(app.listen())
|
||||
.get('/' + pkgname + '/1.0.0')
|
||||
.expect(200, function (err, res) {
|
||||
should.not.exist(err);
|
||||
res.body.deprecated.should.equal('');
|
||||
done();
|
||||
.expect(200)
|
||||
.expect(res => {
|
||||
assert(!res.body.deprecated);
|
||||
});
|
||||
|
||||
// show deprecated info on abbreviatedMeta request
|
||||
yield request(app.listen())
|
||||
.get('/' + pkgname)
|
||||
.set('accept', 'application/vnd.npm.install-v1+json')
|
||||
.expect(200)
|
||||
.expect(res => {
|
||||
assert(res.body.versions['0.0.2'].deprecated === 'mock test deprecated message 0.0.2');
|
||||
assert(res.body.versions['0.0.1'].deprecated === 'mock test deprecated message 0.0.1');
|
||||
assert(!res.body.versions['1.0.0'].deprecated);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('should 404 deprecate not exists version', function (done) {
|
||||
|
||||
@@ -1,39 +1,46 @@
|
||||
/**!
|
||||
* cnpmjs.org - test/controllers/registry/package/list_shorts.test.js
|
||||
*
|
||||
* Copyright(c) cnpmjs.org and other contributors.
|
||||
* MIT Licensed
|
||||
*
|
||||
* Authors:
|
||||
* fengmk2 <fengmk2@gmail.com> (http://fengmk2.github.com)
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
const pedding = require('pedding');
|
||||
const should = require('should');
|
||||
const request = require('supertest');
|
||||
const mm = require('mm');
|
||||
const config = require('../../../../config');
|
||||
const app = require('../../../../servers/registry');
|
||||
const utils = require('../../../utils');
|
||||
|
||||
var should = require('should');
|
||||
var request = require('supertest');
|
||||
var mm = require('mm');
|
||||
var config = require('../../../../config');
|
||||
var app = require('../../../../servers/registry');
|
||||
var utils = require('../../../utils');
|
||||
|
||||
describe('controllers/registry/package/list_shorts.test.js', function () {
|
||||
describe('test/controllers/registry/package/list_shorts.test.js', () => {
|
||||
afterEach(mm.restore);
|
||||
|
||||
before(function (done) {
|
||||
before(done => {
|
||||
done = pedding(2, done);
|
||||
const pkg = utils.getPackage('@cnpmtest/testmodule-list-shorts1', '1.0.0', utils.admin);
|
||||
pkg.versions['1.0.0'].dependencies = {
|
||||
'@cnpmtest/testmodule-list-shorts2': '~1.0.0',
|
||||
};
|
||||
request(app.listen())
|
||||
.put('/' + pkg.name)
|
||||
.set('authorization', utils.adminAuth)
|
||||
.send(pkg)
|
||||
.expect(201, done);
|
||||
|
||||
const pkg2 = utils.getPackage('@cnpmtest/testmodule-list-shorts2', '1.0.0', utils.admin);
|
||||
request(app.listen())
|
||||
.put('/' + pkg2.name)
|
||||
.set('authorization', utils.adminAuth)
|
||||
.send(pkg2)
|
||||
.expect(201, done);
|
||||
});
|
||||
|
||||
before(done => {
|
||||
mm(config, 'syncModel', 'all');
|
||||
utils.sync('pedding', done);
|
||||
});
|
||||
|
||||
describe('GET /-/short', function () {
|
||||
it('should get 200', function (done) {
|
||||
describe('GET /-/short', () => {
|
||||
it('should get 200', done => {
|
||||
request(app)
|
||||
.get('/-/short')
|
||||
.expect(200, function (err, res) {
|
||||
.expect(200, (err, res) => {
|
||||
should.not.exist(err);
|
||||
res.body.should.be.an.Array;
|
||||
res.body.length.should.above(0);
|
||||
@@ -41,5 +48,17 @@ describe('controllers/registry/package/list_shorts.test.js', function () {
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should list private packages only', done => {
|
||||
request(app)
|
||||
.get('/-/short?private_only=true')
|
||||
.expect(200, (err, res) => {
|
||||
should.not.exist(err);
|
||||
res.body.should.be.an.Array;
|
||||
res.body.length.should.above(0);
|
||||
res.body.indexOf('@cnpmtest/testmodule-list-shorts1').should.above(-1);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -56,6 +56,11 @@ describe('test/controllers/sync_module_worker.test.js', () => {
|
||||
it('should sync public scoped package', function* () {
|
||||
mm(config, 'registryHost', '');
|
||||
mm(config, 'sourceNpmRegistry', 'https://registry.npmjs.org');
|
||||
let envelope;
|
||||
mm(config, 'globalHook', function* (e) {
|
||||
envelope = e;
|
||||
});
|
||||
|
||||
var worker = new SyncModuleWorker({
|
||||
name: '@sindresorhus/df',
|
||||
username: 'fengmk2',
|
||||
@@ -64,6 +69,10 @@ describe('test/controllers/sync_module_worker.test.js', () => {
|
||||
worker.start();
|
||||
var end = thunkify.event(worker, 'end');
|
||||
yield end();
|
||||
assert(envelope);
|
||||
assert(envelope.event === 'package:sync');
|
||||
assert(envelope.name === '@sindresorhus/df');
|
||||
assert(envelope.payload.changedVersions.length > 0);
|
||||
|
||||
// sync again
|
||||
var worker = new SyncModuleWorker({
|
||||
@@ -73,6 +82,10 @@ describe('test/controllers/sync_module_worker.test.js', () => {
|
||||
worker.start();
|
||||
var end = thunkify.event(worker, 'end');
|
||||
yield end();
|
||||
assert(envelope);
|
||||
assert(envelope.event === 'package:sync');
|
||||
assert(envelope.name === '@sindresorhus/df');
|
||||
assert(envelope.payload.changedVersions.length === 0);
|
||||
|
||||
var tgzUrl;
|
||||
function checkResult() {
|
||||
@@ -129,7 +142,7 @@ describe('test/controllers/sync_module_worker.test.js', () => {
|
||||
|
||||
it('should sync upstream first', function* () {
|
||||
mm(config, 'sourceNpmRegistryIsCNpm', true);
|
||||
var log = yield* logService.create({
|
||||
var log = yield logService.create({
|
||||
name: 'mk2testmodule',
|
||||
username: 'fengmk2',
|
||||
});
|
||||
@@ -172,12 +185,12 @@ describe('test/controllers/sync_module_worker.test.js', () => {
|
||||
});
|
||||
|
||||
it('should sync unpublished module by name', function* () {
|
||||
var result = yield* SyncModuleWorker.sync('tnpm', 'fengmk2');
|
||||
var result = yield SyncModuleWorker.sync('tnpm', 'fengmk2');
|
||||
result.should.be.Number;
|
||||
});
|
||||
|
||||
it('should sync not exists module', function* () {
|
||||
var result = yield* SyncModuleWorker.sync('tnpm-not-exists', 'fengmk2');
|
||||
var result = yield SyncModuleWorker.sync('tnpm-not-exists', 'fengmk2');
|
||||
result.should.be.Number;
|
||||
});
|
||||
|
||||
@@ -199,7 +212,7 @@ describe('test/controllers/sync_module_worker.test.js', () => {
|
||||
it('should sync missing description, readme', function* () {
|
||||
var listModulesByName = packageService.listModulesByName;
|
||||
mm(packageService, 'listModulesByName', function* (name) {
|
||||
var mods = yield* listModulesByName.call(packageService, name);
|
||||
var mods = yield listModulesByName.call(packageService, name);
|
||||
mods.forEach(function (mod) {
|
||||
mod.description = null;
|
||||
mod.package.readme = '';
|
||||
@@ -207,13 +220,23 @@ describe('test/controllers/sync_module_worker.test.js', () => {
|
||||
return mods;
|
||||
});
|
||||
|
||||
let envelope;
|
||||
mm(config, 'globalHook', function* (e) {
|
||||
envelope = e;
|
||||
// console.log(envelope);
|
||||
});
|
||||
var worker = new SyncModuleWorker({
|
||||
name: 'byte',
|
||||
name: 'pedding',
|
||||
username: 'fengmk2',
|
||||
noDep: true,
|
||||
});
|
||||
worker.start();
|
||||
var end = thunkify.event(worker, 'end');
|
||||
yield end();
|
||||
assert(envelope);
|
||||
assert(envelope.name === 'pedding');
|
||||
assert(envelope.event === 'package:sync');
|
||||
assert(envelope.payload.changedVersions.length > 0);
|
||||
});
|
||||
|
||||
it('should delete not exists version', function* () {
|
||||
@@ -324,6 +347,7 @@ describe('test/controllers/sync_module_worker.test.js', () => {
|
||||
const worker = new SyncModuleWorker({
|
||||
name: 'ms',
|
||||
username: 'fengmk2',
|
||||
noDep: true,
|
||||
});
|
||||
worker.start();
|
||||
const end = thunkify.event(worker, 'end');
|
||||
@@ -343,6 +367,7 @@ describe('test/controllers/sync_module_worker.test.js', () => {
|
||||
var worker = new SyncModuleWorker({
|
||||
name: 'ms',
|
||||
username: 'fengmk2',
|
||||
noDep: true,
|
||||
});
|
||||
worker.start();
|
||||
const end = thunkify.event(worker, 'end');
|
||||
|
||||
Reference in New Issue
Block a user