diff options
-rw-r--r-- | lib/config/core.js | 11 | ||||
-rw-r--r-- | test/common-tap.js | 2 | ||||
-rw-r--r-- | test/tap/config-edit.js | 72 |
3 files changed, 82 insertions, 3 deletions
diff --git a/lib/config/core.js b/lib/config/core.js index 59f7cf556..ddd851cf7 100644 --- a/lib/config/core.js +++ b/lib/config/core.js @@ -152,10 +152,17 @@ function load_(builtin, rc, cli, cb) { // annoying humans and their expectations! if (conf.get("prefix")) { var etc = path.resolve(conf.get("prefix"), "etc") - defaults.globalconfig = path.resolve(etc, "npmrc") - defaults.globalignorefile = path.resolve(etc, "npmignore") + mkdirp(etc, function (err) { + defaults.globalconfig = path.resolve(etc, "npmrc") + defaults.globalignorefile = path.resolve(etc, "npmignore") + afterUserContinuation() + }) + } else { + afterUserContinuation() } + } + function afterUserContinuation() { conf.addFile(conf.get("globalconfig"), "global") // move the builtin into the conf stack now. diff --git a/test/common-tap.js b/test/common-tap.js index 7dcfc35cc..403670828 100644 --- a/test/common-tap.js +++ b/test/common-tap.js @@ -18,7 +18,7 @@ exports.npm = function (cmd, opts, cb) { cmd = [bin].concat(cmd) opts = opts || {} - opts.env = opts.env ? opts.env : process.env + opts.env = opts.env || process.env if (!opts.env.npm_config_cache) { opts.env.npm_config_cache = npm_config_cache } diff --git a/test/tap/config-edit.js b/test/tap/config-edit.js new file mode 100644 index 000000000..97a54d2ec --- /dev/null +++ b/test/tap/config-edit.js @@ -0,0 +1,72 @@ +var fs = require("fs") +var path = require("path") + +var mkdirp = require("mkdirp") +var rimraf = require("rimraf") +var test = require("tap").test +var common = require("../common-tap.js") + +var pkg = path.resolve(__dirname, "npm-global-edit") + +var editorSrc = function () {/* +#!/usr/bin/env node +var fs = require("fs") +if (fs.existsSync(process.argv[2])) { + console.log("success") +} else { + console.log("error") + process.exit(1) +} +*/}.toString().split("\n").slice(1, -1).join("\n") +var editorPath = path.join(pkg, "editor") + +test("setup", function (t) { + cleanup(function (er) { + t.ifError(er, "old directory removed") + + mkdirp(pkg, "0777", function (er) { + fs.writeFileSync(editorPath, editorSrc) + fs.chmodSync(editorPath, "0777") + t.ifError(er, "created package directory correctly") + t.end() + }) + }) +}) + +test("saving configs", function (t) { + var opts = { + cwd: pkg, + env: { + PATH: process.env.PATH, + EDITOR: editorPath + } + } + common.npm( + [ + "config", + "--prefix", pkg, + "--global", + "edit" + ], + opts, + function (err, code, stdout, stderr) { + t.ifError(err, "command ran without issue") + + t.equal(stderr, "", "got nothing on stderr") + t.equal(code, 0, "exit ok") + t.equal(stdout, "success\n", "got success message") + t.end() + } + ) +}) + +test("cleanup", function (t) { + cleanup(function (er) { + t.ifError(er, "test directory removed OK") + t.end() + }) +}) + +function cleanup (cb) { + rimraf(pkg, cb) +} |