From 0bf32994d319c349778a0fa253676de76f92fe3a Mon Sep 17 00:00:00 2001 From: Masafumi Koba Date: Tue, 19 Feb 2019 00:34:53 +0900 Subject: [PATCH] feat: `npm repo` support `repository.directory` field See #140 --- lib/repo.js | 2 +- test/tap/repo.js | 73 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+), 1 deletion(-) diff --git a/lib/repo.js b/lib/repo.js index b930402aedf95..199895b3562b7 100644 --- a/lib/repo.js +++ b/lib/repo.js @@ -27,7 +27,7 @@ function getUrlAndOpen (d, cb) { // XXX remove this when npm@v1.3.10 from node 0.10 is deprecated // from https://github.com/npm/npm-www/issues/418 const info = hostedGitInfo.fromUrl(r.url) - const url = info ? info.browse() : unknownHostedUrl(r.url) + const url = info ? info.browse(d.repository.directory) : unknownHostedUrl(r.url) if (!url) return cb(new Error('no repository: could not get url')) diff --git a/test/tap/repo.js b/test/tap/repo.js index 54907f620c77e..0ff6cad854b4c 100644 --- a/test/tap/repo.js +++ b/test/tap/repo.js @@ -132,6 +132,79 @@ test('npm repo test-repo-url-ssh - non-github (ssh://)', function (t) { }) }) +/* ----- Test by new mock registry: BEGIN ----- */ + +const Tacks = require('tacks') +const mockTar = require('../util/mock-tarball.js') + +const { Dir, File } = Tacks +const testDir = path.join(__dirname, path.basename(__filename, '.js')) + +let server +test('setup mocked registry', t => { + common.fakeRegistry.compat({}, (err, s) => { + t.ifError(err, 'registry mocked successfully') + server = s + t.end() + }) +}) + +test('npm repo test-repo-with-directory', t => { + const fixture = new Tacks(Dir({ + 'package.json': File({}) + })) + fixture.create(testDir) + const packument = { + name: 'test-repo-with-directory', + 'dist-tags': { latest: '1.2.3' }, + versions: { + '1.2.3': { + name: 'test-repo-with-directory', + version: '1.2.3', + dist: { + tarball: `${server.registry}/test-repo-with-directory/-/test-repo-with-directory-1.2.3.tgz` + }, + repository: { + type: 'git', + url: 'git+https://github.com/foo/test-repo-with-directory.git', + directory: 'some/directory' + } + } + } + } + server.get('/test-repo-with-directory').reply(200, packument) + return mockTar({ + 'package.json': JSON.stringify({ + name: 'test-repo-with-directory', + version: '1.2.3' + }) + }).then(tarball => { + server.get('/test-repo-with-directory/-/test-repo-with-directory-1.2.3.tgz').reply(200, tarball) + return common.npm([ + 'repo', 'test-repo-with-directory', + '--registry=' + server.registry, + '--loglevel=silent', + '--browser=' + fakeBrowser + ]) + }).then(([code, stdout, stderr]) => { + t.equal(code, 0) + t.comment(stdout) + t.comment(stderr) + + const res = fs.readFileSync(outFile, 'ascii') + t.equal(res, 'https://github.com/foo/test-repo-with-directory/tree/master/some%2Fdirectory\n') + rimraf.sync(outFile) + }) +}) + +test('cleanup mocked registry', t => { + server.close() + rimraf.sync(testDir) + t.end() +}) + +/* ----- Test by new mock registry: END ----- */ + test('cleanup', function (t) { fs.unlinkSync(fakeBrowser) t.pass('cleaned up')