npm: enable pinning subdependencies to github tarballs

also some minor reorg
This commit is contained in:
Avital Oliver
2013-01-22 23:04:04 -08:00
committed by David Glasser
parent 65e8b86421
commit 401e29083c

View File

@@ -48,6 +48,7 @@ var meteorNpm = module.exports = {
// - call `npm install`, which reads from npm-shrinkwrap.json
// - call `npm install name@version` for any package that needs to be updated
// - call `npm prune` to remove any unused packages from node_modules
// - delete package.json, to ensure that npm-shrinkwrap.json generated below doesn't contain "name" and "version"
// - call `npm shrinkwrap` to update npm-shrinkwrap.json
// - copy the temporary directory back to .npm
self._updateExistingNpmDirectory(packageName, newPackageNpmDir, packageNpmDir, npmDependencies);
@@ -104,7 +105,18 @@ var meteorNpm = module.exports = {
// remove ununsed packages
self._prune(newPackageNpmDir);
self._finalizeTmpPackageDirAndRename(newPackageNpmDir, packageNpmDir);
// delete package.json
fs.unlinkSync(path.join(newPackageNpmDir, 'package.json'));
// if we had no installed dependencies to begine with, *DON'T*
// shrinkwrap. this is important so that we can pin versions of
// deep dependencies to tarballs, e.g.
// https://github.com/meteor/js-bson/tarball/master
if (!_.isEmpty(installedDependencies)) {
self._shrinkwrap(newPackageNpmDir);
}
self._renameAlmostAtomically(newPackageNpmDir, packageNpmDir);
}
},
@@ -116,7 +128,9 @@ var meteorNpm = module.exports = {
self._installNpmModule(name, version, newPackageNpmDir);
});
self._finalizeTmpPackageDirAndRename(newPackageNpmDir, packageNpmDir);
self._shrinkwrap(newPackageNpmDir);
self._renameAlmostAtomically(newPackageNpmDir, packageNpmDir);
},
_execFileSync: function(file, args, opts) {
@@ -144,20 +158,14 @@ var meteorNpm = module.exports = {
fs.writeFileSync(packageJsonPath, packageJsonContents);
},
// - call `npm shrinkwrap`
// - delete package.json
// - rename original .npm dir to another name (require for atomicity in next step)
// - atomically rename temporary package npm dir to the original package's .npm dir
// - delete the renamed original .npm directory
_finalizeTmpPackageDirAndRename: function(newPackageNpmDir, packageNpmDir) {
_renameAlmostAtomically: function(newPackageNpmDir, packageNpmDir) {
var self = this;
if (fs.existsSync(path.join(newPackageNpmDir, 'package.json')))
fs.unlinkSync(path.join(newPackageNpmDir, 'package.json'));
self._shrinkwrap(newPackageNpmDir);
var oldPackageNpmDir = packageNpmDir + '-old-' + self._randomToken();;
if (fs.existsSync(packageNpmDir)) {
var oldPackageNpmDir = packageNpmDir + '-old-' + self._randomToken();;
fs.renameSync(packageNpmDir, oldPackageNpmDir);
fs.renameSync(newPackageNpmDir, packageNpmDir);
files.rm_recursive(oldPackageNpmDir);