Comparing version 2.2.0 to 2.2.1
{ | ||
"name": "rimraf", | ||
"version": "2.2.0", | ||
"version": "2.2.1", | ||
"main": "rimraf.js", | ||
@@ -5,0 +5,0 @@ "description": "A deep deletion module for node (like `rm -rf`)", |
@@ -19,2 +19,4 @@ module.exports = rimraf | ||
var isWindows = (process.platform === "win32") | ||
function rimraf (p, cb) { | ||
@@ -64,6 +66,10 @@ if (!cb) throw new Error("No callback passed to rimraf()") | ||
fs.unlink(p, function (er) { | ||
if (er && er.code === "ENOENT") | ||
return cb() | ||
if (er && (er.code === "EPERM" || er.code === "EISDIR")) | ||
return rmdir(p, er, cb) | ||
if (er) { | ||
if (er.code === "ENOENT") | ||
return cb() | ||
if (er.code === "EPERM") | ||
return (isWindows) ? fixWinEPERM(p, er, cb) : rmdir(p, er, cb) | ||
if (er.code === "EISDIR") | ||
return rmdir(p, er, cb) | ||
} | ||
return cb(er) | ||
@@ -73,2 +79,39 @@ }) | ||
function fixWinEPERM (p, er, cb) { | ||
fs.chmod(p, 666, function (er2) { | ||
if (er2) | ||
cb(er2.code === "ENOENT" ? null : er) | ||
else | ||
fs.stat(p, function(er3, stats) { | ||
if (er3) | ||
cb(er3.code === "ENOENT" ? null : er) | ||
else if (stats.isDirectory()) | ||
rmdir(p, er, cb) | ||
else | ||
fs.unlink(p, cb) | ||
}) | ||
}) | ||
} | ||
function fixWinEPERMSync (p, er, cb) { | ||
try { | ||
fs.chmodSync(p, 666) | ||
} catch (er2) { | ||
if (er2.code !== "ENOENT") | ||
throw er | ||
} | ||
try { | ||
var stats = fs.statSync(p) | ||
} catch (er3) { | ||
if (er3 !== "ENOENT") | ||
throw er | ||
} | ||
if (stats.isDirectory()) | ||
rmdirSync(p, er) | ||
else | ||
fs.unlinkSync(p) | ||
} | ||
function rmdir (p, originalEr, cb) { | ||
@@ -118,19 +161,28 @@ // try to rmdir first, and only readdir on ENOTEMPTY or EEXIST (SunOS) | ||
return | ||
if (er.code !== "EPERM" && er.code !== "EISDIR") | ||
if (er.code === "EPERM") | ||
return isWindows ? fixWinEPERMSync(p, er) : rmdirSync(p, er) | ||
if (er.code !== "EISDIR") | ||
throw er | ||
try { | ||
fs.rmdirSync(p) | ||
} catch (er2) { | ||
if (er2.code === "ENOENT") | ||
return | ||
if (er2.code === "ENOTDIR") | ||
throw er | ||
if (er2.code === "ENOTEMPTY") { | ||
fs.readdirSync(p).forEach(function (f) { | ||
rimrafSync(path.join(p, f)) | ||
}) | ||
fs.rmdirSync(p) | ||
} | ||
} | ||
rmdirSync(p, er) | ||
} | ||
} | ||
function rmdirSync (p, originalEr) { | ||
try { | ||
fs.rmdirSync(p) | ||
} catch (er) { | ||
if (er.code === "ENOENT") | ||
return | ||
if (er.code === "ENOTDIR") | ||
throw originalEr | ||
if (er.code === "ENOTEMPTY" || er.code === "EEXIST") | ||
rmkidsSync(p) | ||
} | ||
} | ||
function rmkidsSync (p) { | ||
fs.readdirSync(p).forEach(function (f) { | ||
rimrafSync(path.join(p, f)) | ||
}) | ||
fs.rmdirSync(p) | ||
} |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
8525
203