mirror of https://github.com/lukechilds/node.git
isaacs
13 years ago
206 changed files with 474 additions and 421 deletions
@ -0,0 +1,45 @@ |
|||
// only remove the thing if it's a symlink into a specific folder.
|
|||
// This is a very common use-case of npm's, but not so common elsewhere.
|
|||
|
|||
module.exports = gentlyRm |
|||
|
|||
var rimraf = require("rimraf") |
|||
, fs = require("graceful-fs") |
|||
, npm = require("../npm.js") |
|||
, path = require("path") |
|||
|
|||
function gentlyRm (p, gently, cb) { |
|||
if (npm.config.get("force") || !gently) { |
|||
return rimraf(p, cb) |
|||
} |
|||
|
|||
gently = path.resolve(gently) |
|||
|
|||
// lstat it, see if it's a symlink.
|
|||
fs.lstat(p, function (er, s) { |
|||
if (er) return rimraf(p, cb) |
|||
if (!s.isSymbolicLink()) next(null, path.resolve(p)) |
|||
realish(p, next) |
|||
}) |
|||
|
|||
function next (er, rp) { |
|||
if (rp && rp.indexOf(gently) !== 0) { |
|||
return clobberFail(p, gently, cb) |
|||
} |
|||
rimraf(p, cb) |
|||
} |
|||
} |
|||
|
|||
function realish (p, cb) { |
|||
fs.readlink(p, function (er, r) { |
|||
if (er) return cb(er) |
|||
return cb(null, path.resolve(path.dirname(p), r)) |
|||
}) |
|||
} |
|||
|
|||
function clobberFail (p, g, cb) { |
|||
var er = new Error("Refusing to delete: "+p+" not in "+g) |
|||
er.code = "EEXIST" |
|||
er.path = p |
|||
return cb(er) |
|||
} |
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue