diff options
author | Rebecca Turner <me@re-becca.org> | 2017-04-12 21:47:49 -0700 |
---|---|---|
committer | Jeremiah Senkpiel <fishrock123@rocketmail.com> | 2017-04-25 10:52:01 -0400 |
commit | 00842604483e4c2e622dfdb3a97440e07646158f (patch) | |
tree | f3346902636a44b6037652523767636bf7e4f2c9 /deps/npm/lib/install/action/extract.js | |
parent | 061c5da010e0d249379618382a499840d38247b8 (diff) | |
download | android-node-v8-00842604483e4c2e622dfdb3a97440e07646158f.tar.gz android-node-v8-00842604483e4c2e622dfdb3a97440e07646158f.tar.bz2 android-node-v8-00842604483e4c2e622dfdb3a97440e07646158f.zip |
deps: upgrade npm to 4.5.0
PR-URL: https://github.com/nodejs/node/pull/12480
Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
Diffstat (limited to 'deps/npm/lib/install/action/extract.js')
-rw-r--r-- | deps/npm/lib/install/action/extract.js | 75 |
1 files changed, 51 insertions, 24 deletions
diff --git a/deps/npm/lib/install/action/extract.js b/deps/npm/lib/install/action/extract.js index 2c8a995af6..fd9562c184 100644 --- a/deps/npm/lib/install/action/extract.js +++ b/deps/npm/lib/install/action/extract.js @@ -3,7 +3,8 @@ var path = require('path') var iferr = require('iferr') var asyncMap = require('slide').asyncMap var fs = require('graceful-fs') -var rename = require('../../utils/rename.js') +var mkdirp = require('mkdirp') +var move = require('../../utils/move.js') var gentlyRm = require('../../utils/gently-rm.js') var updatePackageJson = require('../update-package-json') var npm = require('../../npm.js') @@ -11,6 +12,7 @@ var moduleName = require('../../utils/module-name.js') var packageId = require('../../utils/package-id.js') var cache = require('../../cache.js') var moduleStagingPath = require('../module-staging-path.js') +var readPackageJson = require('read-package-json') module.exports = function (staging, pkg, log, next) { log.silly('extract', packageId(pkg)) @@ -19,31 +21,45 @@ module.exports = function (staging, pkg, log, next) { var group = up ? null : npm.config.get('group') var extractTo = moduleStagingPath(staging, pkg) cache.unpack(pkg.package.name, pkg.package.version, extractTo, null, null, user, group, - andUpdatePackageJson(pkg, staging, extractTo, andStageBundledChildren(pkg, staging, extractTo, log, next))) + andUpdatePackageJson(pkg, staging, extractTo, + andStageBundledChildren(pkg, staging, extractTo, log, + andRemoveExtraneousBundles(extractTo, next)))) } function andUpdatePackageJson (pkg, staging, extractTo, next) { return iferr(next, function () { - updatePackageJson(pkg, extractTo, next) + readPackageJson(path.join(extractTo, 'package.json'), false, function (err, metadata) { + if (!err) { + // Copy _ keys (internal to npm) and any missing keys from the possibly incomplete + // registry metadata over to the full package metadata read off of disk. + Object.keys(pkg.package).forEach(function (key) { + if (key[0] === '_' || !(key in metadata)) metadata[key] = pkg.package[key] + }) + metadata.name = pkg.package.name // things go wrong if these don't match + pkg.package = metadata + } + updatePackageJson(pkg, extractTo, next) + }) }) } function andStageBundledChildren (pkg, staging, extractTo, log, next) { return iferr(next, function () { - for (var i = 0; i < pkg.children.length; ++i) { - var c = pkg.children[i] - if (!c.package.name) return next(c.error) - } + if (!pkg.package.bundleDependencies) return next() - asyncMap(pkg.children, andStageBundledModule(pkg, staging, extractTo), cleanupBundled) + asyncMap(pkg.children, andStageBundledModule(pkg, staging, extractTo), next) }) - function cleanupBundled () { +} + +function andRemoveExtraneousBundles (extractTo, next) { + return iferr(next, function () { gentlyRm(path.join(extractTo, 'node_modules'), next) - } + }) } function andStageBundledModule (bundler, staging, parentPath) { return function (child, next) { + if (child.error) return next(child.error) stageBundledModule(bundler, child, staging, parentPath, next) } } @@ -64,25 +80,36 @@ function stageBundledModule (bundler, child, staging, parentPath, next) { var stageFrom = path.join(parentPath, 'node_modules', child.package.name) var stageTo = moduleStagingPath(staging, child) - asyncMap(child.children, andStageBundledModule(bundler, staging, stageFrom), iferr(next, moveModule)) + return asyncMap(child.children, andStageBundledModule(bundler, staging, stageFrom), iferr(next, finishModule)) - function moveModule () { - if (child.fromBundle) { - return rename(stageFrom, stageTo, iferr(next, updateMovedPackageJson)) + function finishModule () { + // If we were the one's who bundled this moduleā¦ + if (child.fromBundle === bundler) { + return moveModule() } else { - return fs.stat(stageFrom, function (notExists, exists) { - if (exists) { - warn(bundler, 'EBUNDLEOVERRIDE', 'In ' + packageId(bundler) + - ' replacing bundled version of ' + moduleName(child) + - ' with ' + packageId(child)) - return gentlyRm(stageFrom, next) - } else { - return next() - } - }) + return checkForReplacement() } } + function moveModule () { + return mkdirp(path.dirname(stageTo), iferr(next, function () { + return move(stageFrom, stageTo, iferr(next, updateMovedPackageJson)) + })) + } + + function checkForReplacement () { + return fs.stat(stageFrom, function (notExists, exists) { + if (exists) { + warn(bundler, 'EBUNDLEOVERRIDE', 'In ' + packageId(bundler) + + ' replacing bundled version of ' + moduleName(child) + + ' with ' + packageId(child)) + return gentlyRm(stageFrom, next) + } else { + return next() + } + }) + } + function updateMovedPackageJson () { updatePackageJson(child, stageTo, next) } |