diff options
author | Ryan Dahl <ry@tinyclouds.org> | 2011-11-21 09:48:45 -0800 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2011-11-21 10:50:52 -0800 |
commit | b488be127a8cf1e59eb257db3f8eaf6efdb0f275 (patch) | |
tree | 83436f4f84b9651ea66c3a0d304050252916c149 /deps/npm/lib/rebuild.js | |
parent | 05de01d707cd9a80f34da23445f507f5f2e2c277 (diff) | |
download | android-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.js | 68 |
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 +} |