Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/npm/cli.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/config/core.js11
-rw-r--r--test/common-tap.js2
-rw-r--r--test/tap/config-edit.js72
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)
+}