aboutsummaryrefslogtreecommitdiff
path: root/deps/npm/lib/rebuild.js
diff options
context:
space:
mode:
authorRyan Dahl <ry@tinyclouds.org>2011-11-21 09:48:45 -0800
committerRyan Dahl <ry@tinyclouds.org>2011-11-21 10:50:52 -0800
commitb488be127a8cf1e59eb257db3f8eaf6efdb0f275 (patch)
tree83436f4f84b9651ea66c3a0d304050252916c149 /deps/npm/lib/rebuild.js
parent05de01d707cd9a80f34da23445f507f5f2e2c277 (diff)
downloadandroid-node-v8-b488be127a8cf1e59eb257db3f8eaf6efdb0f275.tar.gz
android-node-v8-b488be127a8cf1e59eb257db3f8eaf6efdb0f275.tar.bz2
android-node-v8-b488be127a8cf1e59eb257db3f8eaf6efdb0f275.zip
Include NPM, update .pkg to install it.
.msi update coming soon.
Diffstat (limited to 'deps/npm/lib/rebuild.js')
-rw-r--r--deps/npm/lib/rebuild.js68
1 files changed, 68 insertions, 0 deletions
diff --git a/deps/npm/lib/rebuild.js b/deps/npm/lib/rebuild.js
new file mode 100644
index 0000000000..f3f7596204
--- /dev/null
+++ b/deps/npm/lib/rebuild.js
@@ -0,0 +1,68 @@
+
+module.exports = rebuild
+
+var readInstalled = require("./utils/read-installed.js")
+ , semver = require("semver")
+ , log = require("./utils/log.js")
+ , path = require("path")
+ , npm = require("./npm.js")
+ , output = require("./utils/output.js")
+
+rebuild.usage = "npm rebuild [<name>[@<version>] [name[@<version>] ...]]"
+
+rebuild.completion = require("./utils/completion/installed-deep.js")
+
+function rebuild (args, cb) {
+ readInstalled(npm.prefix, function (er, data) {
+ log(typeof data, "read Installed")
+ if (er) return cb(er)
+ var set = filter(data, args)
+ , folders = Object.keys(set).filter(function (f) {
+ return f !== npm.prefix
+ })
+ if (!folders.length) return cb()
+ log.silly(folders, "rebuild set")
+ npm.commands.build(folders, function (er) {
+ if (er) return cb(er)
+ output.write(folders.map(function (f) {
+ return set[f] + " " + f
+ }).join("\n"), cb)
+ })
+ })
+}
+
+function filter (data, args, set, seen) {
+ if (!set) set = {}
+ if (!seen) seen = {}
+ if (set.hasOwnProperty(data.path)) return set
+ if (seen.hasOwnProperty(data.path)) return set
+ seen[data.path] = true
+ var pass
+ if (!args.length) pass = true // rebuild everything
+ else if (data.name && data._id) {
+ for (var i = 0, l = args.length; i < l; i ++) {
+ var arg = args[i]
+ , nv = arg.split("@")
+ , n = nv.shift()
+ , v = nv.join("@")
+ if (n !== data.name) continue
+ if (!semver.satisfies(data.version, v)) continue
+ pass = true
+ break
+ }
+ }
+ if (pass && data._id) {
+ log.verbose([data.path, data._id], "path id")
+ set[data.path] = data._id
+ }
+ // need to also dive through kids, always.
+ // since this isn't an install these won't get auto-built unless
+ // they're not dependencies.
+ Object.keys(data.dependencies || {}).forEach(function (d) {
+ // return
+ var dep = data.dependencies[d]
+ if (typeof dep === "string") return
+ filter(dep, args, set, seen)
+ })
+ return set
+}