diff options
author | Rebecca Turner <me@re-becca.org> | 2017-02-23 01:14:08 +0300 |
---|---|---|
committer | Rebecca Turner <me@re-becca.org> | 2017-02-24 02:53:52 +0300 |
commit | 549dcff58c7aaa1e7ba71abaa14008fdf2697297 (patch) | |
tree | d38abdef1509a29310b6b139ca64716e0b3aefec /node_modules | |
parent | 900a5e3e3411ec221306455f99b24b9ce35757c0 (diff) |
rimraf@2.6.0
Retry EBUSY, ENOTEMPTY and EPERM on non-Windows platforms too.
More reliable `rimraf.sync` on Windows.
Credit: @isaacs
Diffstat (limited to 'node_modules')
-rwxr-xr-x | node_modules/rimraf/bin.js | 16 | ||||
-rw-r--r-- | node_modules/rimraf/package.json | 44 | ||||
-rw-r--r-- | node_modules/rimraf/rimraf.js | 21 |
3 files changed, 54 insertions, 27 deletions
diff --git a/node_modules/rimraf/bin.js b/node_modules/rimraf/bin.js index 1bd5a0d16..0d1e17be7 100755 --- a/node_modules/rimraf/bin.js +++ b/node_modules/rimraf/bin.js @@ -4,16 +4,21 @@ var rimraf = require('./') var help = false var dashdash = false +var noglob = false var args = process.argv.slice(2).filter(function(arg) { if (dashdash) return !!arg else if (arg === '--') dashdash = true + else if (arg === '--no-glob' || arg === '-G') + noglob = true + else if (arg === '--glob' || arg === '-g') + noglob = false else if (arg.match(/^(-+|\/)(h(elp)?|\?)$/)) help = true else return !!arg -}); +}) if (help || args.length === 0) { // If they didn't ask for help, then this is not a "success" @@ -24,7 +29,9 @@ if (help || args.length === 0) { log('') log('Options:') log('') - log(' -h, --help Display this usage info') + log(' -h, --help Display this usage info') + log(' -G, --no-glob Do not expand glob patterns in arguments') + log(' -g, --glob Expand glob patterns in arguments (default)') process.exit(help ? 0 : 1) } else go(0) @@ -32,7 +39,10 @@ if (help || args.length === 0) { function go (n) { if (n >= args.length) return - rimraf(args[n], function (er) { + var options = {} + if (noglob) + options = { glob: false } + rimraf(args[n], options, function (er) { if (er) throw er go(n+1) diff --git a/node_modules/rimraf/package.json b/node_modules/rimraf/package.json index c4043f1eb..0543429f9 100644 --- a/node_modules/rimraf/package.json +++ b/node_modules/rimraf/package.json @@ -2,40 +2,39 @@ "_args": [ [ { - "raw": "rimraf@2.5.4", + "raw": "rimraf@2.6.0", "scope": null, "escapedName": "rimraf", "name": "rimraf", - "rawSpec": "2.5.4", - "spec": "2.5.4", + "rawSpec": "2.6.0", + "spec": "2.6.0", "type": "version" }, "/Users/rebecca/code/npm" ] ], - "_from": "rimraf@2.5.4", - "_id": "rimraf@2.5.4", + "_from": "rimraf@2.6.0", + "_id": "rimraf@2.6.0", "_inCache": true, - "_installable": true, "_location": "/rimraf", - "_nodeVersion": "4.4.4", + "_nodeVersion": "8.0.0-pre", "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/rimraf-2.5.4.tgz_1469206941888_0.8645927573088557" + "host": "packages-12-west.internal.npmjs.com", + "tmp": "tmp/rimraf-2.6.0.tgz_1487455299128_0.33092148951254785" }, "_npmUser": { "name": "isaacs", "email": "i@izs.me" }, - "_npmVersion": "3.10.6", + "_npmVersion": "4.3.0", "_phantomChildren": {}, "_requested": { - "raw": "rimraf@2.5.4", + "raw": "rimraf@2.6.0", "scope": null, "escapedName": "rimraf", "name": "rimraf", - "rawSpec": "2.5.4", - "spec": "2.5.4", + "rawSpec": "2.6.0", + "spec": "2.6.0", "type": "version" }, "_requiredBy": [ @@ -44,12 +43,13 @@ "/fs-vacuum", "/fstream", "/node-gyp", - "/npm-registry-client" + "/standard/eslint/file-entry-cache/flat-cache/del", + "/tacks" ], - "_resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz", - "_shasum": "96800093cbf1a0c86bd95b4625467535c29dfa04", + "_resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.0.tgz", + "_shasum": "89b8a0fe432b9ff9ec9a925a00b6cdb3a91bbada", "_shrinkwrap": null, - "_spec": "rimraf@2.5.4", + "_spec": "rimraf@2.6.0", "_where": "/Users/rebecca/code/npm", "author": { "name": "Isaac Z. Schlueter", @@ -68,12 +68,12 @@ "description": "A deep deletion module for node (like `rm -rf`)", "devDependencies": { "mkdirp": "^0.5.1", - "tap": "^6.1.1" + "tap": "^10.1.2" }, "directories": {}, "dist": { - "shasum": "96800093cbf1a0c86bd95b4625467535c29dfa04", - "tarball": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz" + "shasum": "89b8a0fe432b9ff9ec9a925a00b6cdb3a91bbada", + "tarball": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.0.tgz" }, "files": [ "LICENSE", @@ -81,7 +81,7 @@ "bin.js", "rimraf.js" ], - "gitHead": "2af08bbbd0a03549b278414309dc5d8097699443", + "gitHead": "5b661e45ff409d42251890cb1b993c9315803bbf", "homepage": "https://github.com/isaacs/rimraf#readme", "license": "ISC", "main": "rimraf.js", @@ -101,5 +101,5 @@ "scripts": { "test": "tap test/*.js" }, - "version": "2.5.4" + "version": "2.6.0" } diff --git a/node_modules/rimraf/rimraf.js b/node_modules/rimraf/rimraf.js index 5d9a5768a..e63321938 100644 --- a/node_modules/rimraf/rimraf.js +++ b/node_modules/rimraf/rimraf.js @@ -85,7 +85,7 @@ function rimraf (p, options, cb) { results.forEach(function (p) { rimraf_(p, options, function CB (er) { if (er) { - if (isWindows && (er.code === "EBUSY" || er.code === "ENOTEMPTY" || er.code === "EPERM") && + if ((er.code === "EBUSY" || er.code === "ENOTEMPTY" || er.code === "EPERM") && busyTries < options.maxBusyTries) { busyTries ++ var time = busyTries * 100 @@ -310,6 +310,7 @@ function rimrafSync (p, options) { return isWindows ? fixWinEPERMSync(p, options, er) : rmdirSync(p, options, er) if (er.code !== "EISDIR") throw er + rmdirSync(p, options, er) } } @@ -339,5 +340,21 @@ function rmkidsSync (p, options) { options.readdirSync(p).forEach(function (f) { rimrafSync(path.join(p, f), options) }) - options.rmdirSync(p, options) + + // We only end up here once we got ENOTEMPTY at least once, and + // at this point, we are guaranteed to have removed all the kids. + // So, we know that it won't be ENOENT or ENOTDIR or anything else. + // try really hard to delete stuff on windows, because it has a + // PROFOUNDLY annoying habit of not closing handles promptly when + // files are deleted, resulting in spurious ENOTEMPTY errors. + var retries = isWindows ? 100 : 1 + var i = 0 + do { + try { + return options.rmdirSync(p, options) + } finally { + if (++i < retries) + continue + } + } while (true) } |