From f76c3938d0660378017bf276a72ea60e9adfe62c Mon Sep 17 00:00:00 2001 From: isaacs Date: Thu, 1 May 2014 11:09:00 -0700 Subject: npm: upgrade to v1.4.8 * Check SHA before using files from cache * adduser: allow change of the saved password * Make `npm install` respect `config.unicode` * Fix lifecycle to pass `Infinity` for config env value * Don't return 0 exit code on invalid command * cache: Handle 404s and other HTTP errors as errors * bump tap dep, make tests stderr a bit quieter * Resolve ~ in path configs to env.HOME * Include npm version in default user-agent conf * npm init: Use ISC as default license, use save-prefix for deps * Many test and doc fixes --- deps/npm/lib/adduser.js | 18 ++++++++++++++---- deps/npm/lib/cache.js | 24 ++++++++++++++++++++++++ deps/npm/lib/help.js | 11 +++++++---- deps/npm/lib/install.js | 2 +- deps/npm/lib/npm.js | 8 ++++++++ deps/npm/lib/utils/error-handler.js | 2 +- deps/npm/lib/utils/lifecycle.js | 2 ++ 7 files changed, 57 insertions(+), 10 deletions(-) (limited to 'deps/npm/lib') diff --git a/deps/npm/lib/adduser.js b/deps/npm/lib/adduser.js index 739f14243f..94a119683a 100644 --- a/deps/npm/lib/adduser.js +++ b/deps/npm/lib/adduser.js @@ -66,15 +66,24 @@ function readUsername (c, u, cb) { function readPassword (c, u, cb) { var v = userValidate.pw - if (!c.changed) { - u.p = c.p - return cb() + var prompt + if (c.p && !c.changed) { + prompt = "Password: (or leave unchanged) " + } else { + prompt = "Password: " } - read({prompt: "Password: ", silent: true}, function (er, pw) { + + read({prompt: prompt, silent: true}, function (er, pw) { if (er) { return cb(er.message === "cancelled" ? er.message : er) } + if (!c.changed && pw === "") { + // when the username was not changed, + // empty response means "use the old value" + pw = c.p + } + if (!pw) { return readPassword(c, u, cb) } @@ -85,6 +94,7 @@ function readPassword (c, u, cb) { return readPassword(c, u, cb) } + c.changed = c.changed || c.p != pw u.p = pw cb(er) }) diff --git a/deps/npm/lib/cache.js b/deps/npm/lib/cache.js index b17da0cf92..5c2d07840e 100644 --- a/deps/npm/lib/cache.js +++ b/deps/npm/lib/cache.js @@ -84,6 +84,7 @@ var mkdir = require("mkdirp") , which = require("which") , isGitUrl = require("./utils/is-git-url.js") , pathIsInside = require("path-is-inside") + , http = require("http") cache.usage = "npm cache add " + "\nnpm cache add " @@ -709,6 +710,9 @@ function addNameTag (name, tag, data, cb_) { } registry.get(name, function (er, data, json, response) { + if (!er) { + er = errorResponse(name, resp) + } if (er) return cb(er) engineFilter(data) if (data["dist-tags"] && data["dist-tags"][tag] @@ -744,6 +748,16 @@ function engineFilter (data) { }) } +function errorResponse (name, response) { + if (response.statusCode >= 400) { + var er = new Error(http.STATUS_CODES[response.statusCode]) + er.statusCode = response.statusCode + er.code = "E" + er.statusCode + er.pkgid = name + } + return er +} + function addNameRange (name, range, data, cb) { if (typeof cb !== "function") cb = data, data = null @@ -755,6 +769,9 @@ function addNameRange (name, range, data, cb) { if (data) return next() registry.get(name, function (er, d, json, response) { + if (!er) { + er = errorResponse(name, response) + } if (er) return cb(er) data = d next() @@ -820,6 +837,9 @@ function addNameVersion (name, v, data, cb) { return next() } registry.get(name, function (er, d, json, resp) { + if (!er) { + er = errorResponse(name, resp) + } if (er) return cb(er) data = d && d.versions[ver] if (!data) { @@ -857,6 +877,10 @@ function addNameVersion (name, v, data, cb) { if (er && er.code !== "ENOENT" && er.code !== "ENOTDIR") return cb(er) if (er) return fetchit() + // check the SHA of the package we have, to ensure it wasn't installed + // from somewhere other than the registry (eg, a fork) + if (data._shasum && dist.shasum && data._shasum !== dist.shasum) + return fetchit() return cb(null, data) }) } else return fetchit() diff --git a/deps/npm/lib/help.js b/deps/npm/lib/help.js index ea3970b240..72b4393b6a 100644 --- a/deps/npm/lib/help.js +++ b/deps/npm/lib/help.js @@ -30,8 +30,11 @@ function help (args, cb) { var section = npm.deref(args[0]) || args[0] // npm help : show basic usage - if (!section) - return npmUsage(cb) + if (!section) { + var valid = argv[0] === 'help' ? 0 : 1 + return npmUsage(valid, cb) + } + // npm -h: show command usage if ( npm.config.get("usage") @@ -147,7 +150,7 @@ function htmlMan (man) { return path.resolve(__dirname, "..", "html", "doc", sect, f) } -function npmUsage (cb) { +function npmUsage (valid, cb) { npm.config.set("loglevel", "silent") log.level = "silent" console.log @@ -170,7 +173,7 @@ function npmUsage (cb) { , "" , "npm@" + npm.version + " " + path.dirname(__dirname) ].join("\n")) - cb() + cb(valid) } function usages () { diff --git a/deps/npm/lib/install.js b/deps/npm/lib/install.js index 8bc009349b..3e319fa673 100644 --- a/deps/npm/lib/install.js +++ b/deps/npm/lib/install.js @@ -448,7 +448,7 @@ function prettify (tree, installed) { if (g) g = " (" + g + ")" return c.what + g }) - }) + }, "", { unicode: npm.config.get("unicode") }) }).join("\n") } diff --git a/deps/npm/lib/npm.js b/deps/npm/lib/npm.js index c443b64998..a529862d5a 100644 --- a/deps/npm/lib/npm.js +++ b/deps/npm/lib/npm.js @@ -288,6 +288,14 @@ function load (npm, cli, cb) { npmconf.load(cli, builtin, function (er, config) { if (er === config) er = null + // Include npm-version and node-version in user-agent + var ua = config.get("user-agent") || "" + ua = ua.replace(/\{node-version\}/gi, process.version) + ua = ua.replace(/\{npm-version\}/gi, npm.version) + ua = ua.replace(/\{platform\}/gi, process.platform) + ua = ua.replace(/\{arch\}/gi, process.arch) + config.set("user-agent", ua) + npm.config = config var color = config.get("color") diff --git a/deps/npm/lib/utils/error-handler.js b/deps/npm/lib/utils/error-handler.js index 9777c6a50b..b025fdd371 100644 --- a/deps/npm/lib/utils/error-handler.js +++ b/deps/npm/lib/utils/error-handler.js @@ -279,7 +279,7 @@ function errorHandler (er) { var os = require("os") // just a line break - console.error("") + if (log.levels[log.level] <= log.levels.error) console.error("") log.error("System", os.type() + " " + os.release()) log.error("command", process.argv .map(JSON.stringify).join(" ")) diff --git a/deps/npm/lib/utils/lifecycle.js b/deps/npm/lib/utils/lifecycle.js index d1493700d0..1af5bddca7 100644 --- a/deps/npm/lib/utils/lifecycle.js +++ b/deps/npm/lib/utils/lifecycle.js @@ -1,5 +1,6 @@ exports = module.exports = lifecycle exports.cmd = cmd +exports.makeEnv = makeEnv var log = require("npmlog") , spawn = require("child_process").spawn @@ -314,6 +315,7 @@ function makeEnv (data, prefix, env) { var value = npm.config.get(i) if (value instanceof Stream || Array.isArray(value)) return if (!value) value = "" + else if (typeof value === "number") value = "" + value else if (typeof value !== "string") value = JSON.stringify(value) value = -1 !== value.indexOf("\n") -- cgit v1.2.1