diff options
Diffstat (limited to 'node_modules/rimraf')
| -rw-r--r-- | node_modules/rimraf/LICENSE | 15 | ||||
| -rw-r--r-- | node_modules/rimraf/README.md | 101 | ||||
| -rwxr-xr-x | node_modules/rimraf/bin.js | 40 | ||||
| -rw-r--r-- | node_modules/rimraf/package.json | 100 | ||||
| -rw-r--r-- | node_modules/rimraf/rimraf.js | 343 | 
5 files changed, 599 insertions, 0 deletions
diff --git a/node_modules/rimraf/LICENSE b/node_modules/rimraf/LICENSE new file mode 100644 index 000000000..19129e315 --- /dev/null +++ b/node_modules/rimraf/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/rimraf/README.md b/node_modules/rimraf/README.md new file mode 100644 index 000000000..423b8cf85 --- /dev/null +++ b/node_modules/rimraf/README.md @@ -0,0 +1,101 @@ +[](https://travis-ci.org/isaacs/rimraf) [](https://david-dm.org/isaacs/rimraf) [](https://david-dm.org/isaacs/rimraf#info=devDependencies) + +The [UNIX command](http://en.wikipedia.org/wiki/Rm_(Unix)) `rm -rf` for node. + +Install with `npm install rimraf`, or just drop rimraf.js somewhere. + +## API + +`rimraf(f, [opts], callback)` + +The first parameter will be interpreted as a globbing pattern for files. If you +want to disable globbing you can do so with `opts.disableGlob` (defaults to +`false`). This might be handy, for instance, if you have filenames that contain +globbing wildcard characters. + +The callback will be called with an error if there is one.  Certain +errors are handled for you: + +* Windows: `EBUSY` and `ENOTEMPTY` - rimraf will back off a maximum of +  `opts.maxBusyTries` times before giving up, adding 100ms of wait +  between each attempt.  The default `maxBusyTries` is 3. +* `ENOENT` - If the file doesn't exist, rimraf will return +  successfully, since your desired outcome is already the case. +* `EMFILE` - Since `readdir` requires opening a file descriptor, it's +  possible to hit `EMFILE` if too many file descriptors are in use. +  In the sync case, there's nothing to be done for this.  But in the +  async case, rimraf will gradually back off with timeouts up to +  `opts.emfileWait` ms, which defaults to 1000. + +## options + +* unlink, chmod, stat, lstat, rmdir, readdir, +  unlinkSync, chmodSync, statSync, lstatSync, rmdirSync, readdirSync + +    In order to use a custom file system library, you can override +    specific fs functions on the options object. + +    If any of these functions are present on the options object, then +    the supplied function will be used instead of the default fs +    method. + +    Sync methods are only relevant for `rimraf.sync()`, of course. + +    For example: + +    ```javascript +    var myCustomFS = require('some-custom-fs') + +    rimraf('some-thing', myCustomFS, callback) +    ``` + +* maxBusyTries + +    If an `EBUSY`, `ENOTEMPTY`, or `EPERM` error code is encountered +    on Windows systems, then rimraf will retry with a linear backoff +    wait of 100ms longer on each try.  The default maxBusyTries is 3. + +    Only relevant for async usage. + +* emfileWait + +    If an `EMFILE` error is encountered, then rimraf will retry +    repeatedly with a linear backoff of 1ms longer on each try, until +    the timeout counter hits this max.  The default limit is 1000. + +    If you repeatedly encounter `EMFILE` errors, then consider using +    [graceful-fs](http://npm.im/graceful-fs) in your program. + +    Only relevant for async usage. + +* glob + +    Set to `false` to disable [glob](http://npm.im/glob) pattern +    matching. + +    Set to an object to pass options to the glob module.  The default +    glob options are `{ nosort: true, silent: true }`. + +    Glob version 6 is used in this module. + +    Relevant for both sync and async usage. + +* disableGlob + +    Set to any non-falsey value to disable globbing entirely. +    (Equivalent to setting `glob: false`.) + +## rimraf.sync + +It can remove stuff synchronously, too.  But that's not so good.  Use +the async API.  It's better. + +## CLI + +If installed with `npm install rimraf -g` it can be used as a global +command `rimraf <path> [<path> ...]` which is useful for cross platform support. + +## mkdirp + +If you need to create a directory recursively, check out +[mkdirp](https://github.com/substack/node-mkdirp). diff --git a/node_modules/rimraf/bin.js b/node_modules/rimraf/bin.js new file mode 100755 index 000000000..1bd5a0d16 --- /dev/null +++ b/node_modules/rimraf/bin.js @@ -0,0 +1,40 @@ +#!/usr/bin/env node + +var rimraf = require('./') + +var help = false +var dashdash = false +var args = process.argv.slice(2).filter(function(arg) { +  if (dashdash) +    return !!arg +  else if (arg === '--') +    dashdash = true +  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" +  var log = help ? console.log : console.error +  log('Usage: rimraf <path> [<path> ...]') +  log('') +  log('  Deletes all files and folders at "path" recursively.') +  log('') +  log('Options:') +  log('') +  log('  -h, --help    Display this usage info') +  process.exit(help ? 0 : 1) +} else +  go(0) + +function go (n) { +  if (n >= args.length) +    return +  rimraf(args[n], function (er) { +    if (er) +      throw er +    go(n+1) +  }) +} diff --git a/node_modules/rimraf/package.json b/node_modules/rimraf/package.json new file mode 100644 index 000000000..4bb2907f7 --- /dev/null +++ b/node_modules/rimraf/package.json @@ -0,0 +1,100 @@ +{ +  "_args": [ +    [ +      { +        "raw": "rimraf@^2.2.8", +        "scope": null, +        "escapedName": "rimraf", +        "name": "rimraf", +        "rawSpec": "^2.2.8", +        "spec": ">=2.2.8 <3.0.0", +        "type": "range" +      }, +      "/home/dold/repos/taler/wallet-webex/node_modules/del" +    ] +  ], +  "_from": "rimraf@>=2.2.8 <3.0.0", +  "_id": "rimraf@2.5.4", +  "_inCache": true, +  "_location": "/rimraf", +  "_nodeVersion": "4.4.4", +  "_npmOperationalInternal": { +    "host": "packages-16-east.internal.npmjs.com", +    "tmp": "tmp/rimraf-2.5.4.tgz_1469206941888_0.8645927573088557" +  }, +  "_npmUser": { +    "name": "isaacs", +    "email": "i@izs.me" +  }, +  "_npmVersion": "3.10.6", +  "_phantomChildren": {}, +  "_requested": { +    "raw": "rimraf@^2.2.8", +    "scope": null, +    "escapedName": "rimraf", +    "name": "rimraf", +    "rawSpec": "^2.2.8", +    "spec": ">=2.2.8 <3.0.0", +    "type": "range" +  }, +  "_requiredBy": [ +    "/del", +    "/gulp-sym" +  ], +  "_resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz", +  "_shasum": "96800093cbf1a0c86bd95b4625467535c29dfa04", +  "_shrinkwrap": null, +  "_spec": "rimraf@^2.2.8", +  "_where": "/home/dold/repos/taler/wallet-webex/node_modules/del", +  "author": { +    "name": "Isaac Z. Schlueter", +    "email": "i@izs.me", +    "url": "http://blog.izs.me/" +  }, +  "bin": { +    "rimraf": "./bin.js" +  }, +  "bugs": { +    "url": "https://github.com/isaacs/rimraf/issues" +  }, +  "dependencies": { +    "glob": "^7.0.5" +  }, +  "description": "A deep deletion module for node (like `rm -rf`)", +  "devDependencies": { +    "mkdirp": "^0.5.1", +    "tap": "^6.1.1" +  }, +  "directories": {}, +  "dist": { +    "shasum": "96800093cbf1a0c86bd95b4625467535c29dfa04", +    "tarball": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz" +  }, +  "files": [ +    "LICENSE", +    "README.md", +    "bin.js", +    "rimraf.js" +  ], +  "gitHead": "2af08bbbd0a03549b278414309dc5d8097699443", +  "homepage": "https://github.com/isaacs/rimraf#readme", +  "license": "ISC", +  "main": "rimraf.js", +  "maintainers": [ +    { +      "name": "isaacs", +      "email": "i@izs.me" +    } +  ], +  "name": "rimraf", +  "optionalDependencies": {}, +  "readme": "ERROR: No README data found!", +  "repository": { +    "type": "git", +    "url": "git://github.com/isaacs/rimraf.git" +  }, +  "scripts": { +    "test": "tap test/*.js" +  }, +  "version": "2.5.4" +} diff --git a/node_modules/rimraf/rimraf.js b/node_modules/rimraf/rimraf.js new file mode 100644 index 000000000..5d9a5768a --- /dev/null +++ b/node_modules/rimraf/rimraf.js @@ -0,0 +1,343 @@ +module.exports = rimraf +rimraf.sync = rimrafSync + +var assert = require("assert") +var path = require("path") +var fs = require("fs") +var glob = require("glob") + +var defaultGlobOpts = { +  nosort: true, +  silent: true +} + +// for EMFILE handling +var timeout = 0 + +var isWindows = (process.platform === "win32") + +function defaults (options) { +  var methods = [ +    'unlink', +    'chmod', +    'stat', +    'lstat', +    'rmdir', +    'readdir' +  ] +  methods.forEach(function(m) { +    options[m] = options[m] || fs[m] +    m = m + 'Sync' +    options[m] = options[m] || fs[m] +  }) + +  options.maxBusyTries = options.maxBusyTries || 3 +  options.emfileWait = options.emfileWait || 1000 +  if (options.glob === false) { +    options.disableGlob = true +  } +  options.disableGlob = options.disableGlob || false +  options.glob = options.glob || defaultGlobOpts +} + +function rimraf (p, options, cb) { +  if (typeof options === 'function') { +    cb = options +    options = {} +  } + +  assert(p, 'rimraf: missing path') +  assert.equal(typeof p, 'string', 'rimraf: path should be a string') +  assert.equal(typeof cb, 'function', 'rimraf: callback function required') +  assert(options, 'rimraf: invalid options argument provided') +  assert.equal(typeof options, 'object', 'rimraf: options should be object') + +  defaults(options) + +  var busyTries = 0 +  var errState = null +  var n = 0 + +  if (options.disableGlob || !glob.hasMagic(p)) +    return afterGlob(null, [p]) + +  options.lstat(p, function (er, stat) { +    if (!er) +      return afterGlob(null, [p]) + +    glob(p, options.glob, afterGlob) +  }) + +  function next (er) { +    errState = errState || er +    if (--n === 0) +      cb(errState) +  } + +  function afterGlob (er, results) { +    if (er) +      return cb(er) + +    n = results.length +    if (n === 0) +      return cb() + +    results.forEach(function (p) { +      rimraf_(p, options, function CB (er) { +        if (er) { +          if (isWindows && (er.code === "EBUSY" || er.code === "ENOTEMPTY" || er.code === "EPERM") && +              busyTries < options.maxBusyTries) { +            busyTries ++ +            var time = busyTries * 100 +            // try again, with the same exact callback as this one. +            return setTimeout(function () { +              rimraf_(p, options, CB) +            }, time) +          } + +          // this one won't happen if graceful-fs is used. +          if (er.code === "EMFILE" && timeout < options.emfileWait) { +            return setTimeout(function () { +              rimraf_(p, options, CB) +            }, timeout ++) +          } + +          // already gone +          if (er.code === "ENOENT") er = null +        } + +        timeout = 0 +        next(er) +      }) +    }) +  } +} + +// Two possible strategies. +// 1. Assume it's a file.  unlink it, then do the dir stuff on EPERM or EISDIR +// 2. Assume it's a directory.  readdir, then do the file stuff on ENOTDIR +// +// Both result in an extra syscall when you guess wrong.  However, there +// are likely far more normal files in the world than directories.  This +// is based on the assumption that a the average number of files per +// directory is >= 1. +// +// If anyone ever complains about this, then I guess the strategy could +// be made configurable somehow.  But until then, YAGNI. +function rimraf_ (p, options, cb) { +  assert(p) +  assert(options) +  assert(typeof cb === 'function') + +  // sunos lets the root user unlink directories, which is... weird. +  // so we have to lstat here and make sure it's not a dir. +  options.lstat(p, function (er, st) { +    if (er && er.code === "ENOENT") +      return cb(null) + +    // Windows can EPERM on stat.  Life is suffering. +    if (er && er.code === "EPERM" && isWindows) +      fixWinEPERM(p, options, er, cb) + +    if (st && st.isDirectory()) +      return rmdir(p, options, er, cb) + +    options.unlink(p, function (er) { +      if (er) { +        if (er.code === "ENOENT") +          return cb(null) +        if (er.code === "EPERM") +          return (isWindows) +            ? fixWinEPERM(p, options, er, cb) +            : rmdir(p, options, er, cb) +        if (er.code === "EISDIR") +          return rmdir(p, options, er, cb) +      } +      return cb(er) +    }) +  }) +} + +function fixWinEPERM (p, options, er, cb) { +  assert(p) +  assert(options) +  assert(typeof cb === 'function') +  if (er) +    assert(er instanceof Error) + +  options.chmod(p, 666, function (er2) { +    if (er2) +      cb(er2.code === "ENOENT" ? null : er) +    else +      options.stat(p, function(er3, stats) { +        if (er3) +          cb(er3.code === "ENOENT" ? null : er) +        else if (stats.isDirectory()) +          rmdir(p, options, er, cb) +        else +          options.unlink(p, cb) +      }) +  }) +} + +function fixWinEPERMSync (p, options, er) { +  assert(p) +  assert(options) +  if (er) +    assert(er instanceof Error) + +  try { +    options.chmodSync(p, 666) +  } catch (er2) { +    if (er2.code === "ENOENT") +      return +    else +      throw er +  } + +  try { +    var stats = options.statSync(p) +  } catch (er3) { +    if (er3.code === "ENOENT") +      return +    else +      throw er +  } + +  if (stats.isDirectory()) +    rmdirSync(p, options, er) +  else +    options.unlinkSync(p) +} + +function rmdir (p, options, originalEr, cb) { +  assert(p) +  assert(options) +  if (originalEr) +    assert(originalEr instanceof Error) +  assert(typeof cb === 'function') + +  // try to rmdir first, and only readdir on ENOTEMPTY or EEXIST (SunOS) +  // if we guessed wrong, and it's not a directory, then +  // raise the original error. +  options.rmdir(p, function (er) { +    if (er && (er.code === "ENOTEMPTY" || er.code === "EEXIST" || er.code === "EPERM")) +      rmkids(p, options, cb) +    else if (er && er.code === "ENOTDIR") +      cb(originalEr) +    else +      cb(er) +  }) +} + +function rmkids(p, options, cb) { +  assert(p) +  assert(options) +  assert(typeof cb === 'function') + +  options.readdir(p, function (er, files) { +    if (er) +      return cb(er) +    var n = files.length +    if (n === 0) +      return options.rmdir(p, cb) +    var errState +    files.forEach(function (f) { +      rimraf(path.join(p, f), options, function (er) { +        if (errState) +          return +        if (er) +          return cb(errState = er) +        if (--n === 0) +          options.rmdir(p, cb) +      }) +    }) +  }) +} + +// this looks simpler, and is strictly *faster*, but will +// tie up the JavaScript thread and fail on excessively +// deep directory trees. +function rimrafSync (p, options) { +  options = options || {} +  defaults(options) + +  assert(p, 'rimraf: missing path') +  assert.equal(typeof p, 'string', 'rimraf: path should be a string') +  assert(options, 'rimraf: missing options') +  assert.equal(typeof options, 'object', 'rimraf: options should be object') + +  var results + +  if (options.disableGlob || !glob.hasMagic(p)) { +    results = [p] +  } else { +    try { +      options.lstatSync(p) +      results = [p] +    } catch (er) { +      results = glob.sync(p, options.glob) +    } +  } + +  if (!results.length) +    return + +  for (var i = 0; i < results.length; i++) { +    var p = results[i] + +    try { +      var st = options.lstatSync(p) +    } catch (er) { +      if (er.code === "ENOENT") +        return + +      // Windows can EPERM on stat.  Life is suffering. +      if (er.code === "EPERM" && isWindows) +        fixWinEPERMSync(p, options, er) +    } + +    try { +      // sunos lets the root user unlink directories, which is... weird. +      if (st && st.isDirectory()) +        rmdirSync(p, options, null) +      else +        options.unlinkSync(p) +    } catch (er) { +      if (er.code === "ENOENT") +        return +      if (er.code === "EPERM") +        return isWindows ? fixWinEPERMSync(p, options, er) : rmdirSync(p, options, er) +      if (er.code !== "EISDIR") +        throw er +      rmdirSync(p, options, er) +    } +  } +} + +function rmdirSync (p, options, originalEr) { +  assert(p) +  assert(options) +  if (originalEr) +    assert(originalEr instanceof Error) + +  try { +    options.rmdirSync(p) +  } catch (er) { +    if (er.code === "ENOENT") +      return +    if (er.code === "ENOTDIR") +      throw originalEr +    if (er.code === "ENOTEMPTY" || er.code === "EEXIST" || er.code === "EPERM") +      rmkidsSync(p, options) +  } +} + +function rmkidsSync (p, options) { +  assert(p) +  assert(options) +  options.readdirSync(p).forEach(function (f) { +    rimrafSync(path.join(p, f), options) +  }) +  options.rmdirSync(p, options) +}  | 
