diff options
author | isaacs <i@izs.me> | 2010-03-05 10:02:20 +0300 |
---|---|---|
committer | isaacs <i@izs.me> | 2010-03-05 10:02:20 +0300 |
commit | 509ee5ac4c18cfa2421b3a16969c69680e5c9495 (patch) | |
tree | 8c32ff5ce92bcd6c16d1d75ada6b0193c9c77f12 | |
parent | 73a3ed3b1d475275e85ede08e0e58a89edc0df29 (diff) |
Use the "bin" field rather than the install/activate scripts.
-rw-r--r-- | lib/activate.js | 15 | ||||
-rw-r--r-- | lib/build.js | 26 | ||||
-rw-r--r-- | lib/deactivate.js | 7 | ||||
-rw-r--r-- | package.json | 8 | ||||
-rwxr-xr-x | scripts/activate.js | 17 | ||||
-rwxr-xr-x | scripts/bootstrap.js | 12 | ||||
-rwxr-xr-x | scripts/deactivate.js | 12 | ||||
-rwxr-xr-x | scripts/install.js | 19 | ||||
-rwxr-xr-x | scripts/uninstall.js | 12 |
9 files changed, 47 insertions, 81 deletions
diff --git a/lib/activate.js b/lib/activate.js index 3f4e8bfcb..63ab739c4 100644 --- a/lib/activate.js +++ b/lib/activate.js @@ -61,6 +61,7 @@ function activate (pkg, version, cb) { link(fromLib, toLib, cb); }); }], + [linkBins, data], [lifecycle, data, "activate"], [lifecycle, data, "postactivate"], cb @@ -74,8 +75,20 @@ function link (from, to, cb) { chain( [fs, "stat", from], // todo: implicit deactivation rather than this crude clobbering. - [function (cb) { rm(to, function () { cb() }) }], + [rm, to], [fs, "symlink", from, to], cb ); } + +function linkBins (pkg, cb) { + if (!pkg.bin) return cb(); + var steps = []; + for (var i in pkg.bin) { + var to = path.join(process.installPrefix, "bin", i), + from = to+"-"+pkg.version; + steps.push([link, from, to]); + } + steps.push(cb); + chain(steps); +} diff --git a/lib/build.js b/lib/build.js index 0d1309674..b616271c6 100644 --- a/lib/build.js +++ b/lib/build.js @@ -58,6 +58,9 @@ function build (pkg, cb) { // symlink ROOT/{name}-{version}/ to ROOT/.npm/{name}/{version}/{lib} [linkLib, pkg], + // symlink any bins into the node install prefix + [linkBins, pkg], + // run the "install" lifecycle script [lifecycle, pkg, "install"], [lifecycle, pkg, "postinstall"], @@ -73,6 +76,7 @@ function build (pkg, cb) { } function readAndBuild (folder, cb) { + log("readAndBuild", "build"); readJson(path.join(folder, "package.json"), function (er, data) { if (er) cb(er); else build(data, cb); @@ -125,7 +129,7 @@ function resolveDependencies (pkg, topCb) { var deps = found.slice(0); (function L (dep) { if (!dep) return cb(); - // link from ROOT/.npm/{dep.name}/{dep.version}/dependents/{pkg}-{ver} + // link from ROOT/.npm/{dep.name}/{dep.version}/dependents/{pkg}-{version} // to the package folder being installed. var dependents = path.join(npm.dir, dep.name, dep.version, "dependents"), to = path.join(dependents, pkg.name + "-" + pkg.version), @@ -255,3 +259,23 @@ function linkMain (pkg, cb) { }); } +function linkBins (pkg, cb) { + if (!pkg.bin) return cb(); + var steps = []; + for (var i in pkg.bin) { + var to = path.join(process.installPrefix, "bin", i+"-"+pkg.version), + from = path.join(npm.dir, pkg.name, pkg.version, "package", pkg.bin[i]); + steps.push([link, from, to]); + } + steps.push(cb); + chain.apply(null, steps); +} +function link (from, to, cb) { + chain( + [fs, "stat", from], + // todo: implicit deactivation rather than this crude clobbering. + [rm, to], + [fs, "symlink", from, to], + cb + ); +} diff --git a/lib/deactivate.js b/lib/deactivate.js index d5464cc76..35d6325f6 100644 --- a/lib/deactivate.js +++ b/lib/deactivate.js @@ -31,6 +31,13 @@ function deactivate (pkg, cb) { [rm, active], [function (cb) { rm(activeMain, function () { cb() }) }], [function (cb) { rm(activeLib, function () { cb() }) }], + [function (cb) { + if (!data.bin) return cb(); + chain(Object.getOwnPropertyNames(data.bin) + .map(function (bin) { + return [rm, path.join(process.installPrefix, "bin", bin)]; + }).concat(cb)); + }], [lifecycle, data, "postdeactivate"], cb ); diff --git a/package.json b/package.json index b70416a71..468e6d78d 100644 --- a/package.json +++ b/package.json @@ -2,13 +2,7 @@ , "description" : "A package manager for node" , "version" : "0.0.4beta" , "author" : "Isaac Z. Schlueter <i@izs.me>" -, "directories" : { "lib" : "lib" } +, "directories" : { "lib" : "./lib/" } , "main" : "./npm" , "bin" : { "npm" : "./cli.js" } -, "scripts" : - { "install" : "scripts/install.js" - , "uninstall" : "scripts/uninstall.js" - , "activate" : "scripts/activate.js" - , "deactivate" : "scripts/deactivate.js" - } } diff --git a/scripts/activate.js b/scripts/activate.js deleted file mode 100755 index 847e90cf1..000000000 --- a/scripts/activate.js +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/local/bin/node -var fs = require("fs"), - version = process.env.npm_package_version, - bin = "/usr/local/bin/npm", - versionedBin = "/usr/local/bin/npm-"+version; - -fs.lstat(bin, function (er, st) { - if (!er) fs.unlink(bin, linkBin); - else linkBin(); -}); - -function linkBin (er) { - if (er) throw er; - fs.symlinkSync(versionedBin, bin, function (er) { - if (er) throw er; - }); -} diff --git a/scripts/bootstrap.js b/scripts/bootstrap.js deleted file mode 100755 index 0e3a9c7fc..000000000 --- a/scripts/bootstrap.js +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env node - -var sys = require("sys"); - -function print (m, cr) { process.stdio.writeError(m+(cr===false?"":"\n")); return print } - -require("../npm").install("http://github.com/isaacs/npm/tarball/master", function (er, ok) { - if (er) { - sys.error("\nFailed after "+ok.length+" step(s)\n"); - throw er; - } else print("It worked!"); -}); diff --git a/scripts/deactivate.js b/scripts/deactivate.js deleted file mode 100755 index 2b8d62dea..000000000 --- a/scripts/deactivate.js +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/local/bin/node - -var fs = require("fs"), - version = process.env.npm_package_version, - bin = "/usr/local/bin/npm"; - -fs.lstat(bin, function (er, st) { - if (er) return; - fs.unlink(bin, function (er) { - if (er) throw er; - }); -}); diff --git a/scripts/install.js b/scripts/install.js deleted file mode 100755 index b160d4d5c..000000000 --- a/scripts/install.js +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/local/bin/node - -var fs = require("fs"), - version = process.env.npm_package_version, - bin = "/usr/local/bin/npm-"+version, - clijs = require("path").join(process.cwd(), "cli.js"), - sys = require("sys"); - -fs.lstat(bin, function (er, st) { - if (!er) fs.unlink(bin, linkBin); - else linkBin(); -}); - -function linkBin (er) { - if (er) throw er; - fs.symlinkSync(clijs, bin, function (er) { - if (er) throw er; - }); -} diff --git a/scripts/uninstall.js b/scripts/uninstall.js deleted file mode 100755 index 16ac33242..000000000 --- a/scripts/uninstall.js +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/local/bin/node - -var fs = require("fs"), - version = process.env.npm_package_version, - versionedBin = "/usr/local/bin/npm-"+version; - -fs.lstat(versionedBin, function (er, st) { - if (er) return; - fs.unlink(versionedBin, function (er) { - if (er) throw er; - }); -}); |