Skip to content
This repository has been archived by the owner on Aug 11, 2022. It is now read-only.

Commit

Permalink
get-package-id: Don't infer package names outside of UX
Browse files Browse the repository at this point in the history
PR-URL: #9744
Fixes: #9695
  • Loading branch information
iarna committed Sep 24, 2015
1 parent a5448db commit bef06f5
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 5 deletions.
2 changes: 1 addition & 1 deletion lib/install.js
Original file line number Diff line number Diff line change
Expand Up @@ -701,7 +701,7 @@ Installer.prototype.prettify = function (tree) {
validate('O', arguments)
var seen = {}
function byName (aa, bb) {
return aa.package.name.localeCompare(bb.package.name)
return getPackageId(aa).localeCompare(getPackageId(bb))
}
function expandTree (tree) {
seen[tree.path] = true
Expand Down
11 changes: 7 additions & 4 deletions lib/install/get-package-id.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
'use strict'
var path = require('path')

module.exports = function (tree) {
var pkg = tree.package || tree
// FIXME: Excluding the '@' here is cleaning up after the mess that
// read-package-json makes. =(
if (pkg._id && pkg._id !== '@') return pkg._id
if (pkg.name && pkg.version) {
return pkg.name + '@' + pkg.version
var name = pkg.name || (tree && tree.logical && path.basename(tree.logical))
if (name && pkg.version) {
return name + '@' + pkg.version
} else if (tree) {
return tree.path
} else if (pkg.name) {
return pkg.name
} else if (name) {
return name
} else {
return ''
}
Expand Down
44 changes: 44 additions & 0 deletions test/tap/install-into-likenamed-folder.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
'use strict'
var path = require('path')
var fs = require('graceful-fs')
var mkdirp = require('mkdirp')
var rimraf = require('rimraf')
var test = require('tap').test
var common = require('../common-tap.js')

var base = path.join(__dirname, path.basename(__filename, '.js'))
var moduleDir = path.join(base, 'example-src')
var destDir = path.join(base, 'example')
var moduleJson = {
name: 'example',
version: '1.0.0'
}

function setup () {
cleanup()
mkdirp.sync(moduleDir)
mkdirp.sync(path.join(destDir, 'node_modules'))
fs.writeFileSync(path.join(moduleDir, 'package.json'), JSON.stringify(moduleJson))
}

function cleanup () {
rimraf.sync(base)
}

test('setup', function (t) {
setup()
t.end()
})

test('like-named', function (t) {
common.npm(['install', '../example-src'], {cwd: destDir}, function (er, code, stdout, stderr) {
t.is(code, 0, 'no error code')
t.is(stderr, '', 'no error output')
t.end()
})
})

test('cleanup', function (t) {
cleanup()
t.end()
})

0 comments on commit bef06f5

Please sign in to comment.