summaryrefslogtreecommitdiff
path: root/deps/npm/lib/utils/link.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/npm/lib/utils/link.js')
-rw-r--r--deps/npm/lib/utils/link.js30
1 files changed, 30 insertions, 0 deletions
diff --git a/deps/npm/lib/utils/link.js b/deps/npm/lib/utils/link.js
new file mode 100644
index 0000000000..9be1221f0a
--- /dev/null
+++ b/deps/npm/lib/utils/link.js
@@ -0,0 +1,30 @@
+
+module.exports = link
+link.ifExists = linkIfExists
+
+var fs = require("graceful-fs")
+ , chain = require("slide").chain
+ , mkdir = require("./mkdir-p.js")
+ , rm = require("rimraf")
+ , log = require("./log.js")
+ , path = require("path")
+ , relativize = require("./relativize.js")
+ , npm = require("../npm.js")
+
+function linkIfExists (from, to, gently, cb) {
+ fs.stat(from, function (er) {
+ if (er) return cb()
+ link(from, to, gently, cb)
+ })
+}
+
+function link (from, to, gently, cb) {
+ if (typeof cb !== "function") cb = gently, gently = null
+ if (npm.config.get("force")) gently = false
+ chain
+ ( [ [fs, "stat", from]
+ , [rm, to, { gently: gently }]
+ , [mkdir, path.dirname(to)]
+ , [fs, "symlink", relativize(from, to), to] ]
+ , cb)
+}