0
Fork 0
mirror of https://github.com/verdaccio/verdaccio.git synced 2025-03-18 02:22:46 -05:00

Merge branch '0.5.x' of github.com:rlidwka/sinopia

Conflicts:
	lib/storage.js
	test/start.sh
This commit is contained in:
Alex Kocharin 2013-12-12 01:44:29 +04:00
commit 203f0300e3
10 changed files with 131 additions and 6 deletions

View file

@ -1,4 +1,14 @@
11 Dec 2013, version 0.5.6
- fixing a few crashes related to tags
8 Dec 2013, version 0.5.4
- latest tag always shows highest version available (issue #8)
- added a configurable timeout for requests to uplinks (issue #18)
- users with bad authentication header are considered not logged in (issue #17)
24 Nov 2013, version 0.5.3
- added proxy support for requests to uplinks (issue #13)

View file

@ -469,7 +469,7 @@ Storage.prototype.get_package = function(name, options, callback) {
if (!~whitelist.indexOf(i)) delete result[i]
}
result['dist-tags'].latest = Object.keys(result.versions).sort(semver.compareLoose)
result['dist-tags'].latest = Storage._semver_sort(Object.keys(result.versions))
for (var i in result['dist-tags']) {
if (Array.isArray(result['dist-tags'][i])) {
result['dist-tags'][i] = result['dist-tags'][i][result['dist-tags'][i].length-1]
@ -508,10 +508,19 @@ Storage._merge_versions = function(local, up) {
}
if (local['dist-tags'][i].indexOf(up['dist-tags'][i]) === -1) {
local['dist-tags'][i].push(up['dist-tags'][i])
local['dist-tags'][i].sort(semver.compareLoose)
local['dist-tags'][i] = Storage._semver_sort(local['dist-tags'][i])
}
}
}
// function filters out bad semver versions and sorts the array
// exported for unit tests only
Storage._semver_sort = function semver_sort(array) {
return array
.filter(function(x) { return semver.parse(x, true) != null })
.sort(semver.compareLoose)
.map(String)
}
module.exports = Storage

View file

@ -1,7 +1,7 @@
# use "yapm install ." if you're installing this from git repository
name: sinopia
version: 0.5.3
version: 0.5.6
description: Private npm repository server
author:

View file

@ -5,6 +5,8 @@ users:
password: a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
uplinks:
express:
url: http://localhost:55550/
server2:
url: http://localhost:55552/
@ -24,6 +26,11 @@ packages:
proxy_access: server2
proxy_publish: server2
'testexp*':
allow_access: all
allow_publish: all
proxy_access: express
'*':
allow_access: test undefined
allow_publish: test undefined

50
test/fixtures/tags.json vendored Normal file
View file

@ -0,0 +1,50 @@
{
"name": "testexp_tags",
"versions": {
"0.1.0": {
"name": "testexp_tags",
"version": "0.0.0",
"dist": {
"shasum": "fake",
"tarball": "http://localhost:55551/testexp_tags/-/blahblah"
}
},
"0.1.1alpha": {
"name": "testexp_tags",
"version": "0.0.0",
"dist": {
"shasum": "fake",
"tarball": "http://localhost:55551/testexp_tags/-/blahblah"
}
},
"0.1.2": {
"name": "testexp_tags",
"version": "0.0.0",
"dist": {
"shasum": "fake",
"tarball": "http://localhost:55551/testexp_tags/-/blahblah"
}
},
"0.1.3alpha": {
"name": "testexp_tags",
"version": "0.0.0",
"dist": {
"shasum": "fake",
"tarball": "http://localhost:55551/testexp_tags/-/blahblah"
}
},
"1.1": {
"name": "testexp_tags",
"version": "0.0.0",
"dist": {
"shasum": "fake",
"tarball": "http://localhost:55551/testexp_tags/-/blahblah"
}
}
},
"dist-tags": {
"latest": "5.4.3",
"something": "0.1.1alpha",
"bad": "1.1"
}
}

View file

@ -1,8 +1,8 @@
module.exports = function(name) {
module.exports = function(name, version) {
return {
"name": name,
"version": "0.0.0",
"version": version || "0.0.0",
"dist": {
"shasum": "fake",
"tarball": "http://localhost:55551/"+escape(name)+"/-/blahblah"

View file

@ -1,4 +1,5 @@
var assert = require('assert')
, semver_sort = require('../lib/storage')._semver_sort
, merge = require('../lib/storage')._merge_versions
//require('../lib/logger').setup()
@ -39,5 +40,14 @@ exports['Merge'] = {
'dist-tags': {w:["1.1.1","2.2.2-rc2","2.2.2","3.3.3","12.2.2"]},
})
},
'semver_sort': function() {
assert.deepEqual(semver_sort(['1.2.3','1.2','1.2.3a','1.2.3c','1.2.3-b']),
[ '1.2.3a',
'1.2.3-b',
'1.2.3c',
'1.2.3' ]
)
},
}

View file

@ -4,7 +4,7 @@ CWD=$(pwd)
PATH='../node_modules/.bin':$PATH
TESTDIR=$(dirname $0)
cd $TESTDIR
mocha -R list --ui exports ./tests.js ./no_proxy.js
mocha -R list --ui exports ./tests.js ./no_proxy.js ./st_merge.js
TESTRES=$?
cd $CWD
exit $TESTRES

34
test/tags.js Normal file
View file

@ -0,0 +1,34 @@
var assert = require('assert')
, ex = module.exports
, server = process.server
, readfile = require('fs').readFileSync
, express = process.express
ex['testing for 404'] = function(cb) {
server.get_package('testexp_tags', function(res, body) {
// shouldn't exist yet
assert.equal(res.statusCode, 404)
assert(~body.error.indexOf('no such package'))
cb()
})
}
ex['setting up server with bad tags'] = function(cb) {
express.get('/testexp_tags', function(req, res) {
res.send(JSON.parse(readfile('fixtures/tags.json')))
})
cb()
}
ex['fetching package again'] = function(cb) {
server.get_package('testexp_tags', function(res, body) {
// shouldn't exist yet
assert.equal(res.statusCode, 200)
assert.equal(typeof(body.versions['1.1']), 'object')
assert.equal(body['dist-tags'].something, '0.1.1alpha')
assert.equal(body['dist-tags'].latest, '0.1.3alpha')
assert.equal(body['dist-tags'].bad, null)
cb()
})
}

View file

@ -3,16 +3,21 @@ var fs = require('fs')
, assert = require('assert')
, Server = require('./lib/server')
, readfile = require('fs').readFileSync
, express = require('express')
, ex = module.exports
var forks = process.forks = []
process.server = new Server('http://localhost:55551/')
process.server2 = new Server('http://localhost:55552/')
process.express = express()
process.express.listen(55550)
ex['Startup:'] = require('./startup')
ex['Basic:'] = require('./basic')
ex['Mirror:'] = require('./mirror')
ex['Race:'] = require('./race')
ex['Tags:'] = require('./tags')
process.on('exit', function() {
if (forks[0]) forks[0].kill()