]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.maps.server/node/node-v4.8.0-win-x64/node_modules/npm/lib/utils/link.js
Adding integrated tile server
[simantics/district.git] / org.simantics.maps.server / node / node-v4.8.0-win-x64 / node_modules / npm / lib / utils / link.js
diff --git a/org.simantics.maps.server/node/node-v4.8.0-win-x64/node_modules/npm/lib/utils/link.js b/org.simantics.maps.server/node/node-v4.8.0-win-x64/node_modules/npm/lib/utils/link.js
new file mode 100644 (file)
index 0000000..e353bfa
--- /dev/null
@@ -0,0 +1,40 @@
+
+module.exports = link
+link.ifExists = linkIfExists
+
+var fs = require("graceful-fs")
+  , chain = require("slide").chain
+  , mkdir = require("mkdirp")
+  , rm = require("./gently-rm.js")
+  , path = require("path")
+  , 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, abs, cb) {
+  if (typeof cb !== "function") cb = abs, abs = false
+  if (typeof cb !== "function") cb = gently, gently = null
+  if (npm.config.get("force")) gently = false
+
+  to = path.resolve(to)
+  var target = from = path.resolve(from)
+  if (!abs && process.platform !== "win32") {
+    // junctions on windows must be absolute
+    target = path.relative(path.dirname(to), from)
+    // if there is no folder in common, then it will be much
+    // longer, and using a relative link is dumb.
+    if (target.length >= from.length) target = from
+  }
+
+  chain
+    ( [ [fs, "stat", from]
+      , [rm, to, gently]
+      , [mkdir, path.dirname(to)]
+      , [fs, "symlink", target, to, "junction"] ]
+    , cb)
+}