From 3ab15cde2516564a2bc4fe6246fe447f07752ed4 Mon Sep 17 00:00:00 2001 From: isaacs Date: Tue, 22 Nov 2011 16:56:59 -0800 Subject: [PATCH] Update npm to 1.1.0-alpha-2 --- deps/npm/.gitmodules | 3 + deps/npm/doc/cli/coding-style.md | 8 +- deps/npm/lib/completion.js | 2 +- deps/npm/lib/utils/tar.js | 12 +- deps/npm/node_modules/abbrev/LICENSE | 23 + deps/npm/node_modules/abbrev/package.json | 3 + .../block-stream/bench/block-stream.js | 68 - .../block-stream/bench/dropper-pause.js | 70 - .../block-stream/bench/dropper.js | 68 - .../node_modules/block-stream/test/basic.js | 27 - .../block-stream/test/nopad-thorough.js | 68 - .../node_modules/block-stream/test/nopad.js | 57 - .../block-stream/test/pause-resume.js | 73 - .../block-stream/test/thorough.js | 68 - deps/npm/node_modules/fast-list/README.md | 111 ++ deps/npm/node_modules/fast-list/bench.js | 55 + deps/npm/node_modules/fast-list/fast-list.js | 90 ++ deps/npm/node_modules/fast-list/package.json | 20 + .../npm/node_modules/fstream/examples/pipe.js | 113 -- .../node_modules/fstream/examples/reader.js | 29 - .../fstream/examples/symlink-write.js | 9 - deps/npm/node_modules/fstream/lib/writer.js | 12 +- deps/npm/node_modules/fstream/package.json | 6 +- .../node_modules/graceful-fs/graceful-fs.js | 216 ++- .../npm/node_modules/graceful-fs/package.json | 8 +- .../node_modules/ini/test/fixtures/foo.ini | 18 - deps/npm/node_modules/ini/test/foo.js | 40 - deps/npm/node_modules/minimatch/test/basic.js | 141 -- deps/npm/node_modules/mkdirp/examples/pow.js | 6 - deps/npm/node_modules/mkdirp/test/chmod.js | 39 - deps/npm/node_modules/mkdirp/test/clobber.js | 37 - deps/npm/node_modules/mkdirp/test/mkdirp.js | 28 - deps/npm/node_modules/mkdirp/test/race.js | 41 - deps/npm/node_modules/mkdirp/test/rel.js | 32 - deps/npm/node_modules/node-uuid/.gitignore | 2 + deps/npm/node_modules/node-uuid/README.md | 237 +++- .../node-uuid/benchmark/README.md | 53 + .../node-uuid/benchmark/bench.gnu | 175 +++ .../node_modules/node-uuid/benchmark/bench.sh | 34 + .../{test => benchmark}/benchmark-native.c | 0 .../node-uuid/benchmark/benchmark.js | 52 + deps/npm/node_modules/node-uuid/package.json | 8 +- .../node_modules/node-uuid/test/benchmark.js | 27 - .../npm/node_modules/node-uuid/test/test.html | 14 - deps/npm/node_modules/node-uuid/test/test.js | 83 -- deps/npm/node_modules/node-uuid/uuid.js | 287 +++- deps/npm/node_modules/nopt/README.md | 4 +- .../node_modules/nopt/examples/my-program.js | 30 - deps/npm/node_modules/request/README.md | 92 ++ deps/npm/node_modules/request/main.js | 122 +- deps/npm/node_modules/request/oauth.js | 23 + deps/npm/node_modules/request/package.json | 2 +- .../request/tests/googledoodle.png | Bin 38510 -> 0 bytes deps/npm/node_modules/request/tests/run.sh | 6 - deps/npm/node_modules/request/tests/server.js | 57 - .../node_modules/request/tests/test-body.js | 90 -- .../node_modules/request/tests/test-errors.js | 30 - .../node_modules/request/tests/test-pipes.js | 167 --- .../request/tests/test-timeout.js | 87 -- deps/npm/node_modules/request/uuid.js | 19 + .../request/vendor/cookie/index.js | 57 + .../node_modules/request/vendor/cookie/jar.js | 72 + deps/npm/node_modules/rimraf/test/run.sh | 10 - deps/npm/node_modules/rimraf/test/setup.sh | 47 - .../node_modules/rimraf/test/test-async.js | 5 - .../node_modules/rimraf/test/test-fiber.js | 15 - .../npm/node_modules/rimraf/test/test-sync.js | 3 - deps/npm/node_modules/semver/test.js | 397 ------ .../node_modules/tar/examples/extracter.js | 11 - deps/npm/node_modules/tar/examples/reader.js | 36 - deps/npm/node_modules/tar/lib/entry-writer.js | 3 + .../tar/lib/extended-header-writer.js | 20 +- deps/npm/node_modules/tar/old/README.md | 1 - deps/npm/node_modules/tar/old/doc/example.js | 24 - deps/npm/node_modules/tar/old/generator.js | 387 ------ deps/npm/node_modules/tar/old/parser.js | 344 ----- deps/npm/node_modules/tar/old/tar.js | 74 -- .../tar/old/test/test-generator.js | 13 - .../tar/old/test/test-generator.tar | Bin 3260 -> 0 bytes .../tar/old/test/test-generator.txt | Bin 3261 -> 0 bytes .../node_modules/tar/old/test/test-parser.js | 28 - .../node_modules/tar/old/test/test-tar.tar | Bin 3072 -> 0 bytes .../node_modules/tar/old/test/test-tar.txt | Bin 3073 -> 0 bytes deps/npm/node_modules/tar/package.json | 4 +- deps/npm/node_modules/tar/test/extract.js | 406 ------ .../node_modules/tar/test/fixtures/200.tar | Bin 3072 -> 0 bytes .../node_modules/tar/test/fixtures/200L.hex | 50 - ...cccccccccccccccccccccccccccccccccccccccccc | 1 - .../tar/test/fixtures/200longlink.tar | Bin 3584 -> 0 bytes .../tar/test/fixtures/200longname.tar | Bin 3072 -> 0 bytes deps/npm/node_modules/tar/test/fixtures/a.hex | 14 - deps/npm/node_modules/tar/test/fixtures/a.tar | Bin 2048 -> 0 bytes deps/npm/node_modules/tar/test/fixtures/a.txt | 1 - deps/npm/node_modules/tar/test/fixtures/b.hex | 14 - deps/npm/node_modules/tar/test/fixtures/b.tar | Bin 2048 -> 0 bytes deps/npm/node_modules/tar/test/fixtures/b.txt | 1 - deps/npm/node_modules/tar/test/fixtures/c.hex | 74 -- deps/npm/node_modules/tar/test/fixtures/c.tar | Bin 18432 -> 0 bytes deps/npm/node_modules/tar/test/fixtures/c.txt | 1 - .../npm/node_modules/tar/test/fixtures/cc.txt | 1 - .../node_modules/tar/test/fixtures/foo.hex | 14 - .../npm/node_modules/tar/test/fixtures/foo.js | 1 - .../node_modules/tar/test/fixtures/foo.tar | Bin 2048 -> 0 bytes .../node_modules/tar/test/fixtures/hardlink-1 | 1 - .../node_modules/tar/test/fixtures/hardlink-2 | 1 - .../node_modules/tar/test/fixtures/omega.hex | 22 - .../node_modules/tar/test/fixtures/omega.tar | Bin 3072 -> 0 bytes .../node_modules/tar/test/fixtures/omega.txt | 1 - .../tar/test/fixtures/omegapax.tar | Bin 5120 -> 0 bytes .../tar/test/fixtures/packtest/omega.txt | 1 - .../tar/test/fixtures/packtest/star.4.html | 1184 ----------------- .../tar/test/fixtures/packtest/Ω.txt | 1 - ...cccccccccccccccccccccccccccccccccccccccccc | 1 - .../node_modules/tar/test/fixtures/symlink | 1 - deps/npm/node_modules/tar/test/fixtures/Ω.txt | 1 - deps/npm/node_modules/tar/test/header.js | 183 --- deps/npm/node_modules/tar/test/pack.js | 953 ------------- deps/npm/node_modules/tar/test/parse.js | 359 ----- deps/npm/package.json | 12 +- deps/npm/test/common.js | 7 - .../test/disabled/bundlerecurs/package.json | 4 - deps/npm/test/disabled/failer/package.json | 5 - deps/npm/test/disabled/fast/package.json | 9 - .../test/disabled/package-config/package.json | 4 - deps/npm/test/disabled/package-config/test.js | 17 - deps/npm/test/disabled/slow/package.json | 9 - deps/npm/test/disabled/startstop/package.json | 3 - .../test/packages/npm-test-blerg/package.json | 4 - deps/npm/test/packages/npm-test-blerg/test.js | 5 - .../packages/npm-test-env-reader/package.json | 14 - .../test/packages/npm-test-env-reader/test.sh | 3 - .../npm-test-missing-bindir/package.json | 4 - .../packages/npm-test-missing-bindir/test.js | 5 - .../packages/npm-test-private/package.json | 4 - .../npm-test-test-package/package.json | 5 - .../packages/npm-test-url-dep/package.json | 4 - deps/npm/test/run | 138 -- deps/npm/test/update-test.sh | 59 - 138 files changed, 1633 insertions(+), 6822 deletions(-) create mode 100644 deps/npm/node_modules/abbrev/LICENSE delete mode 100644 deps/npm/node_modules/block-stream/bench/block-stream.js delete mode 100644 deps/npm/node_modules/block-stream/bench/dropper-pause.js delete mode 100644 deps/npm/node_modules/block-stream/bench/dropper.js delete mode 100644 deps/npm/node_modules/block-stream/test/basic.js delete mode 100644 deps/npm/node_modules/block-stream/test/nopad-thorough.js delete mode 100644 deps/npm/node_modules/block-stream/test/nopad.js delete mode 100644 deps/npm/node_modules/block-stream/test/pause-resume.js delete mode 100644 deps/npm/node_modules/block-stream/test/thorough.js create mode 100644 deps/npm/node_modules/fast-list/README.md create mode 100644 deps/npm/node_modules/fast-list/bench.js create mode 100644 deps/npm/node_modules/fast-list/fast-list.js create mode 100644 deps/npm/node_modules/fast-list/package.json delete mode 100644 deps/npm/node_modules/fstream/examples/pipe.js delete mode 100644 deps/npm/node_modules/fstream/examples/reader.js delete mode 100644 deps/npm/node_modules/fstream/examples/symlink-write.js delete mode 100644 deps/npm/node_modules/ini/test/fixtures/foo.ini delete mode 100644 deps/npm/node_modules/ini/test/foo.js delete mode 100644 deps/npm/node_modules/minimatch/test/basic.js delete mode 100644 deps/npm/node_modules/mkdirp/examples/pow.js delete mode 100644 deps/npm/node_modules/mkdirp/test/chmod.js delete mode 100644 deps/npm/node_modules/mkdirp/test/clobber.js delete mode 100644 deps/npm/node_modules/mkdirp/test/mkdirp.js delete mode 100644 deps/npm/node_modules/mkdirp/test/race.js delete mode 100644 deps/npm/node_modules/mkdirp/test/rel.js create mode 100644 deps/npm/node_modules/node-uuid/.gitignore create mode 100644 deps/npm/node_modules/node-uuid/benchmark/README.md create mode 100644 deps/npm/node_modules/node-uuid/benchmark/bench.gnu create mode 100755 deps/npm/node_modules/node-uuid/benchmark/bench.sh rename deps/npm/node_modules/node-uuid/{test => benchmark}/benchmark-native.c (100%) create mode 100644 deps/npm/node_modules/node-uuid/benchmark/benchmark.js delete mode 100644 deps/npm/node_modules/node-uuid/test/benchmark.js delete mode 100644 deps/npm/node_modules/node-uuid/test/test.html delete mode 100644 deps/npm/node_modules/node-uuid/test/test.js delete mode 100755 deps/npm/node_modules/nopt/examples/my-program.js create mode 100644 deps/npm/node_modules/request/oauth.js delete mode 100644 deps/npm/node_modules/request/tests/googledoodle.png delete mode 100755 deps/npm/node_modules/request/tests/run.sh delete mode 100644 deps/npm/node_modules/request/tests/server.js delete mode 100644 deps/npm/node_modules/request/tests/test-body.js delete mode 100644 deps/npm/node_modules/request/tests/test-errors.js delete mode 100644 deps/npm/node_modules/request/tests/test-pipes.js delete mode 100644 deps/npm/node_modules/request/tests/test-timeout.js create mode 100644 deps/npm/node_modules/request/uuid.js create mode 100644 deps/npm/node_modules/request/vendor/cookie/index.js create mode 100644 deps/npm/node_modules/request/vendor/cookie/jar.js delete mode 100644 deps/npm/node_modules/rimraf/test/run.sh delete mode 100644 deps/npm/node_modules/rimraf/test/setup.sh delete mode 100644 deps/npm/node_modules/rimraf/test/test-async.js delete mode 100644 deps/npm/node_modules/rimraf/test/test-fiber.js delete mode 100644 deps/npm/node_modules/rimraf/test/test-sync.js delete mode 100644 deps/npm/node_modules/semver/test.js delete mode 100644 deps/npm/node_modules/tar/examples/extracter.js delete mode 100644 deps/npm/node_modules/tar/examples/reader.js delete mode 100644 deps/npm/node_modules/tar/old/README.md delete mode 100644 deps/npm/node_modules/tar/old/doc/example.js delete mode 100644 deps/npm/node_modules/tar/old/generator.js delete mode 100644 deps/npm/node_modules/tar/old/parser.js delete mode 100644 deps/npm/node_modules/tar/old/tar.js delete mode 100644 deps/npm/node_modules/tar/old/test/test-generator.js delete mode 100644 deps/npm/node_modules/tar/old/test/test-generator.tar delete mode 100644 deps/npm/node_modules/tar/old/test/test-generator.txt delete mode 100644 deps/npm/node_modules/tar/old/test/test-parser.js delete mode 100644 deps/npm/node_modules/tar/old/test/test-tar.tar delete mode 100644 deps/npm/node_modules/tar/old/test/test-tar.txt delete mode 100644 deps/npm/node_modules/tar/test/extract.js delete mode 100644 deps/npm/node_modules/tar/test/fixtures/200.tar delete mode 100644 deps/npm/node_modules/tar/test/fixtures/200L.hex delete mode 100644 deps/npm/node_modules/tar/test/fixtures/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc delete mode 100644 deps/npm/node_modules/tar/test/fixtures/200longlink.tar delete mode 100644 deps/npm/node_modules/tar/test/fixtures/200longname.tar delete mode 100644 deps/npm/node_modules/tar/test/fixtures/a.hex delete mode 100644 deps/npm/node_modules/tar/test/fixtures/a.tar delete mode 100644 deps/npm/node_modules/tar/test/fixtures/a.txt delete mode 100644 deps/npm/node_modules/tar/test/fixtures/b.hex delete mode 100644 deps/npm/node_modules/tar/test/fixtures/b.tar delete mode 100644 deps/npm/node_modules/tar/test/fixtures/b.txt delete mode 100644 deps/npm/node_modules/tar/test/fixtures/c.hex delete mode 100644 deps/npm/node_modules/tar/test/fixtures/c.tar delete mode 100644 deps/npm/node_modules/tar/test/fixtures/c.txt delete mode 100644 deps/npm/node_modules/tar/test/fixtures/cc.txt delete mode 100644 deps/npm/node_modules/tar/test/fixtures/foo.hex delete mode 100644 deps/npm/node_modules/tar/test/fixtures/foo.js delete mode 100644 deps/npm/node_modules/tar/test/fixtures/foo.tar delete mode 100644 deps/npm/node_modules/tar/test/fixtures/hardlink-1 delete mode 100644 deps/npm/node_modules/tar/test/fixtures/hardlink-2 delete mode 100644 deps/npm/node_modules/tar/test/fixtures/omega.hex delete mode 100644 deps/npm/node_modules/tar/test/fixtures/omega.tar delete mode 100644 deps/npm/node_modules/tar/test/fixtures/omega.txt delete mode 100644 deps/npm/node_modules/tar/test/fixtures/omegapax.tar delete mode 100644 deps/npm/node_modules/tar/test/fixtures/packtest/omega.txt delete mode 100644 deps/npm/node_modules/tar/test/fixtures/packtest/star.4.html delete mode 100644 deps/npm/node_modules/tar/test/fixtures/packtest/Ω.txt delete mode 100644 deps/npm/node_modules/tar/test/fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc delete mode 120000 deps/npm/node_modules/tar/test/fixtures/symlink delete mode 100644 deps/npm/node_modules/tar/test/fixtures/Ω.txt delete mode 100644 deps/npm/node_modules/tar/test/header.js delete mode 100644 deps/npm/node_modules/tar/test/pack.js delete mode 100644 deps/npm/node_modules/tar/test/parse.js delete mode 100644 deps/npm/test/common.js delete mode 100644 deps/npm/test/disabled/bundlerecurs/package.json delete mode 100644 deps/npm/test/disabled/failer/package.json delete mode 100644 deps/npm/test/disabled/fast/package.json delete mode 100644 deps/npm/test/disabled/package-config/package.json delete mode 100755 deps/npm/test/disabled/package-config/test.js delete mode 100644 deps/npm/test/disabled/slow/package.json delete mode 100644 deps/npm/test/disabled/startstop/package.json delete mode 100644 deps/npm/test/packages/npm-test-blerg/package.json delete mode 100644 deps/npm/test/packages/npm-test-blerg/test.js delete mode 100644 deps/npm/test/packages/npm-test-env-reader/package.json delete mode 100755 deps/npm/test/packages/npm-test-env-reader/test.sh delete mode 100644 deps/npm/test/packages/npm-test-missing-bindir/package.json delete mode 100644 deps/npm/test/packages/npm-test-missing-bindir/test.js delete mode 100644 deps/npm/test/packages/npm-test-private/package.json delete mode 100644 deps/npm/test/packages/npm-test-test-package/package.json delete mode 100644 deps/npm/test/packages/npm-test-url-dep/package.json delete mode 100755 deps/npm/test/run delete mode 100755 deps/npm/test/update-test.sh diff --git a/deps/npm/.gitmodules b/deps/npm/.gitmodules index b629bd29361..7faf2ae1537 100644 --- a/deps/npm/.gitmodules +++ b/deps/npm/.gitmodules @@ -49,3 +49,6 @@ [submodule "node_modules/mkdirp"] path = node_modules/mkdirp url = git://github.com/isaacs/node-mkdirp.git +[submodule "node_modules/fast-list"] + path = node_modules/fast-list + url = git://github.com/isaacs/fast-list.git diff --git a/deps/npm/doc/cli/coding-style.md b/deps/npm/doc/cli/coding-style.md index f0640c85cd2..5315c575c18 100644 --- a/deps/npm/doc/cli/coding-style.md +++ b/deps/npm/doc/cli/coding-style.md @@ -155,16 +155,16 @@ Use appropriate log levels. The default log() function logs at the ## Case, naming, etc. -Use lowerCamelCase for multiword identifiers when they refer to objects, +Use `lowerCamelCase` for multiword identifiers when they refer to objects, functions, methods, members, or anything not specified in this section. -Use UpperCamelCase for class names (things that you'd pass to "new"). +Use `UpperCamelCase` for class names (things that you'd pass to "new"). -Use all-lower-hyphen-css-case for multiword filenames and config keys. +Use `all-lower-hyphen-css-case` for multiword filenames and config keys. Use named functions. They make stack traces easier to follow. -Use CAPS_SNAKE_CASE for constants, things that should never change +Use `CAPS_SNAKE_CASE` for constants, things that should never change and are rarely used. Use a single uppercase letter for function names where the function diff --git a/deps/npm/lib/completion.js b/deps/npm/lib/completion.js index bc97bf1af96..ebee003875a 100644 --- a/deps/npm/lib/completion.js +++ b/deps/npm/lib/completion.js @@ -20,7 +20,7 @@ var output = require("./utils/output.js") completion.completion = function (opts, cb) { if (opts.w > 3) return cb() - var fs = require("fs") + var fs = require("graceful-fs") , path = require("path") , bashExists = null , zshExists = null diff --git a/deps/npm/lib/utils/tar.js b/deps/npm/lib/utils/tar.js index d6db6ea5286..9d5f05210f6 100644 --- a/deps/npm/lib/utils/tar.js +++ b/deps/npm/lib/utils/tar.js @@ -76,16 +76,10 @@ function packFiles (targetTarball, parent, files, pkg, cb) { , path: parent , filter: function () { return -1 !== files.indexOf(this.path) - // || (this.type === "Directory" && - // this.basename !== ".git") - } }) .on("error", log.er(cb, "error reading "+parent)) - .on("entry", function E (entry) { - entry.on("entry", E) - }) - .pipe(tar.Pack({})) + .pipe(tar.Pack()) .on("error", log.er(cb, "tar creation error "+targetTarball)) .pipe(zlib.Gzip()) .on("error", log.er(cb, "gzip error "+targetTarball)) @@ -155,8 +149,9 @@ function gunzTarPerm (tarball, tmp, dMode, fMode, uid, gid, cb) { log.silly([dMode.toString(8), fMode.toString(8)], "gunzTarPerm modes") fs.createReadStream(tarball) + .on("error", log.er(cb, "error reading "+tarball)) .pipe(zlib.Unzip()) - .on("error", log.er(cb, "unzip error")) + .on("error", log.er(cb, "unzip error "+tarball)) .pipe(tar.Extract({ type: "Directory", path: tmp })) .on("error", log.er(cb, "Failed unpacking "+tarball)) .on("close", afterUntar) @@ -165,6 +160,7 @@ function gunzTarPerm (tarball, tmp, dMode, fMode, uid, gid, cb) { // XXX Do all this in an Extract filter. // function afterUntar (er) { + log.silly(er, "afterUntar") // if we're not doing ownership management, // then we're done now. if (er) return log.er(cb, "Failed unpacking "+tarball)(er) diff --git a/deps/npm/node_modules/abbrev/LICENSE b/deps/npm/node_modules/abbrev/LICENSE new file mode 100644 index 00000000000..05a4010949c --- /dev/null +++ b/deps/npm/node_modules/abbrev/LICENSE @@ -0,0 +1,23 @@ +Copyright 2009, 2010, 2011 Isaac Z. Schlueter. +All rights reserved. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/deps/npm/node_modules/abbrev/package.json b/deps/npm/node_modules/abbrev/package.json index ebd082f5dd1..045cbd4b29d 100644 --- a/deps/npm/node_modules/abbrev/package.json +++ b/deps/npm/node_modules/abbrev/package.json @@ -5,4 +5,7 @@ , "main" : "./lib/abbrev.js" , "scripts" : { "test" : "node lib/abbrev.js" } , "repository" : "http://github.com/isaacs/abbrev-js" +, "license" : + { "type" : "MIT" + , "url" : "https://github.com/isaacs/abbrev-js/raw/master/LICENSE" } } diff --git a/deps/npm/node_modules/block-stream/bench/block-stream.js b/deps/npm/node_modules/block-stream/bench/block-stream.js deleted file mode 100644 index 1141f3a84c2..00000000000 --- a/deps/npm/node_modules/block-stream/bench/block-stream.js +++ /dev/null @@ -1,68 +0,0 @@ -var BlockStream = require("../block-stream.js") - -var blockSizes = [16, 25, 1024] - , writeSizes = [4, 8, 15, 16, 17, 64, 100] - , writeCounts = [1, 10, 100] - , tap = require("tap") - -writeCounts.forEach(function (writeCount) { -blockSizes.forEach(function (blockSize) { -writeSizes.forEach(function (writeSize) { - tap.test("writeSize=" + writeSize + - " blockSize="+blockSize + - " writeCount="+writeCount, function (t) { - var f = new BlockStream(blockSize, {nopad: true }) - - var actualChunks = 0 - var actualBytes = 0 - var timeouts = 0 - - f.on("data", function (c) { - timeouts ++ - - actualChunks ++ - actualBytes += c.length - - // make sure that no data gets corrupted, and basic sanity - var before = c.toString() - // simulate a slow write operation - setTimeout(function () { - timeouts -- - - var after = c.toString() - t.equal(after, before, "should not change data") - - // now corrupt it, to find leaks. - for (var i = 0; i < c.length; i ++) { - c[i] = "x".charCodeAt(0) - } - }, 100) - }) - - f.on("end", function () { - // round up to the nearest block size - var expectChunks = Math.ceil(writeSize * writeCount * 2 / blockSize) - var expectBytes = writeSize * writeCount * 2 - t.equal(actualBytes, expectBytes, - "bytes=" + expectBytes + " writeSize=" + writeSize) - t.equal(actualChunks, expectChunks, - "chunks=" + expectChunks + " writeSize=" + writeSize) - - // wait for all the timeout checks to finish, then end the test - setTimeout(function WAIT () { - if (timeouts > 0) return setTimeout(WAIT) - t.end() - }, 100) - }) - - for (var i = 0; i < writeCount; i ++) { - var a = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) a[j] = "a".charCodeAt(0) - var b = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) b[j] = "b".charCodeAt(0) - f.write(a) - f.write(b) - } - f.end() - }) -}) }) }) diff --git a/deps/npm/node_modules/block-stream/bench/dropper-pause.js b/deps/npm/node_modules/block-stream/bench/dropper-pause.js deleted file mode 100644 index 93e4068eea0..00000000000 --- a/deps/npm/node_modules/block-stream/bench/dropper-pause.js +++ /dev/null @@ -1,70 +0,0 @@ -var BlockStream = require("dropper") - -var blockSizes = [16, 25, 1024] - , writeSizes = [4, 8, 15, 16, 17, 64, 100] - , writeCounts = [1, 10, 100] - , tap = require("tap") - -writeCounts.forEach(function (writeCount) { -blockSizes.forEach(function (blockSize) { -writeSizes.forEach(function (writeSize) { - tap.test("writeSize=" + writeSize + - " blockSize="+blockSize + - " writeCount="+writeCount, function (t) { - var f = new BlockStream(blockSize, {nopad: true }) - - var actualChunks = 0 - var actualBytes = 0 - var timeouts = 0 - - f.on("data", function (c) { - timeouts ++ - - actualChunks ++ - actualBytes += c.length - - // make sure that no data gets corrupted, and basic sanity - var before = c.toString() - // simulate a slow write operation - f.pause() - setTimeout(function () { - timeouts -- - - var after = c.toString() - t.equal(after, before, "should not change data") - - // now corrupt it, to find leaks. - for (var i = 0; i < c.length; i ++) { - c[i] = "x".charCodeAt(0) - } - f.resume() - }, 100) - }) - - f.on("end", function () { - // round up to the nearest block size - var expectChunks = Math.ceil(writeSize * writeCount * 2 / blockSize) - var expectBytes = writeSize * writeCount * 2 - t.equal(actualBytes, expectBytes, - "bytes=" + expectBytes + " writeSize=" + writeSize) - t.equal(actualChunks, expectChunks, - "chunks=" + expectChunks + " writeSize=" + writeSize) - - // wait for all the timeout checks to finish, then end the test - setTimeout(function WAIT () { - if (timeouts > 0) return setTimeout(WAIT) - t.end() - }, 100) - }) - - for (var i = 0; i < writeCount; i ++) { - var a = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) a[j] = "a".charCodeAt(0) - var b = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) b[j] = "b".charCodeAt(0) - f.write(a) - f.write(b) - } - f.end() - }) -}) }) }) diff --git a/deps/npm/node_modules/block-stream/bench/dropper.js b/deps/npm/node_modules/block-stream/bench/dropper.js deleted file mode 100644 index 55fa1330545..00000000000 --- a/deps/npm/node_modules/block-stream/bench/dropper.js +++ /dev/null @@ -1,68 +0,0 @@ -var BlockStream = require("dropper") - -var blockSizes = [16, 25, 1024] - , writeSizes = [4, 8, 15, 16, 17, 64, 100] - , writeCounts = [1, 10, 100] - , tap = require("tap") - -writeCounts.forEach(function (writeCount) { -blockSizes.forEach(function (blockSize) { -writeSizes.forEach(function (writeSize) { - tap.test("writeSize=" + writeSize + - " blockSize="+blockSize + - " writeCount="+writeCount, function (t) { - var f = new BlockStream(blockSize, {nopad: true }) - - var actualChunks = 0 - var actualBytes = 0 - var timeouts = 0 - - f.on("data", function (c) { - timeouts ++ - - actualChunks ++ - actualBytes += c.length - - // make sure that no data gets corrupted, and basic sanity - var before = c.toString() - // simulate a slow write operation - setTimeout(function () { - timeouts -- - - var after = c.toString() - t.equal(after, before, "should not change data") - - // now corrupt it, to find leaks. - for (var i = 0; i < c.length; i ++) { - c[i] = "x".charCodeAt(0) - } - }, 100) - }) - - f.on("end", function () { - // round up to the nearest block size - var expectChunks = Math.ceil(writeSize * writeCount * 2 / blockSize) - var expectBytes = writeSize * writeCount * 2 - t.equal(actualBytes, expectBytes, - "bytes=" + expectBytes + " writeSize=" + writeSize) - t.equal(actualChunks, expectChunks, - "chunks=" + expectChunks + " writeSize=" + writeSize) - - // wait for all the timeout checks to finish, then end the test - setTimeout(function WAIT () { - if (timeouts > 0) return setTimeout(WAIT) - t.end() - }, 100) - }) - - for (var i = 0; i < writeCount; i ++) { - var a = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) a[j] = "a".charCodeAt(0) - var b = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) b[j] = "b".charCodeAt(0) - f.write(a) - f.write(b) - } - f.end() - }) -}) }) }) diff --git a/deps/npm/node_modules/block-stream/test/basic.js b/deps/npm/node_modules/block-stream/test/basic.js deleted file mode 100644 index b4b930511e1..00000000000 --- a/deps/npm/node_modules/block-stream/test/basic.js +++ /dev/null @@ -1,27 +0,0 @@ -var tap = require("tap") - , BlockStream = require("../block-stream.js") - -tap.test("basic test", function (t) { - var b = new BlockStream(16) - var fs = require("fs") - var fstr = fs.createReadStream(__filename, {encoding: "utf8"}) - fstr.pipe(b) - - var stat - t.doesNotThrow(function () { - stat = fs.statSync(__filename) - }, "stat should not throw") - - var totalBytes = 0 - b.on("data", function (c) { - t.equal(c.length, 16, "chunks should be 16 bytes long") - t.type(c, Buffer, "chunks should be buffer objects") - totalBytes += c.length - }) - b.on("end", function () { - var expectedBytes = stat.size + (16 - stat.size % 16) - t.equal(totalBytes, expectedBytes, "Should be multiple of 16") - t.end() - }) - -}) diff --git a/deps/npm/node_modules/block-stream/test/nopad-thorough.js b/deps/npm/node_modules/block-stream/test/nopad-thorough.js deleted file mode 100644 index 1141f3a84c2..00000000000 --- a/deps/npm/node_modules/block-stream/test/nopad-thorough.js +++ /dev/null @@ -1,68 +0,0 @@ -var BlockStream = require("../block-stream.js") - -var blockSizes = [16, 25, 1024] - , writeSizes = [4, 8, 15, 16, 17, 64, 100] - , writeCounts = [1, 10, 100] - , tap = require("tap") - -writeCounts.forEach(function (writeCount) { -blockSizes.forEach(function (blockSize) { -writeSizes.forEach(function (writeSize) { - tap.test("writeSize=" + writeSize + - " blockSize="+blockSize + - " writeCount="+writeCount, function (t) { - var f = new BlockStream(blockSize, {nopad: true }) - - var actualChunks = 0 - var actualBytes = 0 - var timeouts = 0 - - f.on("data", function (c) { - timeouts ++ - - actualChunks ++ - actualBytes += c.length - - // make sure that no data gets corrupted, and basic sanity - var before = c.toString() - // simulate a slow write operation - setTimeout(function () { - timeouts -- - - var after = c.toString() - t.equal(after, before, "should not change data") - - // now corrupt it, to find leaks. - for (var i = 0; i < c.length; i ++) { - c[i] = "x".charCodeAt(0) - } - }, 100) - }) - - f.on("end", function () { - // round up to the nearest block size - var expectChunks = Math.ceil(writeSize * writeCount * 2 / blockSize) - var expectBytes = writeSize * writeCount * 2 - t.equal(actualBytes, expectBytes, - "bytes=" + expectBytes + " writeSize=" + writeSize) - t.equal(actualChunks, expectChunks, - "chunks=" + expectChunks + " writeSize=" + writeSize) - - // wait for all the timeout checks to finish, then end the test - setTimeout(function WAIT () { - if (timeouts > 0) return setTimeout(WAIT) - t.end() - }, 100) - }) - - for (var i = 0; i < writeCount; i ++) { - var a = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) a[j] = "a".charCodeAt(0) - var b = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) b[j] = "b".charCodeAt(0) - f.write(a) - f.write(b) - } - f.end() - }) -}) }) }) diff --git a/deps/npm/node_modules/block-stream/test/nopad.js b/deps/npm/node_modules/block-stream/test/nopad.js deleted file mode 100644 index 6d38429fbc7..00000000000 --- a/deps/npm/node_modules/block-stream/test/nopad.js +++ /dev/null @@ -1,57 +0,0 @@ -var BlockStream = require("../") -var tap = require("tap") - - -tap.test("don't pad, small writes", function (t) { - var f = new BlockStream(16, { nopad: true }) - t.plan(1) - - f.on("data", function (c) { - t.equal(c.toString(), "abc", "should get 'abc'") - }) - - f.on("end", function () { t.end() }) - - f.write(new Buffer("a")) - f.write(new Buffer("b")) - f.write(new Buffer("c")) - f.end() -}) - -tap.test("don't pad, exact write", function (t) { - var f = new BlockStream(16, { nopad: true }) - t.plan(1) - - var first = true - f.on("data", function (c) { - if (first) { - first = false - t.equal(c.toString(), "abcdefghijklmnop", "first chunk") - } else { - t.fail("should only get one") - } - }) - - f.on("end", function () { t.end() }) - - f.end(new Buffer("abcdefghijklmnop")) -}) - -tap.test("don't pad, big write", function (t) { - var f = new BlockStream(16, { nopad: true }) - t.plan(2) - - var first = true - f.on("data", function (c) { - if (first) { - first = false - t.equal(c.toString(), "abcdefghijklmnop", "first chunk") - } else { - t.equal(c.toString(), "q") - } - }) - - f.on("end", function () { t.end() }) - - f.end(new Buffer("abcdefghijklmnopq")) -}) diff --git a/deps/npm/node_modules/block-stream/test/pause-resume.js b/deps/npm/node_modules/block-stream/test/pause-resume.js deleted file mode 100644 index 248cf9cbd5e..00000000000 --- a/deps/npm/node_modules/block-stream/test/pause-resume.js +++ /dev/null @@ -1,73 +0,0 @@ -var BlockStream = require("../block-stream.js") - -var blockSizes = [16] - , writeSizes = [15, 16, 17] - , writeCounts = [1, 10, 100] - , tap = require("tap") - -writeCounts.forEach(function (writeCount) { -blockSizes.forEach(function (blockSize) { -writeSizes.forEach(function (writeSize) { - tap.test("writeSize=" + writeSize + - " blockSize="+blockSize + - " writeCount="+writeCount, function (t) { - var f = new BlockStream(blockSize) - - var actualChunks = 0 - var actualBytes = 0 - var timeouts = 0 - var paused = false - - f.on("data", function (c) { - timeouts ++ - t.notOk(paused, "should not be paused when emitting data") - - actualChunks ++ - actualBytes += c.length - - // make sure that no data gets corrupted, and basic sanity - var before = c.toString() - // simulate a slow write operation - paused = true - f.pause() - process.nextTick(function () { - var after = c.toString() - t.equal(after, before, "should not change data") - - // now corrupt it, to find leaks. - for (var i = 0; i < c.length; i ++) { - c[i] = "x".charCodeAt(0) - } - paused = false - f.resume() - timeouts -- - }) - }) - - f.on("end", function () { - // round up to the nearest block size - var expectChunks = Math.ceil(writeSize * writeCount * 2 / blockSize) - var expectBytes = expectChunks * blockSize - t.equal(actualBytes, expectBytes, - "bytes=" + expectBytes + " writeSize=" + writeSize) - t.equal(actualChunks, expectChunks, - "chunks=" + expectChunks + " writeSize=" + writeSize) - - // wait for all the timeout checks to finish, then end the test - setTimeout(function WAIT () { - if (timeouts > 0) return setTimeout(WAIT) - t.end() - }, 200) - }) - - for (var i = 0; i < writeCount; i ++) { - var a = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) a[j] = "a".charCodeAt(0) - var b = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) b[j] = "b".charCodeAt(0) - f.write(a) - f.write(b) - } - f.end() - }) -}) }) }) diff --git a/deps/npm/node_modules/block-stream/test/thorough.js b/deps/npm/node_modules/block-stream/test/thorough.js deleted file mode 100644 index 4ab14ff2087..00000000000 --- a/deps/npm/node_modules/block-stream/test/thorough.js +++ /dev/null @@ -1,68 +0,0 @@ -var BlockStream = require("../block-stream.js") - -var blockSizes = [16, 25, 1024] - , writeSizes = [4, 8, 15, 16, 17, 64, 100] - , writeCounts = [1, 10, 100] - , tap = require("tap") - -writeCounts.forEach(function (writeCount) { -blockSizes.forEach(function (blockSize) { -writeSizes.forEach(function (writeSize) { - tap.test("writeSize=" + writeSize + - " blockSize="+blockSize + - " writeCount="+writeCount, function (t) { - var f = new BlockStream(blockSize) - - var actualChunks = 0 - var actualBytes = 0 - var timeouts = 0 - - f.on("data", function (c) { - timeouts ++ - - actualChunks ++ - actualBytes += c.length - - // make sure that no data gets corrupted, and basic sanity - var before = c.toString() - // simulate a slow write operation - setTimeout(function () { - timeouts -- - - var after = c.toString() - t.equal(after, before, "should not change data") - - // now corrupt it, to find leaks. - for (var i = 0; i < c.length; i ++) { - c[i] = "x".charCodeAt(0) - } - }, 100) - }) - - f.on("end", function () { - // round up to the nearest block size - var expectChunks = Math.ceil(writeSize * writeCount * 2 / blockSize) - var expectBytes = expectChunks * blockSize - t.equal(actualBytes, expectBytes, - "bytes=" + expectBytes + " writeSize=" + writeSize) - t.equal(actualChunks, expectChunks, - "chunks=" + expectChunks + " writeSize=" + writeSize) - - // wait for all the timeout checks to finish, then end the test - setTimeout(function WAIT () { - if (timeouts > 0) return setTimeout(WAIT) - t.end() - }, 100) - }) - - for (var i = 0; i < writeCount; i ++) { - var a = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) a[j] = "a".charCodeAt(0) - var b = new Buffer(writeSize); - for (var j = 0; j < writeSize; j ++) b[j] = "b".charCodeAt(0) - f.write(a) - f.write(b) - } - f.end() - }) -}) }) }) diff --git a/deps/npm/node_modules/fast-list/README.md b/deps/npm/node_modules/fast-list/README.md new file mode 100644 index 00000000000..3340f4bdbaf --- /dev/null +++ b/deps/npm/node_modules/fast-list/README.md @@ -0,0 +1,111 @@ +# The Problem + +You've got some thing where you need to push a bunch of stuff into a +queue and then shift it out. Or, maybe it's a stack, and you're just +pushing and popping it. + +Arrays work for this, but are a bit costly performance-wise. + +# The Solution + +A linked-list implementation that takes advantage of what v8 is good at: +creating objects with a known shape. + +This is faster for this use case. How much faster? About 50%. + + $ node bench.js + benchmarking /Users/isaacs/dev-src/js/fast-list/bench.js + Please be patient. + { node: '0.6.2-pre', + v8: '3.6.6.8', + ares: '1.7.5-DEV', + uv: '0.1', + openssl: '0.9.8l' } + Scores: (bigger is better) + + new FastList() + Raw: + > 22556.39097744361 + > 23054.755043227666 + > 22770.398481973436 + > 23414.634146341465 + > 23099.133782483157 + Average (mean) 22979.062486293868 + + [] + Raw: + > 12195.121951219513 + > 12184.508268059182 + > 12173.91304347826 + > 12216.404886561955 + > 12184.508268059182 + Average (mean) 12190.891283475617 + + new Array() + Raw: + > 12131.715771230503 + > 12184.508268059182 + > 12216.404886561955 + > 12195.121951219513 + > 11940.298507462687 + Average (mean) 12133.609876906768 + + Winner: new FastList() + Compared with next highest ([]), it's: + 46.95% faster + 1.88 times as fast + 0.28 order(s) of magnitude faster + + Compared with the slowest (new Array()), it's: + 47.2% faster + 1.89 times as fast + 0.28 order(s) of magnitude faster + +This lacks a lot of features that arrays have: + +1. You can't specify the size at the outset. +2. It's not indexable. +3. There's no join, concat, etc. + +If any of this matters for your use case, you're probably better off +using an Array object. + +## Installing + +``` +npm install fast-list +``` + +## API + +```javascript +var FastList = require("fast-list") +var list = new FastList() +list.push("foo") +list.unshift("bar") +list.push("baz") +console.log(list.length) // 2 +console.log(list.pop()) // baz +console.log(list.shift()) // bar +console.log(list.shift()) // foo +``` + +### Methods + +* `push`: Just like Array.push, but only can take a single entry +* `pop`: Just like Array.pop +* `shift`: Just like Array.shift +* `unshift`: Just like Array.unshift, but only can take a single entry +* `drop`: Drop all entries +* `item(n)`: Retrieve the nth item in the list. This involves a walk + every time. It's very slow. If you find yourself using this, + consider using a normal Array instead. +* `slice(start, end)`: Retrieve an array of the items at this position. + This involves a walk every time. It's very slow. If you find + yourself using this, consider using a normal Array instead. + +### Members + +* `length`: The number of things in the list. Note that, unlike + Array.length, this is not a getter/setter, but rather a counter that + is internally managed. Setting it can only cause harm. diff --git a/deps/npm/node_modules/fast-list/bench.js b/deps/npm/node_modules/fast-list/bench.js new file mode 100644 index 00000000000..f15450f22d8 --- /dev/null +++ b/deps/npm/node_modules/fast-list/bench.js @@ -0,0 +1,55 @@ +var bench = require("bench") + +var l = 1000 + , FastList = require("./fast-list.js") + +exports.countPerLap = l * 2 + +exports.compare = + { "[]": function () { + var list = [] + for (var j = 0; j < l; j ++) { + if (j % 2) list.push(j) + else list.unshift(j) + } + for (var j = 0; j < l; j ++) { + if (j % 2) list.shift(j) + else list.pop(j) + } + } + , "new Array()": function () { + var list = new Array() + for (var j = 0; j < l; j ++) { + if (j % 2) list.push(j) + else list.unshift(j) + } + for (var j = 0; j < l; j ++) { + if (j % 2) list.shift(j) + else list.pop(j) + } + } + // , "FastList()": function () { + // var list = FastList() + // for (var j = 0; j < l; j ++) { + // if (j % 2) list.push(j) + // else list.unshift(j) + // } + // for (var j = 0; j < l; j ++) { + // if (j % 2) list.shift(j) + // else list.pop(j) + // } + // } + , "new FastList()": function () { + var list = new FastList() + for (var j = 0; j < l; j ++) { + if (j % 2) list.push(j) + else list.unshift(j) + } + for (var j = 0; j < l; j ++) { + if (j % 2) list.shift(j) + else list.pop(j) + } + } + } + +bench.runMain() diff --git a/deps/npm/node_modules/fast-list/fast-list.js b/deps/npm/node_modules/fast-list/fast-list.js new file mode 100644 index 00000000000..57168784665 --- /dev/null +++ b/deps/npm/node_modules/fast-list/fast-list.js @@ -0,0 +1,90 @@ +;(function() { // closure for web browsers + +function Item (data, prev, next) { + this.next = next + if (next) next.prev = this + this.prev = prev + if (prev) prev.next = this + this.data = data +} + +function FastList () { + if (!(this instanceof FastList)) return new FastList + this._head = null + this._tail = null + this.length = 0 +} + +FastList.prototype = +{ push: function (data) { + this._tail = new Item(data, this._tail, null) + if (!this._head) this._head = this._tail + this.length ++ + } +, pop: function () { + if (this.length === 0) return undefined + var t = this._tail + this._tail = t.prev + if (t.prev) { + t.prev = this._tail.next = null + } + this.length -- + if (this.length === 1) this._head = this._tail + else if (this.length === 0) this._head = this._tail = null + return t.data + } +, unshift: function (data) { + this._head = new Item(data, null, this._head) + if (!this._tail) this._tail = this._head + this.length ++ + } +, shift: function () { + if (this.length === 0) return undefined + var h = this._head + this._head = h.next + if (h.next) { + h.next = this._head.prev = null + } + this.length -- + if (this.length === 1) this._tail = this._head + else if (this.length === 0) this._head = this._tail = null + return h.data + } +, item: function (n) { + if (n < 0) n = this.length + n + var h = this._head + while (n-- > 0 && h) h = h.next + return h ? h.data : undefined + } +, slice: function (n, m) { + if (!n) n = 0 + if (!m) m = this.length + if (m < 0) m = this.length + m + if (n < 0) n = this.length + n + + if (m <= n) { + throw new Error("invalid offset: "+n+","+m) + } + + var len = m - n + , ret = new Array(len) + , i = 0 + , h = this._head + while (n-- > 0 && h) h = h.next + while (i < len && h) { + ret[i++] = h.data + h = h.next + } + return ret + } +, drop: function () { + FastList.call(this) + } +} + +if ("undefined" !== typeof(exports)) module.exports = FastList +else if ("function" === typeof(define) && define.amd) { + define("FastList", function() { return FastList }) +} else (function () { return this })().FastList = FastList + +})() diff --git a/deps/npm/node_modules/fast-list/package.json b/deps/npm/node_modules/fast-list/package.json new file mode 100644 index 00000000000..1a8fd650cc5 --- /dev/null +++ b/deps/npm/node_modules/fast-list/package.json @@ -0,0 +1,20 @@ +{ + "author": "Isaac Z. Schlueter (http://blog.izs.me/)", + "name": "fast-list", + "description": "A fast linked list (good for queues, stacks, etc.)", + "version": "1.0.1", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/fast-list.git" + }, + "main": "fast-list.js", + "dependencies": {}, + "devDependencies": { + "bench": "~0.3.2", + "tap": "~0.1.0" + }, + "scripts": { + "test": "node test.js", + "bench": "node bench.js" + } +} diff --git a/deps/npm/node_modules/fstream/examples/pipe.js b/deps/npm/node_modules/fstream/examples/pipe.js deleted file mode 100644 index b08d79481b4..00000000000 --- a/deps/npm/node_modules/fstream/examples/pipe.js +++ /dev/null @@ -1,113 +0,0 @@ -var fstream = require("../fstream.js") -var path = require("path") - -var r = fstream.Reader({ path: path.dirname(__dirname) - , filter: function () { - return !this.basename.match(/^\./) && - !this.basename.match(/^node_modules$/) - !this.basename.match(/^deep-copy$/) - } - }) - -var w = fstream.Writer({ path: path.resolve(__dirname, "deep-copy") - , type: "Directory" - }) - -var indent = "" -var escape = {} - -r.on("entry", appears) -//r.on("ready", function () { -// appears(r) -//}) - -function appears (entry) { - console.error(indent + "a %s appears!", entry.type, entry.basename) - if (foggy) { - console.error("FOGGY!") - var p = entry - do { - console.error(p.depth, p.path, p._paused) - } while (p = p.parent) - - throw new Error("\033[mshould not have entries while foggy") - } - indent += "\t" - entry.on("data", missile(entry)) - entry.on("end", runaway(entry)) - entry.on("entry", appears) -} - -var foggy -function missile (entry) { - if (entry.type === "Directory") { - var ended = false - entry.once("end", function () { ended = true }) - return function (c) { - // throw in some pathological pause()/resume() behavior - // just for extra fun. - process.nextTick(function () { - if (!foggy && !ended) { // && Math.random() < 0.3) { - console.error(indent +"%s casts a spell", entry.basename) - console.error("\na slowing fog comes over the battlefield...\n\033[32m") - entry.pause() - entry.once("resume", liftFog) - foggy = setTimeout(liftFog, 10) - - function liftFog (who) { - if (!foggy) return - if (who) { - console.error("%s breaks the spell!", who && who.path) - } else { - console.error("the spell expires!") - } - console.error("\033[mthe fog lifts!\n") - clearTimeout(foggy) - foggy = null - if (entry._paused) entry.resume() - } - - } - }) - } - } - - return function (c) { - var e = Math.random() < 0.5 - console.error(indent + "%s %s for %d damage!", - entry.basename, - e ? "is struck" : "fires a chunk", - c.length) - } -} - -function runaway (entry) { return function () { - var e = Math.random() < 0.5 - console.error(indent + "%s %s", - entry.basename, - e ? "turns to flee" : "is vanquished!") - indent = indent.slice(0, -1) -}} - - -w.on("entry", attacks) -//w.on("ready", function () { attacks(w) }) -function attacks (entry) { - console.error(indent + "%s %s!", entry.basename, - entry.type === "Directory" ? "calls for backup" : "attacks") - entry.on("entry", attacks) -} - -ended = false -r.on("end", function () { - if (foggy) clearTimeout(foggy) - console.error("\033[mIT'S OVER!!") - console.error("A WINNAR IS YOU!") - ended = true -}) - -process.on("exit", function () { - console.error("ended? "+ended) -}) -r.pipe(w) - diff --git a/deps/npm/node_modules/fstream/examples/reader.js b/deps/npm/node_modules/fstream/examples/reader.js deleted file mode 100644 index 73075102f44..00000000000 --- a/deps/npm/node_modules/fstream/examples/reader.js +++ /dev/null @@ -1,29 +0,0 @@ -var fstream = require("../fstream.js") -var path = require("path") - -var r = fstream.Reader({ path: path.dirname(__dirname) - , filter: function () { - return !this.basename.match(/^\./) - } - }) - -console.error(r instanceof fstream.Reader) -console.error(r instanceof require("stream").Stream) -console.error(r instanceof require("events").EventEmitter) -console.error(r.on) - -r.on("stat", function () { - console.error("a %s !!!\t", r.type, r.path) -}) - -r.on("entries", function (entries) { - console.error("\t" + entries.join("\n\t")) -}) - -r.on("entry", function (entry) { - console.error("a %s !!!\t", entry.type, entry.path) -}) - -r.on("end", function () { - console.error("IT'S OVER!!") -}) diff --git a/deps/npm/node_modules/fstream/examples/symlink-write.js b/deps/npm/node_modules/fstream/examples/symlink-write.js deleted file mode 100644 index 657375b9886..00000000000 --- a/deps/npm/node_modules/fstream/examples/symlink-write.js +++ /dev/null @@ -1,9 +0,0 @@ -var fstream = require("../fstream.js") - -fstream - .Writer({ path: "path/to/symlink" - , linkpath: "./file" - , isSymbolicLink: true - , mode: "0755" // octal strings supported - }) - .end() diff --git a/deps/npm/node_modules/fstream/lib/writer.js b/deps/npm/node_modules/fstream/lib/writer.js index f280963aa1d..4097b5b784b 100644 --- a/deps/npm/node_modules/fstream/lib/writer.js +++ b/deps/npm/node_modules/fstream/lib/writer.js @@ -246,17 +246,7 @@ Writer.prototype._finish = function () { ? "utimes" : "lutimes" if (utimes === "lutimes" && !fs[utimes]) { - if (!fs.futimes) fs.ltimes = function (a, b, c, cb) { return cb() } - else fs.lutimes = function (path, atime, mtime, cb) { - var c = require("constants") - fs.open(path, c.O_SYMLINK, function (er, fd) { - if (er) return cb(er) - fs.futimes(fd, atime, mtime, function (er) { - if (er) return cb(er) - fs.close(fd, cb) - }) - }) - } + utimes = "utimes" } var curA = current.atime diff --git a/deps/npm/node_modules/fstream/package.json b/deps/npm/node_modules/fstream/package.json index 22d5821f627..db4b76741f6 100644 --- a/deps/npm/node_modules/fstream/package.json +++ b/deps/npm/node_modules/fstream/package.json @@ -2,19 +2,19 @@ "author": "Isaac Z. Schlueter (http://blog.izs.me/)", "name": "fstream", "description": "Advanced file system stream things", - "version": "0.0.1", + "version": "0.1.1", "repository": { "type": "git", "url": "git://github.com/isaacs/fstream.git" }, "main": "fstream.js", "engines": { - "node": "0.5 || 0.6" + "node": "0.5 || 0.6 || 0.7" }, "dependencies": { "rimraf": "~1.0.8", "mkdirp": "~0.1.0", - "graceful-fs": "~1.0.1", + "graceful-fs": "1.1", "inherits": "~1.0.0" }, "devDependencies": {} diff --git a/deps/npm/node_modules/graceful-fs/graceful-fs.js b/deps/npm/node_modules/graceful-fs/graceful-fs.js index 08e99b24b05..9b8492ac137 100644 --- a/deps/npm/node_modules/graceful-fs/graceful-fs.js +++ b/deps/npm/node_modules/graceful-fs/graceful-fs.js @@ -1,39 +1,189 @@ -// wrapper around the non-sync fs functions to gracefully handle -// having too many file descriptors open. Note that this is -// *only* possible because async patterns let one interject timeouts -// and other cleverness anywhere in the process without disrupting -// anything else. +// this keeps a queue of opened file descriptors, and will make +// fs operations wait until some have closed before trying to open more. var fs = require("fs") - , timeout = 0 + , FastList = require("fast-list") + , queue = new FastList() + , curOpen = 0 + , constants = require("constants") -Object.keys(fs) - .forEach(function (i) { - exports[i] = (typeof fs[i] !== "function") ? fs[i] - : (i.match(/^[A-Z]|^create|Sync$/)) ? function () { - return fs[i].apply(fs, arguments) - } - : graceful(fs[i]) - }) +exports = module.exports = fs -if (process.platform === "win32" - && !process.binding("fs").lstat) { - exports.lstat = exports.stat - exports.lstatSync = exports.statSync +fs.MAX_OPEN = 256 + +fs._open = fs.open +fs._openSync = fs.openSync +fs._close = fs.close +fs._closeSync = fs.closeSync + + +// lstat on windows, missing from early 0.5 versions +if (process.platform === "win32" && !process.binding("fs").lstat) { + fs.lstat = fs.stat + fs.lstatSync = fs.statSync } -function graceful (fn) { return function GRACEFUL () { - var args = Array.prototype.slice.call(arguments) - , cb_ = args.pop() - args.push(cb) - function cb (er) { - if (er && er.message.match(/^EMFILE, Too many open files/)) { - setTimeout(function () { - GRACEFUL.apply(fs, args) - }, timeout ++) - return - } - timeout = 0 - cb_.apply(null, arguments) +// lutimes +var constants = require("constants") +if (!fs.lutimes) fs.lutimes = function (path, at, mt, cb) { + fs.open(path, constants.O_SYMLINK, function (er, fd) { + cb = cb || noop + if (er) return cb(er) + fs.futimes(fd, at, mt, function (er) { + if (er) { + fs.close(fd, function () {}) + return cb(er) + } + fs.close(fd, cb) + }) + }) +} + +if (!fs.lutimesSync) fs.lutimesSync = function (path, at, mt) { + var fd = fs.openSync(path, constants.O_SYMLINK) + fs.futimesSync(fd, at, mt) + fs.closeSync(fd) +} + + +// prevent EMFILE errors +function OpenReq (path, flags, mode, cb) { + this.path = path + this.flags = flags + this.mode = mode + this.cb = cb +} + +function noop () {} + +fs.open = function (path, flags, mode, cb) { + if (typeof mode === "function") cb = mode, mode = null + if (typeof cb !== "function") cb = noop + + if (curOpen >= fs.MAX_OPEN) { + queue.push(new OpenReq(path, flags, mode, cb)) + setTimeout(flush) + return } - fn.apply(fs, args) -}} + open(path, flags, mode, cb) +} + +function open (path, flags, mode, cb) { + cb = cb || noop + curOpen ++ + fs._open(path, flags, mode, function (er, fd) { + if (er) { + onclose() + } + + cb(er, fd) + }) +} + +fs.openSync = function (path, flags, mode) { + curOpen ++ + return fs._openSync(path, flags, mode) +} + +function onclose () { + curOpen -- + flush() +} + +function flush () { + while (curOpen < fs.MAX_OPEN) { + var req = queue.shift() + if (!req) break + open(req.path, req.flags, req.mode, req.cb) + } + if (queue.length === 0) return +} + +fs.close = function (fd, cb) { + cb = cb || noop + fs._close(fd, function (er) { + onclose() + cb(er) + }) +} + +fs.closeSync = function (fd) { + onclose() + return fs._closeSync(fd) +} + +// lchmod, broken prior to 0.6.2 +// back-port the fix here. +if (constants.hasOwnProperty('O_SYMLINK') && + process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)) { + fs.lchmod = function(path, mode, callback) { + callback = callback || noop; + fs.open(path, constants.O_WRONLY | constants.O_SYMLINK, function(err, fd) { + if (err) { + callback(err); + return; + } + // prefer to return the chmod error, if one occurs, + // but still try to close, and report closing errors if they occur. + fs.fchmod(fd, mode, function(err) { + fs.close(fd, function(err2) { + callback(err || err2); + }); + }); + }); + }; + + fs.lchmodSync = function(path, mode) { + var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK); + + // prefer to return the chmod error, if one occurs, + // but still try to close, and report closing errors if they occur. + var err, err2; + try { + var ret = fs.fchmodSync(fd, mode); + } catch (er) { + err = er; + } + try { + fs.closeSync(fd); + } catch (er) { + err2 = er; + } + if (err || err2) throw (err || err2); + return ret; + }; +} + +// lutimes, not yet implemented in node +if (constants.hasOwnProperty('O_SYMLINK') && !fs.lutimes) { + fs.lutimes = function (path, atime, mtime, cb) { + cb = cb || noop + fs.open(path, constants.O_SYMLINK | constants.O_WRONLY, function (er, fd) { + if (er) return cb(er) + fs.futimes(fd, atime, mtime, function (er) { + fs.close(fd, function (er2) { + cb(er || er2) + }) + }) + }) + } + + fs.lutimesSync = function(path, atime, mtime) { + var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK) + + // prefer to return the chmod error, if one occurs, + // but still try to close, and report closing errors if they occur. + var err, err2 + try { + var ret = fs.futimesSync(fd, atime, mtime) + } catch (er) { + err = er + } + try { + fs.closeSync(fd) + } catch (er) { + err2 = er + } + if (err || err2) throw (err || err2) + return ret + } +} diff --git a/deps/npm/node_modules/graceful-fs/package.json b/deps/npm/node_modules/graceful-fs/package.json index 934829c5ccc..3c2f8a6fffb 100644 --- a/deps/npm/node_modules/graceful-fs/package.json +++ b/deps/npm/node_modules/graceful-fs/package.json @@ -1,8 +1,8 @@ { "author": "Isaac Z. Schlueter (http://blog.izs.me)", "name": "graceful-fs", - "description": "fs with incremental backoff on EMFILE", - "version": "1.0.1", + "description": "fs monkey-patching to avoid EMFILE and other problems", + "version": "1.1.0", "repository": { "type": "git", "url": "git://github.com/isaacs/node-graceful-fs.git" @@ -11,6 +11,8 @@ "engines": { "node": "0.4 || 0.5 || 0.6" }, - "dependencies": {}, + "dependencies": { + "fast-list": "1" + }, "devDependencies": {} } diff --git a/deps/npm/node_modules/ini/test/fixtures/foo.ini b/deps/npm/node_modules/ini/test/fixtures/foo.ini deleted file mode 100644 index aa4b177a01c..00000000000 --- a/deps/npm/node_modules/ini/test/fixtures/foo.ini +++ /dev/null @@ -1,18 +0,0 @@ -o = p - - a with spaces = b c - -; wrap in quotes to JSON-decode and preserve spaces -" xa n p " = "\"\r\nyoyoyo\r\r\n" - -; a section -[a] -av = a val -e = { o: p, a: { av: a val, b: { c: { e: "this value" } } } } -j = "{ o: "p", a: { av: "a val", b: { c: { e: "this value" } } } }" - -; nested child without middle parent -; should create otherwise-empty a.b -[a.b.c] -e = 1 -j = 2 diff --git a/deps/npm/node_modules/ini/test/foo.js b/deps/npm/node_modules/ini/test/foo.js deleted file mode 100644 index 31af10320f0..00000000000 --- a/deps/npm/node_modules/ini/test/foo.js +++ /dev/null @@ -1,40 +0,0 @@ -var i = require("../") - , tap = require("tap") - , test = tap.test - , fs = require("fs") - , path = require("path") - , fixture = path.resolve(__dirname, "./fixtures/foo.ini") - , data = fs.readFileSync(fixture, "utf8") - , d - , expectE = 'o = p\n' - + 'a with spaces = b c\n' - + '" xa n p " = "\\"\\r\\nyoyoyo\\r\\r\\n"\n' - + '[a]\n' - + 'av = a val\n' - + 'e = { o: p, a: ' - + '{ av: a val, b: { c: { e: "this value" ' - + '} } } }\nj = "\\"{ o: \\"p\\", a: { av:' - + ' \\"a val\\", b: { c: { e: \\"this value' - + '\\" } } } }\\""\n[a.b.c]\ne = 1\nj = 2\n' - , expectD = - { o: 'p', - 'a with spaces': 'b c', - " xa n p ":'"\r\nyoyoyo\r\r\n', - a: - { av: 'a val', - e: '{ o: p, a: { av: a val, b: { c: { e: "this value" } } } }', - j: '"{ o: "p", a: { av: "a val", b: { c: { e: "this value" } } } }"', - b: { c: { e: '1', j: '2' } } } - } - -test("decode from file", function (t) { - d = i.decode(data) - t.deepEqual(d, expectD) - t.end() -}) - -test("encode from data", function (t) { - e = i.encode(expectD) - t.deepEqual(e, expectE) - t.end() -}) diff --git a/deps/npm/node_modules/minimatch/test/basic.js b/deps/npm/node_modules/minimatch/test/basic.js deleted file mode 100644 index e4c5437e1ca..00000000000 --- a/deps/npm/node_modules/minimatch/test/basic.js +++ /dev/null @@ -1,141 +0,0 @@ -// http://www.bashcookbook.com/bashinfo/source/bash-1.14.7/tests/glob-test - -var tap = require("tap") - , mm = require("../") - , files = [ "a", "b", "c", "d", "abc" - , "abd", "abe", "bb", "bcd" - , "ca", "cb", "dd", "de" - , "bdir/", "bdir/cfile"] - , next = files.concat([ "a-b", "aXb" - , ".x", ".y" ]) - -tap.test("basic tests", function (t) { - // [ pattern, [matches], MM opts, files, TAP opts] - ; [ "http://www.bashcookbook.com/bashinfo" + - "/source/bash-1.14.7/tests/glob-test" - , ["a*", ["a", "abc", "abd", "abe"]] - , ["X*", ["X*"]] - // allow null glob expansion - , ["X*", [], { null: true }] - - // isaacs: Slightly different than bash/sh/ksh - // \\* is not un-escaped to literal "*" in a failed match, - // but it does make it get treated as a literal star - , ["\\*", ["\\*"]] - , ["\\**", ["\\**"]] - - , ["b*/", ["bdir/"]] - , ["c*", ["c", "ca", "cb"]] - , ["**", files] - - - , ["\\.\\./*/", ["\\.\\./*/"]] - , ["s/\\..*//", ["s/\\..*//"]] - - // legendary larry crashes bashes - , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/" - , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/"]] - , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/" - , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/"]] - - // character classes - , ["[a-c]b*", ["abc", "abd", "abe", "bb", "cb"]] - , ["[a-y]*[^c]", ["abd", "abe", "bb", "bcd", - "bdir/", "ca", "cb", "dd", "de"]] - , ["a*[^c]", ["abd", "abe"]] - , function () { files.push("a-b", "aXb") } - , ["a[X-]b", ["a-b", "aXb"]] - , function () { files.push(".x", ".y") } - , ["[^a-c]*", ["d", "dd", "de"]] - , function () { files.push("a*b/", "a*b/ooo") } - , ["a\\*b/*", ["a*b/ooo"]] - , ["a\\*?/*", ["a*b/ooo"]] - , ["*\\\\!*", [], {null: true}, ["echo !7"]] - , ["*\\!*", ["echo !7"], null, ["echo !7"]] - , ["*.\\*", ["r.*"], null, ["r.*"]] - , ["a[b]c", ["abc"]] - , ["a[\\b]c", ["abc"]] - , ["a?c", ["abc"]] - , ["a\\*c", [], {null: true}, ["abc"]] - , ["", [""], { null: true }, [""]] - - , "http://www.opensource.apple.com/source/bash/bash-23/" + - "bash/tests/glob-test" - , function () { files.push("man/", "man/man1/", "man/man1/bash.1") } - , ["*/man*/bash.*", ["man/man1/bash.1"]] - , ["man/man1/bash.1", ["man/man1/bash.1"]] - , ["a***c", ["abc"], null, ["abc"]] - , ["a*****?c", ["abc"], null, ["abc"]] - , ["?*****??", ["abc"], null, ["abc"]] - , ["*****??", ["abc"], null, ["abc"]] - , ["?*****?c", ["abc"], null, ["abc"]] - , ["?***?****c", ["abc"], null, ["abc"]] - , ["?***?****?", ["abc"], null, ["abc"]] - , ["?***?****", ["abc"], null, ["abc"]] - , ["*******c", ["abc"], null, ["abc"]] - , ["*******?", ["abc"], null, ["abc"]] - , ["a*cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a**?**cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a**?**cd**?**??k***", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a**?**cd**?**??***k", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a**?**cd**?**??***k**", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a****c**?**??*****", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["[-abc]", ["-"], null, ["-"]] - , ["[abc-]", ["-"], null, ["-"]] - , ["\\", ["\\"], null, ["\\"]] - , ["[\\\\]", ["\\"], null, ["\\"]] - , ["[[]", ["["], null, ["["]] - , ["[", ["["], null, ["["]] - , ["[*", ["[abc"], null, ["[abc"]] - , "a right bracket shall lose its special meaning and " + - "represent itself in a bracket expression if it occurs " + - "first in the list. -- POSIX.2 2.8.3.2" - , ["[]]", ["]"], null, ["]"]] - , ["[]-]", ["]"], null, ["]"]] - , ["[a-\z]", ["p"], null, ["p"]] - , ["[/\\\\]*", ["/tmp"], null, ["/tmp"]] - , ["??**********?****?", [], { null: true }, ["abc"]] - , ["??**********?****c", [], { null: true }, ["abc"]] - , ["?************c****?****", [], { null: true }, ["abc"]] - , ["*c*?**", [], { null: true }, ["abc"]] - , ["a*****c*?**", [], { null: true }, ["abc"]] - , ["a********???*******", [], { null: true }, ["abc"]] - , ["[]", [], { null: true }, ["a"]] - , ["[abc", [], { null: true }, ["["]] - - , "nocase tests" - , ["XYZ", ["xYz"], { nocase: true, null: true } - , ["xYz", "ABC", "IjK"]] - , ["ab*", ["ABC"], { nocase: true, null: true } - , ["xYz", "ABC", "IjK"]] - , ["[ia]?[ck]", ["ABC", "IjK"], { nocase: true, null: true } - , ["xYz", "ABC", "IjK"]] - - ].forEach(function (c) { - if (typeof c === "function") return c() - if (typeof c === "string") return t.comment(c) - - var pattern = c[0] - , expect = c[1].sort(alpha) - , options = c[2] || {} - , f = c[3] || files - , tapOpts = c[4] || {} - - // options.debug = true - var r = mm.makeRe(pattern, options) - tapOpts.re = String(r) || JSON.stringify(r) - tapOpts.files = JSON.stringify(f) - tapOpts.pattern = pattern - - var actual = mm.match(f, pattern, options) - - t.equivalent( actual, expect - , JSON.stringify(pattern) + " " + JSON.stringify(expect) - , c[4] ) - }) - t.end() -}) - -function alpha (a, b) { - return a > b ? 1 : -1 -} diff --git a/deps/npm/node_modules/mkdirp/examples/pow.js b/deps/npm/node_modules/mkdirp/examples/pow.js deleted file mode 100644 index 77414622120..00000000000 --- a/deps/npm/node_modules/mkdirp/examples/pow.js +++ /dev/null @@ -1,6 +0,0 @@ -var mkdirp = require('mkdirp'); - -mkdirp('/tmp/foo/bar/baz', 0755, function (err) { - if (err) console.error(err) - else console.log('pow!') -}); diff --git a/deps/npm/node_modules/mkdirp/test/chmod.js b/deps/npm/node_modules/mkdirp/test/chmod.js deleted file mode 100644 index 0609694e383..00000000000 --- a/deps/npm/node_modules/mkdirp/test/chmod.js +++ /dev/null @@ -1,39 +0,0 @@ -var mkdirp = require('../').mkdirp; -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -var ps = [ '', 'tmp' ]; - -for (var i = 0; i < 25; i++) { - var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - ps.push(dir); -} - -var file = ps.join('/'); - -test('chmod-pre', function (t) { - var mode = 0744 - mkdirp(file, mode, function (er) { - t.ifError(er, 'should not error'); - fs.stat(file, function (er, stat) { - t.ifError(er, 'should exist'); - t.ok(stat && stat.isDirectory(), 'should be directory'); - t.equal(stat && stat.mode & 0777, mode, 'should be 0744'); - t.end(); - }); - }); -}); - -test('chmod', function (t) { - var mode = 0755 - mkdirp(file, mode, function (er) { - t.ifError(er, 'should not error'); - fs.stat(file, function (er, stat) { - t.ifError(er, 'should exist'); - t.ok(stat && stat.isDirectory(), 'should be directory'); - t.equal(stat && stat.mode & 0777, mode, 'should be 0755'); - t.end(); - }); - }); -}); diff --git a/deps/npm/node_modules/mkdirp/test/clobber.js b/deps/npm/node_modules/mkdirp/test/clobber.js deleted file mode 100644 index 0eb70998700..00000000000 --- a/deps/npm/node_modules/mkdirp/test/clobber.js +++ /dev/null @@ -1,37 +0,0 @@ -var mkdirp = require('../').mkdirp; -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -var ps = [ '', 'tmp' ]; - -for (var i = 0; i < 25; i++) { - var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - ps.push(dir); -} - -var file = ps.join('/'); - -// a file in the way -var itw = ps.slice(0, 3).join('/'); - - -test('clobber-pre', function (t) { - console.error("about to write to "+itw) - fs.writeFileSync(itw, 'I AM IN THE WAY, THE TRUTH, AND THE LIGHT.'); - - fs.stat(itw, function (er, stat) { - t.ifError(er) - t.ok(stat && stat.isFile(), 'should be file') - t.end() - }) -}) - -test('clobber', function (t) { - t.plan(2); - mkdirp(file, 0755, function (err) { - t.ok(err); - t.equal(err.code, 'ENOTDIR'); - t.end(); - }); -}); diff --git a/deps/npm/node_modules/mkdirp/test/mkdirp.js b/deps/npm/node_modules/mkdirp/test/mkdirp.js deleted file mode 100644 index b07cd70c109..00000000000 --- a/deps/npm/node_modules/mkdirp/test/mkdirp.js +++ /dev/null @@ -1,28 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('woo', function (t) { - t.plan(2); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/tmp/' + [x,y,z].join('/'); - - mkdirp(file, 0755, function (err) { - if (err) t.fail(err); - else path.exists(file, function (ex) { - if (!ex) t.fail('file not created') - else fs.stat(file, function (err, stat) { - if (err) t.fail(err) - else { - t.equal(stat.mode & 0777, 0755); - t.ok(stat.isDirectory(), 'target not a directory'); - t.end(); - } - }) - }) - }); -}); diff --git a/deps/npm/node_modules/mkdirp/test/race.js b/deps/npm/node_modules/mkdirp/test/race.js deleted file mode 100644 index 96a04476365..00000000000 --- a/deps/npm/node_modules/mkdirp/test/race.js +++ /dev/null @@ -1,41 +0,0 @@ -var mkdirp = require('../').mkdirp; -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('race', function (t) { - t.plan(4); - var ps = [ '', 'tmp' ]; - - for (var i = 0; i < 25; i++) { - var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - ps.push(dir); - } - var file = ps.join('/'); - - var res = 2; - mk(file, function () { - if (--res === 0) t.end(); - }); - - mk(file, function () { - if (--res === 0) t.end(); - }); - - function mk (file, cb) { - mkdirp(file, 0755, function (err) { - if (err) t.fail(err); - else path.exists(file, function (ex) { - if (!ex) t.fail('file not created') - else fs.stat(file, function (err, stat) { - if (err) t.fail(err) - else { - t.equal(stat.mode & 0777, 0755); - t.ok(stat.isDirectory(), 'target not a directory'); - if (cb) cb(); - } - }) - }) - }); - } -}); diff --git a/deps/npm/node_modules/mkdirp/test/rel.js b/deps/npm/node_modules/mkdirp/test/rel.js deleted file mode 100644 index 79858243ab9..00000000000 --- a/deps/npm/node_modules/mkdirp/test/rel.js +++ /dev/null @@ -1,32 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('rel', function (t) { - t.plan(2); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var cwd = process.cwd(); - process.chdir('/tmp'); - - var file = [x,y,z].join('/'); - - mkdirp(file, 0755, function (err) { - if (err) t.fail(err); - else path.exists(file, function (ex) { - if (!ex) t.fail('file not created') - else fs.stat(file, function (err, stat) { - if (err) t.fail(err) - else { - process.chdir(cwd); - t.equal(stat.mode & 0777, 0755); - t.ok(stat.isDirectory(), 'target not a directory'); - t.end(); - } - }) - }) - }); -}); diff --git a/deps/npm/node_modules/node-uuid/.gitignore b/deps/npm/node_modules/node-uuid/.gitignore new file mode 100644 index 00000000000..fd4f2b066b3 --- /dev/null +++ b/deps/npm/node_modules/node-uuid/.gitignore @@ -0,0 +1,2 @@ +node_modules +.DS_Store diff --git a/deps/npm/node_modules/node-uuid/README.md b/deps/npm/node_modules/node-uuid/README.md index c00675066f0..98083f304e1 100644 --- a/deps/npm/node_modules/node-uuid/README.md +++ b/deps/npm/node_modules/node-uuid/README.md @@ -1,100 +1,195 @@ # node-uuid -Simple, fast generation of RFC4122[RFC4122(v4)](http://www.ietf.org/rfc/rfc4122.txt) UUIDS. It runs in node.js and all major browsers. +Simple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS. -## Installation +Features: - npm install node-uuid +* Generate RFC4122 version 1 or version 4 UUIDs +* Runs in node.js and all browsers. +* Cryptographically strong random # generation on supporting platforms +* 1.1K minified and gzip'ed -### In browser +## Getting Started - +Install it in your browser: -### In node.js +```html + +``` - var uuid = require('node-uuid'); +Or in node.js: -## Usage +``` +npm install node-uuid +``` -### Generate a String UUID +```javascript +var uuid = require('node-uuid'); +``` - var id = uuid(); // -> '92329D39-6F5C-4520-ABFC-AAB64544E172' +Then create some ids ... -### Generate a Binary UUID +```javascript +// Generate a v1 (time-based) id +uuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a' - // Simple form - allocates a Buffer/Array for you - var buf = uuid('binary'); - // node.js -> - // browser -> [8, 80, 5, 200, 156, 178, 76, 7, 172, 7, 209, 79, 185, 245, 4, 81] +// Generate a v4 (random) id +uuid.v4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1' +``` - // Provide your own Buffer or Array - var buf = new Array(16); - uuid('binary', buf); // -> [8, 80, 5, 200, 156, 178, 76, 7, 172, 7, 209, 79, 185, 245, 4, 81] - var buf = new Buffer(16); - uuid('binary', buf); // -> +## API - // Provide your own Buffer/Array, plus specify offset - // (e.g. here we fill an array with 3 uuids) - var buf = new Buffer(16 \* 3); - uuid('binary', id, 0); - uuid('binary', id, 16); - uuid('binary', id, 32); +### uuid.v1([`options` [, `buffer` [, `offset`]]]) + +Generate and return a RFC4122 v1 (timestamp-based) UUID. + +* `options` - (Object) Optional uuid state to apply. Properties may include: + + * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomnly generated ID. See note 2. + * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used. + * `msecs` - (Number | Date) Time in milliseconds since unix Epoch. Default: The current time is used. See note 3. + * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2. + +* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. +* `offset` - (Number) Starting index in `buffer` at which to begin writing. + +Returns `buffer`, if specified, otherwise the string form of the UUID + +Notes: + +1. The randomly generated node id is only guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.) +1. Specifying the `msecs` option bypasses the internal logic for ensuring id uniqueness. In this case you may want to also provide `clockseq` and `nsecs` options as well. + +Example: Generate string UUID with fully-specified options + +```javascript +uuid.v1({ + node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab], + clockseq: 0x1234, + msecs: new Date('2011-11-01').getTime(), + nsecs: 5678 +}); // -> "710b962e-041c-11e1-9234-0123456789ab" +``` + +Example: In-place generation of two binary IDs + +```javascript +// In browsers: 'new Array(32)' +var buffer = new Buffer(32).fill(0); // -> +uuid.v1(null, buffer, 0); // -> +uuid.v1(null, buffer, 16); // -> + +// Optionally use uuid.unparse() to get stringify the ids +uuid.unparse(buffer); // -> '02a2ce90-1432-11e1-8558-0b488e4fc115' +uuid.unparse(buffer, 16) // -> '02a31cb0-1432-11e1-8558-0b488e4fc115' +``` + +### uuid.v4([`options` [, `buffer` [, `offset`]]]) + +Generate and return a RFC4122 v4 UUID. + +* `options` - (Object) Optional uuid state to apply. Properties may include: + + * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values + +* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. +* `offset` - (Number) Starting index in `buffer` at which to begin writing. + +Returns `buffer`, if specified, otherwise the string form of the UUID + +Example: Generate string UUID with fully-specified options + +```javascript +uuid.v4({ + random: [ + 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea, + 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36 + ] +}); +// -> "109156be-c4fb-41ea-b1b4-efe1671c5836" +``` + +Example: Generate two IDs in a single buffer + +```javascript +var buffer = new Array(32); // (or 'new Buffer' in node.js) +uuid.v4(null, buffer, 0); +uuid.v4(null, buffer, 16); +``` + +### uuid.parse(id[, buffer[, offset]]) +### uuid.unparse(buffer[, offset]) + +Parse and unparse UUIDs + + * `id` - (String) UUID(-like) string + * `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. Default: A new Array or Buffer is used + * `offset` - (Number) Starting index in `buffer` at which to begin writing. Default: 0 + +Example parsing and unparsing a UUID string + +```javascript +var bytes = uuid.parse('797ff043-11eb-11e1-80d6-510998755d10'); // -> +var string = uuid.unparse(bytes); // -> '797ff043-11eb-11e1-80d6-510998755d10' +``` + +### uuid.noConflict() + +(Browsers only) Set `uuid` property back to it's previous value. + +Returns the node-uuid object. + +Example: + +```javascript +var myUuid = uuid.noConflict(); +myUuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a' +``` + +## Deprecated APIs + +Support for the following v1.2 APIs is available in v1.3, but is deprecated and will be removed in the next major version. + +### uuid([format [, buffer [, offset]]]) + +uuid() has become uuid.v4(), and the `format` argument is now implicit in the `buffer` argument. (i.e. if you specify a buffer, the format is assumed to be binary). + +### uuid.BufferClass + +The class of container created when generating binary uuid data if no buffer argument is specified. This is expected to go away, with no replacement API. ## Testing -test/test.js generates performance data (similar to test/benchmark.js). It also verifies the syntax of 100K string UUIDs, and logs the distribution of hex digits found therein. For example: +In node.js - - - - Performance Data - - - - uuid(): 1052631 uuids/second - uuid('binary'): 680272 uuids/second - uuid('binary', buffer): 2702702 uuids/second +``` +> cd test +> node uuid.js +``` - - - - Distribution of Hex Digits (% deviation from ideal) - - - - 0 |================================| 187705 (0.11%) - 1 |================================| 187880 (0.2%) - 2 |================================| 186875 (-0.33%) - 3 |================================| 186847 (-0.35%) - 4 |==================================================| 287433 (-0.02%) - 5 |================================| 187910 (0.22%) - 6 |================================| 188172 (0.36%) - 7 |================================| 187350 (-0.08%) - 8 |====================================| 211994 (-0.24%) - 9 |====================================| 212664 (0.08%) - A |=====================================| 213185 (0.32%) - B |=====================================| 212877 (0.18%) - C |================================| 187445 (-0.03%) - D |================================| 186737 (-0.41%) - E |================================| 187155 (-0.18%) - F |================================| 187771 (0.14%) +In Browser -Note that the increased values for 4 and 8-B are expected as part of the RFC4122 syntax (and are accounted for in the deviation calculation). BTW, if someone wants to do the calculation to determine what a statistically significant deviation would be, I'll gladly add that to the test. +``` +open test/test.html +``` -### In browser +### Benchmarking - Open test/test.html +Requires node.js -### In node.js +``` +npm install uuid uuid-js +node test/benchmark.js +``` - > node test/test.js +For a more complete discussion of node-uuid performance, please see the `benchmark/README.md` file, and the [benchmark wiki](https://github.com/broofa/node-uuid/wiki/Benchmark) -node.js users can also run the node-uuid .vs. uuid.js benchmark: +For browser performance [checkout the JSPerf tests](http://jsperf.com/node-uuid-performance). - > node test/benchmark.js +### Release notes -## Performance +v1.3: Includes -### In node.js - -node-uuid is designed to be fast. That said, the target platform is node.js, where it is screaming fast. Here's what I get on my 2.66GHz Macbook Pro for the test/benchmark.js script: - - nodeuuid(): 1126126 uuids/second - nodeuuid('binary'): 782472 uuids/second - nodeuuid('binary', buffer): 2688172 uuids/second - uuidjs(): 620347 uuids/second - uuidjs('binary'): 1275510 uuids/second - -The uuidjs() entries are for Nikhil Marathe's [uuidjs module](https://bitbucket.org/nikhilm/uuidjs), and are provided for comparison. uuidjs is a wrapper around the native libuuid library. - -### In browser - -node-uuid performance varies dramatically across browsers. For comprehensive test results, please [checkout the JSPerf tests](http://jsperf.com/node-uuid-performance). +* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)! +* Support for node.js crypto API +* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code diff --git a/deps/npm/node_modules/node-uuid/benchmark/README.md b/deps/npm/node_modules/node-uuid/benchmark/README.md new file mode 100644 index 00000000000..aaeb2ea0132 --- /dev/null +++ b/deps/npm/node_modules/node-uuid/benchmark/README.md @@ -0,0 +1,53 @@ +# node-uuid Benchmarks + +### Results + +To see the results of our benchmarks visit https://github.com/broofa/node-uuid/wiki/Benchmark + +### Run them yourself + +node-uuid comes with some benchmarks to measure performance of generating UUIDs. These can be run using node.js. node-uuid is being benchmarked against some other uuid modules, that are available through npm namely `uuid` and `uuid-js`. + +To prepare and run the benchmark issue; + +``` +npm install uuid uuid-js +node benchmark/benchmark.js +``` + +You'll see an output like this one: + +``` +# v4 +nodeuuid.v4(): 854700 uuids/second +nodeuuid.v4('binary'): 788643 uuids/second +nodeuuid.v4('binary', buffer): 1336898 uuids/second +uuid(): 479386 uuids/second +uuid('binary'): 582072 uuids/second +uuidjs.create(4): 312304 uuids/second + +# v1 +nodeuuid.v1(): 938086 uuids/second +nodeuuid.v1('binary'): 683060 uuids/second +nodeuuid.v1('binary', buffer): 1644736 uuids/second +uuidjs.create(1): 190621 uuids/second +``` + +* The `uuid()` entries are for Nikhil Marathe's [uuid module](https://bitbucket.org/nikhilm/uuidjs) which is a wrapper around the native libuuid library. +* The `uuidjs()` entries are for Patrick Negri's [uuid-js module](https://github.com/pnegri/uuid-js) which is a pure javascript implementation based on [UUID.js](https://github.com/LiosK/UUID.js) by LiosK. + +If you want to get more reliable results you can run the benchmark multiple times and write the output into a log file: + +``` +for i in {0..9}; do node benchmark/benchmark.js >> benchmark/bench_0.4.12.log; done; +``` + +If you're interested in how performance varies between different node versions, you can issue the above command multiple times. + +You can then use the shell script `bench.sh` provided in this directory to calculate the averages over all benchmark runs and draw a nice plot: + +``` +(cd benchmark/ && ./bench.sh) +``` + +This assumes you have [gnuplot](http://www.gnuplot.info/) and [ImageMagick](http://www.imagemagick.org/) installed. You'll find a nice `bench.png` graph in the `benchmark/` directory then. diff --git a/deps/npm/node_modules/node-uuid/benchmark/bench.gnu b/deps/npm/node_modules/node-uuid/benchmark/bench.gnu new file mode 100644 index 00000000000..6001deb9812 --- /dev/null +++ b/deps/npm/node_modules/node-uuid/benchmark/bench.gnu @@ -0,0 +1,175 @@ +#!/opt/local/bin/gnuplot -persist +# +# +# G N U P L O T +# Version 4.4 patchlevel 3 +# last modified March 2011 +# System: Darwin 10.8.0 +# +# Copyright (C) 1986-1993, 1998, 2004, 2007-2010 +# Thomas Williams, Colin Kelley and many others +# +# gnuplot home: http://www.gnuplot.info +# faq, bugs, etc: type "help seeking-assistance" +# immediate help: type "help" +# plot window: hit 'h' +set terminal postscript eps noenhanced defaultplex \ + leveldefault color colortext \ + solid linewidth 1.2 butt noclip \ + palfuncparam 2000,0.003 \ + "Helvetica" 14 +set output 'bench.eps' +unset clip points +set clip one +unset clip two +set bar 1.000000 front +set border 31 front linetype -1 linewidth 1.000 +set xdata +set ydata +set zdata +set x2data +set y2data +set timefmt x "%d/%m/%y,%H:%M" +set timefmt y "%d/%m/%y,%H:%M" +set timefmt z "%d/%m/%y,%H:%M" +set timefmt x2 "%d/%m/%y,%H:%M" +set timefmt y2 "%d/%m/%y,%H:%M" +set timefmt cb "%d/%m/%y,%H:%M" +set boxwidth +set style fill empty border +set style rectangle back fc lt -3 fillstyle solid 1.00 border lt -1 +set style circle radius graph 0.02, first 0, 0 +set dummy x,y +set format x "% g" +set format y "% g" +set format x2 "% g" +set format y2 "% g" +set format z "% g" +set format cb "% g" +set angles radians +unset grid +set key title "" +set key outside left top horizontal Right noreverse enhanced autotitles columnhead nobox +set key noinvert samplen 4 spacing 1 width 0 height 0 +set key maxcolumns 2 maxrows 0 +unset label +unset arrow +set style increment default +unset style line +set style line 1 linetype 1 linewidth 2.000 pointtype 1 pointsize default pointinterval 0 +unset style arrow +set style histogram clustered gap 2 title offset character 0, 0, 0 +unset logscale +set offsets graph 0.05, 0.15, 0, 0 +set pointsize 1.5 +set pointintervalbox 1 +set encoding default +unset polar +unset parametric +unset decimalsign +set view 60, 30, 1, 1 +set samples 100, 100 +set isosamples 10, 10 +set surface +unset contour +set clabel '%8.3g' +set mapping cartesian +set datafile separator whitespace +unset hidden3d +set cntrparam order 4 +set cntrparam linear +set cntrparam levels auto 5 +set cntrparam points 5 +set size ratio 0 1,1 +set origin 0,0 +set style data points +set style function lines +set xzeroaxis linetype -2 linewidth 1.000 +set yzeroaxis linetype -2 linewidth 1.000 +set zzeroaxis linetype -2 linewidth 1.000 +set x2zeroaxis linetype -2 linewidth 1.000 +set y2zeroaxis linetype -2 linewidth 1.000 +set ticslevel 0.5 +set mxtics default +set mytics default +set mztics default +set mx2tics default +set my2tics default +set mcbtics default +set xtics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 +set xtics norangelimit +set xtics () +set ytics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 +set ytics autofreq norangelimit +set ztics border in scale 1,0.5 nomirror norotate offset character 0, 0, 0 +set ztics autofreq norangelimit +set nox2tics +set noy2tics +set cbtics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 +set cbtics autofreq norangelimit +set title "" +set title offset character 0, 0, 0 font "" norotate +set timestamp bottom +set timestamp "" +set timestamp offset character 0, 0, 0 font "" norotate +set rrange [ * : * ] noreverse nowriteback # (currently [8.98847e+307:-8.98847e+307] ) +set autoscale rfixmin +set autoscale rfixmax +set trange [ * : * ] noreverse nowriteback # (currently [-5.00000:5.00000] ) +set autoscale tfixmin +set autoscale tfixmax +set urange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) +set autoscale ufixmin +set autoscale ufixmax +set vrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) +set autoscale vfixmin +set autoscale vfixmax +set xlabel "" +set xlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate +set x2label "" +set x2label offset character 0, 0, 0 font "" textcolor lt -1 norotate +set xrange [ * : * ] noreverse nowriteback # (currently [-0.150000:3.15000] ) +set autoscale xfixmin +set autoscale xfixmax +set x2range [ * : * ] noreverse nowriteback # (currently [0.00000:3.00000] ) +set autoscale x2fixmin +set autoscale x2fixmax +set ylabel "" +set ylabel offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270 +set y2label "" +set y2label offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270 +set yrange [ 0.00000 : 1.90000e+06 ] noreverse nowriteback # (currently [:] ) +set autoscale yfixmin +set autoscale yfixmax +set y2range [ * : * ] noreverse nowriteback # (currently [0.00000:1.90000e+06] ) +set autoscale y2fixmin +set autoscale y2fixmax +set zlabel "" +set zlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate +set zrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) +set autoscale zfixmin +set autoscale zfixmax +set cblabel "" +set cblabel offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270 +set cbrange [ * : * ] noreverse nowriteback # (currently [8.98847e+307:-8.98847e+307] ) +set autoscale cbfixmin +set autoscale cbfixmax +set zero 1e-08 +set lmargin -1 +set bmargin -1 +set rmargin -1 +set tmargin -1 +set locale "de_DE.UTF-8" +set pm3d explicit at s +set pm3d scansautomatic +set pm3d interpolate 1,1 flush begin noftriangles nohidden3d corners2color mean +set palette positive nops_allcF maxcolors 0 gamma 1.5 color model RGB +set palette rgbformulae 7, 5, 15 +set colorbox default +set colorbox vertical origin screen 0.9, 0.2, 0 size screen 0.05, 0.6, 0 front bdefault +set loadpath +set fontpath +set fit noerrorvariables +GNUTERM = "aqua" +plot 'bench_results.txt' using 2:xticlabel(1) w lp lw 2, '' using 3:xticlabel(1) w lp lw 2, '' using 4:xticlabel(1) w lp lw 2, '' using 5:xticlabel(1) w lp lw 2, '' using 6:xticlabel(1) w lp lw 2, '' using 7:xticlabel(1) w lp lw 2, '' using 8:xticlabel(1) w lp lw 2, '' using 9:xticlabel(1) w lp lw 2 +# EOF diff --git a/deps/npm/node_modules/node-uuid/benchmark/bench.sh b/deps/npm/node_modules/node-uuid/benchmark/bench.sh new file mode 100755 index 00000000000..07cd14cdd0c --- /dev/null +++ b/deps/npm/node_modules/node-uuid/benchmark/bench.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +# for a given node version run: +# for i in {0..9}; do node benchmark.js >> bench_0.6.2.log; done; + +PATTERNS=('nodeuuid.v1()' "nodeuuid.v1('binary'," 'nodeuuid.v4()' "nodeuuid.v4('binary'," "uuid()" "uuid('binary')" 'uuidjs.create(1)' 'uuidjs.create(4)') +FILES=(node_uuid_v1_string node_uuid_v1_buf node_uuid_v4_string node_uuid_v4_buf libuuid_v4_string libuuid_v4_binary uuidjs_v1_string uuidjs_v4_string) +INDICES=(2 3 2 3 2 2 2 2) +VERSIONS=$( ls bench_*.log | sed -e 's/^bench_\([0-9\.]*\)\.log/\1/' | tr "\\n" " " ) +TMPJOIN="tmp_join" +OUTPUT="bench_results.txt" + +for I in ${!FILES[*]}; do + F=${FILES[$I]} + P=${PATTERNS[$I]} + INDEX=${INDICES[$I]} + echo "version $F" > $F + for V in $VERSIONS; do + (VAL=$( grep "$P" bench_$V.log | LC_ALL=en_US awk '{ sum += $'$INDEX' } END { print sum/NR }' ); echo $V $VAL) >> $F + done + if [ $I == 0 ]; then + cat $F > $TMPJOIN + else + join $TMPJOIN $F > $OUTPUT + cp $OUTPUT $TMPJOIN + fi + rm $F +done + +rm $TMPJOIN + +gnuplot bench.gnu +convert -density 200 -resize 800x560 -flatten bench.eps bench.png +rm bench.eps diff --git a/deps/npm/node_modules/node-uuid/test/benchmark-native.c b/deps/npm/node_modules/node-uuid/benchmark/benchmark-native.c similarity index 100% rename from deps/npm/node_modules/node-uuid/test/benchmark-native.c rename to deps/npm/node_modules/node-uuid/benchmark/benchmark-native.c diff --git a/deps/npm/node_modules/node-uuid/benchmark/benchmark.js b/deps/npm/node_modules/node-uuid/benchmark/benchmark.js new file mode 100644 index 00000000000..3e63673a2a1 --- /dev/null +++ b/deps/npm/node_modules/node-uuid/benchmark/benchmark.js @@ -0,0 +1,52 @@ +var nodeuuid = require('../uuid'), + uuid = require('uuid').generate, + uuidjs = require('uuid-js'), + N = 5e5; + +function rate(msg, t) { + console.log(msg + ': ' + + (N / (Date.now() - t) * 1e3 | 0) + + ' uuids/second'); +} + +console.log('# v4'); + +// node-uuid - string form +for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4(); +rate('nodeuuid.v4()', t); + +for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4('binary'); +rate('nodeuuid.v4(\'binary\')', t); + +var buffer = new nodeuuid.BufferClass(16); +for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4('binary', buffer); +rate('nodeuuid.v4(\'binary\', buffer)', t); + +// libuuid - string form +for (var i = 0, t = Date.now(); i < N; i++) uuid(); +rate('uuid()', t); + +for (var i = 0, t = Date.now(); i < N; i++) uuid('binary'); +rate('uuid(\'binary\')', t); + +// uuid-js - string form +for (var i = 0, t = Date.now(); i < N; i++) uuidjs.create(4); +rate('uuidjs.create(4)', t); + +console.log(''); +console.log('# v1'); + +// node-uuid - v1 string form +for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1(); +rate('nodeuuid.v1()', t); + +for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1('binary'); +rate('nodeuuid.v1(\'binary\')', t); + +var buffer = new nodeuuid.BufferClass(16); +for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1('binary', buffer); +rate('nodeuuid.v1(\'binary\', buffer)', t); + +// uuid-js - v1 string form +for (var i = 0, t = Date.now(); i < N; i++) uuidjs.create(1); +rate('uuidjs.create(1)', t); diff --git a/deps/npm/node_modules/node-uuid/package.json b/deps/npm/node_modules/node-uuid/package.json index bf70062abf6..a48f8904598 100644 --- a/deps/npm/node_modules/node-uuid/package.json +++ b/deps/npm/node_modules/node-uuid/package.json @@ -1,12 +1,14 @@ { "name" : "node-uuid", - "description" : "Simple, fast generation of RFC4122(v4) UUIDs.", + "description" : "Rigorous implementation of RFC4122 (v1 and v4) UUIDs.", "url" : "http://github.com/broofa/node-uuid", "keywords" : ["uuid", "guid", "rfc4122"], "author" : "Robert Kieffer ", - "contributors" : [], + "contributors" : [ + {"name": "Christoph Tavan ", "github": "https://github.com/ctavan"} + ], "dependencies" : [], "lib" : ".", "main" : "./uuid.js", - "version" : "1.2.0" + "version" : "1.3.0" } diff --git a/deps/npm/node_modules/node-uuid/test/benchmark.js b/deps/npm/node_modules/node-uuid/test/benchmark.js deleted file mode 100644 index 2505dc4a21d..00000000000 --- a/deps/npm/node_modules/node-uuid/test/benchmark.js +++ /dev/null @@ -1,27 +0,0 @@ -var nodeuuid = require('../uuid'), - uuidjs = require('uuid').generate, - N = 5e5; - -function rate(msg, t) { - console.log(msg + ': ' + - (N / (Date.now() - t) * 1e3 | 0) + - ' uuids/second'); -} - -// node-uuid - string form -for (var i = 0, t = Date.now(); i < N; i++) nodeuuid(); -rate('nodeuuid()', t); - -for (var i = 0, t = Date.now(); i < N; i++) nodeuuid('binary'); -rate('nodeuuid(\'binary\')', t); - -var buffer = new nodeuuid.BufferClass(16); -for (var i = 0, t = Date.now(); i < N; i++) nodeuuid('binary', buffer); -rate('nodeuuid(\'binary\', buffer)', t); - -// node-uuid - string form -for (var i = 0, t = Date.now(); i < N; i++) uuidjs(); -rate('uuidjs()', t); - -for (var i = 0, t = Date.now(); i < N; i++) uuidjs('binary'); -rate('uuidjs(\'binary\')', t); diff --git a/deps/npm/node_modules/node-uuid/test/test.html b/deps/npm/node_modules/node-uuid/test/test.html deleted file mode 100644 index 89e0f2c44bb..00000000000 --- a/deps/npm/node_modules/node-uuid/test/test.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - diff --git a/deps/npm/node_modules/node-uuid/test/test.js b/deps/npm/node_modules/node-uuid/test/test.js deleted file mode 100644 index 5037566eacf..00000000000 --- a/deps/npm/node_modules/node-uuid/test/test.js +++ /dev/null @@ -1,83 +0,0 @@ -if (typeof(uuid) == 'undefined') { - uuid = require('../uuid'); -} - -var UUID_FORMAT = /[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89a-fAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}/; -var N = 1e5; - -function log(msg) { - if (typeof(document) != 'undefined') { - document.write('
' + msg + '
'); - } - if (typeof(console) != 'undefined') { - console.log(msg); - } -} - -function rate(msg, t) { - log(msg + ': ' + (N / (Date.now() - t) * 1e3 | 0) + ' uuids/second'); -} - -// Perf tests -log('- - - Performance Data - - -'); -for (var i = 0, t = Date.now(); i < N; i++) uuid(); -rate('uuid()', t); -for (var i = 0, t = Date.now(); i < N; i++) uuid('binary'); -rate('uuid(\'binary\')', t); -var buf = new uuid.BufferClass(16); -for (var i = 0, t = Date.now(); i < N; i++) uuid('binary', buf); -rate('uuid(\'binary\', buffer)', t); - -var counts = {}, max = 0; - -var b = new uuid.BufferClass(16); -for (var i = 0; i < N; i++) { - id = uuid(); - if (!UUID_FORMAT.test(id)) { - throw Error(id + ' is not a valid UUID string'); - } - - if (id != uuid.unparse(uuid.parse(id))) { - throw Error(id + ' does not parse/unparse'); - } - - // Count digits for our randomness check - var digits = id.replace(/-/g, '').split(''); - for (var j = digits.length-1; j >= 0; j--) { - var c = digits[j]; - max = Math.max(max, counts[c] = (counts[c] || 0) + 1); - } -} - -// Get %'age an actual value differs from the ideal value -function divergence(actual, ideal) { - return Math.round(100*100*(actual - ideal)/ideal)/100; -} - -log('
- - - Distribution of Hex Digits (% deviation from ideal) - - -'); - -// Check randomness -for (var i = 0; i < 16; i++) { - var c = i.toString(16); - var bar = '', n = counts[c], p = Math.round(n/max*100|0); - - // 1-3,5-8, and D-F: 1:16 odds over 30 digits - var ideal = N*30/16; - if (i == 4) { - // 4: 1:1 odds on 1 digit, plus 1:16 odds on 30 digits - ideal = N*(1 + 30/16); - } else if (i >= 8 && i <= 11) { - // 8-B: 1:4 odds on 1 digit, plus 1:16 odds on 30 digits - ideal = N*(1/4 + 30/16); - } else { - // Otherwise: 1:16 odds on 30 digits - ideal = N*30/16; - } - var d = divergence(n, ideal); - - // Draw bar using UTF squares (just for grins) - var s = n/max*50 | 0; - while (s--) bar += '='; - - log(c + ' |' + bar + '| ' + counts[c] + ' (' + d + '%)'); -} diff --git a/deps/npm/node_modules/node-uuid/uuid.js b/deps/npm/node_modules/node-uuid/uuid.js index fdf6c54fd41..2ee2b188715 100644 --- a/deps/npm/node_modules/node-uuid/uuid.js +++ b/deps/npm/node_modules/node-uuid/uuid.js @@ -1,72 +1,243 @@ +/* + * Generate RFC4122 (v1 and v4) UUIDs + * + * Documentation at https://github.com/broofa/node-uuid + */ (function() { - /* - * Generate a RFC4122(v4) UUID - * - * Documentation at https://github.com/broofa/node-uuid - */ + var _global = this; - // Use node.js Buffer class if available, otherwise use the Array class - var BufferClass = typeof(Buffer) == 'function' ? Buffer : Array; + // Random number generator (feature-detected below) + var _rng; - // Buffer used for generating string uuids - var _buf = new BufferClass(16); + // node.js 'crypto' API + // http://nodejs.org/docs/v0.6.2/api/crypto.html#randomBytes + try { + _rng = require('crypto').randomBytes; + } catch (e) {} - // Cache number <-> hex string for octet values - var toString = []; - var toNumber = {}; - for (var i = 0; i < 256; i++) { - toString[i] = (i + 0x100).toString(16).substr(1); - toNumber[toString[i]] = i; + // WHATWG crypto api, available in Chrome + // http://wiki.whatwg.org/wiki/Crypto + if (!_rng && _global.crypto && crypto.getRandomValues) { + var _rnds = new Uint32Array(4), _rndBytes = new Array(16); + var _rng = function() { + // Get 32-bit rnds + crypto.getRandomValues(_rnds); + + // Unpack into byte array + for (var c = 0 ; c < 16; c++) { + _rndBytes[c] = _rnds[c >> 2] >>> ((c & 0x03) * 8) & 0xff; + } + return _rndBytes; + }; } - function parse(s) { - var buf = new BufferClass(16); - var i = 0, ton = toNumber; - s.toLowerCase().replace(/[0-9a-f][0-9a-f]/g, function(octet) { - buf[i++] = toNumber[octet]; + // Math.random - least desirable option since it does not guarantee + // cryptographic quality. + if (!_rng) { + var _rndBytes = new Array(16); + _rng = function() { + var r, b = _rndBytes, i = 0; + + for (var i = 0, r; i < 16; i++) { + if ((i & 0x03) == 0) r = Math.random() * 0x100000000; + b[i] = r >>> ((i & 0x03) << 3) & 0xff; + } + + return b; + }; + } + + // Buffer class to use + var BufferClass = typeof(Buffer) == 'function' ? Buffer : Array; + + // Maps for number <-> hex string conversion + var _byteToHex = []; + var _hexToByte = {}; + for (var i = 0; i < 256; i++) { + _byteToHex[i] = (i + 0x100).toString(16).substr(1); + _hexToByte[_byteToHex[i]] = i; + } + + /** See docs at https://github.com/broofa/node-uuid */ + function parse(s, buf, offset) { + var i = (buf && offset) || 0, ii = 0; + + buf = buf || []; + s.toLowerCase().replace(/[0-9a-f]{2}/g, function(byte) { + if (ii < 16) { // Don't overflow! + buf[i + ii++] = _hexToByte[byte]; + } }); + + // Zero out remaining bytes if string was short + while (ii < 16) { + buf[i + ii] = 0; + } + return buf; } - function unparse(buf) { - var tos = toString, b = buf; - return tos[b[0]] + tos[b[1]] + tos[b[2]] + tos[b[3]] + '-' + - tos[b[4]] + tos[b[5]] + '-' + - tos[b[6]] + tos[b[7]] + '-' + - tos[b[8]] + tos[b[9]] + '-' + - tos[b[10]] + tos[b[11]] + tos[b[12]] + - tos[b[13]] + tos[b[14]] + tos[b[15]]; + /** See docs at https://github.com/broofa/node-uuid */ + function unparse(buf, offset) { + var i = offset || 0, bth = _byteToHex; + return bth[buf[i++]] + bth[buf[i++]] + + bth[buf[i++]] + bth[buf[i++]] + '-' + + bth[buf[i++]] + bth[buf[i++]] + '-' + + bth[buf[i++]] + bth[buf[i++]] + '-' + + bth[buf[i++]] + bth[buf[i++]] + '-' + + bth[buf[i++]] + bth[buf[i++]] + + bth[buf[i++]] + bth[buf[i++]] + + bth[buf[i++]] + bth[buf[i++]]; } - var b32 = 0x100000000, ff = 0xff; - function uuid(fmt, buf, offset) { - var b = fmt != 'binary' ? _buf : (buf ? buf : new BufferClass(16)); + // Pre allocate array for constructing uuids + var _buffer = new BufferClass(16); + + // + // v1 UUID support + // + // Inspired by https://github.com/LiosK/UUID.js + // and http://docs.python.org/library/uuid.html + // + + // Per 4.1.4 - Offset (in msecs) from JS time to UUID (gregorian) time + var EPOCH_OFFSET = 12219292800000; + + // random #'s we need to init node and clockseq + var _seedBytes = _rng(10); + + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + var _nodeId = [ + _seedBytes[0] | 0x01, + _seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5] + ]; + + // Per 4.2.2, randomize (14 bit) clockseq + var _clockSeq = (_seedBytes[6] << 8 | _seedBytes[7]) & 0x3fff; + + // Previous uuid creation time + var _last = 0; + + // Count of UUIDs created during current time tick + var _count = 0; + + /** See docs at https://github.com/broofa/node-uuid */ + function v1(options, buf, offset) { var i = buf && offset || 0; + var b = buf || _buffer; - var r = Math.random()*b32; - b[i++] = r & ff; - b[i++] = r>>>8 & ff; - b[i++] = r>>>16 & ff; - b[i++] = r>>>24 & ff; - r = Math.random()*b32; - b[i++] = r & ff; - b[i++] = r>>>8 & ff; - b[i++] = r>>>16 & 0x0f | 0x40; // See RFC4122 sect. 4.1.3 - b[i++] = r>>>24 & ff; - r = Math.random()*b32; - b[i++] = r & 0x3f | 0x80; // See RFC4122 sect. 4.4 - b[i++] = r>>>8 & ff; - b[i++] = r>>>16 & ff; - b[i++] = r>>>24 & ff; - r = Math.random()*b32; - b[i++] = r & ff; - b[i++] = r>>>8 & ff; - b[i++] = r>>>16 & ff; - b[i++] = r>>>24 & ff; + options = options || {}; - return fmt === undefined ? unparse(b) : b; - }; + // JS Numbers aren't capable of representing time in the RFC-specified + // 100-nanosecond units. To deal with this, we represent time as the usual + // JS milliseconds, plus an additional 100-nanosecond unit offset. + var msecs = 0; // JS time (msecs since Unix epoch) + var nsecs = 0; // additional 100-nanosecond units to add to msecs + if (options.msecs != null) { + // Explicit time specified. Not that this turns off the internal logic + // around uuid count and clock sequence used insure uniqueness + msecs = (+options.msecs) + EPOCH_OFFSET; + nsecs = options.nsecs || 0; + } else { + // No time options - Follow the RFC logic (4.2.1.2) for maintaining + // clock seq and uuid count to help insure UUID uniqueness. + + msecs = new Date().getTime() + EPOCH_OFFSET; + + if (msecs < _last) { + // Clock regression - Per 4.2.1.2, increment clock seq + _clockSeq++; + _count = 0; + } else { + // Per 4.2.1.2, use a count of uuid's generated during the current + // clock cycle to simulate higher resolution clock + _count = (msecs == _last) ? _count + 1 : 0; + } + _last = msecs; + + // Per 4.2.1.2 If generator creates more than one id per uuid 100-ns + // interval, throw an error + // (Requires generating > 10M uuids/sec. While unlikely, it's not + // entirely inconceivable given the benchmark results we're getting) + if (_count >= 10000) { + throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec'); + } + + nsecs = _count; + } + + // Per 4.1.4, timestamp composition + + // time_low + var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; + + // time_mid + var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; + + // time_high_and_version + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + b[i++] = tmh >>> 16 & 0xff; + + // Clock sequence + var cs = options.clockseq != null ? options.clockseq : _clockSeq; + + // clock_seq_hi_and_reserved (Per 4.2.2 - include variant) + b[i++] = cs >>> 8 | 0x80; + + // clock_seq_low + b[i++] = cs & 0xff; + + // node + var node = options.node || _nodeId; + for (var n = 0; n < 6; n++) { + b[i + n] = node[n]; + } + + return buf ? buf : unparse(b); + } + + // + // v4 UUID support + // + + /** See docs at https://github.com/broofa/node-uuid */ + function v4(options, buf, offset) { + // Deprecated - 'format' argument, as supported in v1.2 + var i = buf && offset || 0; + if (typeof(options) == 'string') { + buf = options == 'binary' ? new BufferClass(16) : null; + options = null; + } + + var rnds = options && options.random || _rng(16); + // Per 4.4, set bits for version and clock_seq_hi_and_reserved + rnds[6] = (rnds[6] & 0x0f) | 0x40; + rnds[8] = (rnds[8] & 0x3f) | 0x80; + + // Copy bytes to buffer, if provided + if (buf) { + for (var ii = 0; ii < 16; ii++) { + buf[i + ii] = rnds[ii]; + } + } + + return buf || unparse(rnds); + } + + // + // Export API + // + + var uuid = v4; + uuid.v1 = v1; + uuid.v4 = v4; uuid.parse = parse; uuid.unparse = unparse; uuid.BufferClass = BufferClass; @@ -74,7 +245,11 @@ if (typeof(module) != 'undefined') { module.exports = uuid; } else { - // In browser? Set as top-level function - this.uuid = uuid; + var _previousRoot = _global.uuid; + uuid.noConflict = function() { + _global.uuid = _previousRoot; + return uuid; + } + _global.uuid = uuid; } -})(); +}()); diff --git a/deps/npm/node_modules/nopt/README.md b/deps/npm/node_modules/nopt/README.md index eeddfd4fe18..f290da8f4f7 100644 --- a/deps/npm/node_modules/nopt/README.md +++ b/deps/npm/node_modules/nopt/README.md @@ -121,7 +121,9 @@ interpreted as a number. You can also mix types and values, or multiple types, in a list. For instance `{ blah: [Number, null] }` would allow a value to be set to -either a Number or null. +either a Number or null. When types are ordered, this implies a +preference, and the first type that can be used to properly interpret +the value will be used. To define a new type, add it to `nopt.typeDefs`. Each item in that hash is an object with a `type` member and a `validate` method. The diff --git a/deps/npm/node_modules/nopt/examples/my-program.js b/deps/npm/node_modules/nopt/examples/my-program.js deleted file mode 100755 index 142447e18e7..00000000000 --- a/deps/npm/node_modules/nopt/examples/my-program.js +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env node - -//process.env.DEBUG_NOPT = 1 - -// my-program.js -var nopt = require("../lib/nopt") - , Stream = require("stream").Stream - , path = require("path") - , knownOpts = { "foo" : [String, null] - , "bar" : [Stream, Number] - , "baz" : path - , "bloo" : [ "big", "medium", "small" ] - , "flag" : Boolean - , "pick" : Boolean - } - , shortHands = { "foofoo" : ["--foo", "Mr. Foo"] - , "b7" : ["--bar", "7"] - , "m" : ["--bloo", "medium"] - , "p" : ["--pick"] - , "f" : ["--flag", "true"] - , "g" : ["--flag"] - , "s" : "--flag" - } - // everything is optional. - // knownOpts and shorthands default to {} - // arg list defaults to process.argv - // slice defaults to 2 - , parsed = nopt(knownOpts, shortHands, process.argv, 2) - -console.log("parsed =\n"+ require("util").inspect(parsed)) diff --git a/deps/npm/node_modules/request/README.md b/deps/npm/node_modules/request/README.md index 315bdbaf4ae..c29d08666cd 100644 --- a/deps/npm/node_modules/request/README.md +++ b/deps/npm/node_modules/request/README.md @@ -93,6 +93,54 @@ http.createServer(function (req, resp) { You can still use intermediate proxies, the requests will still follow HTTP forwards, etc. +## OAuth Signing + +```javascript +// Twitter OAuth +var qs = require('querystring') + , oauth = + { callback: 'http://mysite.com/callback/' + , consumer_key: CONSUMER_KEY + , consumer_secret: CONSUMER_SECRET + } + , url = 'https://api.twitter.com/oauth/request_token' + ; +request.post({url:url, oauth:oauth}, function (e, r, body) { + // Assume by some stretch of magic you aquired the verifier + var access_token = qs.parse(body) + , oauth = + { consumer_key: CONSUMER_KEY + , consumer_secret: CONSUMER_SECRET + , token: access_token.oauth_token + , verifier: VERIFIER + , token_secret: access_token.oauth_token_secret + } + , url = 'https://api.twitter.com/oauth/access_token' + ; + request.post({url:url, oauth:oauth}, function (e, r, body) { + var perm_token = qs.parse(body) + , oauth = + { consumer_key: CONSUMER_KEY + , consumer_secret: CONSUMER_SECRET + , token: perm_token.oauth_token + , token_secret: perm_token.oauth_token_secret + } + , url = 'https://api.twitter.com/1/users/show.json?' + , params = + { screen_name: perm_token.screen_name + , user_id: perm_token.user_id + } + ; + url += qs.stringify(params) + request.get({url:url, oauth:oauth, json:true}, function (e, r, user) { + console.log(user) + }) + }) +}) +``` + + + ### request(options, callback) The first argument can be either a url or an options object. The only required option is uri, all others are optional. @@ -111,7 +159,9 @@ The first argument can be either a url or an options object. The only required o * `pool.maxSockets` - Integer containing the maximum amount of sockets in the pool. * `timeout` - Integer containing the number of milliseconds to wait for a request to respond before aborting the request * `proxy` - An HTTP proxy to be used. Support proxy Auth with Basic Auth the same way it's supported with the `url` parameter by embedding the auth info in the uri. +* `oauth` - Options for OAuth HMAC-SHA1 signing, see documentation above. * `strictSSL` - Set to `true` to require that SSL certificates be valid. Note: to use your own certificate authority, you need to specify an agent that was created with that ca as an option. +* `jar` - Set to `false` if you don't want cookies to be remembered for future use or define your custom cookie jar (see examples section) The callback argument gets 3 arguments. The first is an error when applicable (usually from the http.Client option not the http.ClientRequest object). The second in an http.ClientResponse object. The third is the response body buffer. @@ -163,6 +213,20 @@ Alias to normal request method for uniformity. ```javascript request.get(url) ``` +### request.cookie + +Function that creates a new cookie. + +```javascript +request.cookie('cookie_string_here') +``` +### request.jar + +Function that creates a new cookie jar. + +```javascript +request.jar() +``` ## Examples: @@ -191,3 +255,31 @@ request.get(url) } ) ``` +Cookies are enabled by default (so they can be used in subsequent requests). To disable cookies set jar to false (either in defaults or in the options sent). + +```javascript +var request = request.defaults({jar: false}) +request('http://www.google.com', function () { + request('http://images.google.com') +}) +``` + +If you to use a custom cookie jar (instead of letting request use its own global cookie jar) you do so by setting the jar default or by specifying it as an option: + +```javascript +var j = request.jar() +var request = request.defaults({jar:j}) +request('http://www.google.com', function () { + request('http://images.google.com') +}) +``` +OR + +```javascript +var j = request.jar() +var cookie = request.cookie('your_cookie_here') +j.add(cookie) +request({url: 'http://www.google.com', jar: j}, function () { + request('http://images.google.com') +}) +``` diff --git a/deps/npm/node_modules/request/main.js b/deps/npm/node_modules/request/main.js index e328e9b8b68..d9502c1fd97 100644 --- a/deps/npm/node_modules/request/main.js +++ b/deps/npm/node_modules/request/main.js @@ -20,6 +20,11 @@ var http = require('http') , stream = require('stream') , qs = require('querystring') , mimetypes = require('./mimetypes') + , oauth = require('./oauth') + , uuid = require('./uuid') + , Cookie = require('./vendor/cookie') + , CookieJar = require('./vendor/cookie/jar') + , cookieJar = new CookieJar ; try { @@ -135,6 +140,19 @@ Request.prototype.request = function () { setHost = true } + if (self.jar === false) { + // disable cookies + var cookies = false; + self._disableCookies = true; + } else if (self.jar) { + // fetch cookie from the user defined cookie jar + var cookies = self.jar.get({ url: self.uri.href }) + } else { + // fetch cookie from the global cookie jar + var cookies = cookieJar.get({ url: self.uri.href }) + } + if (cookies) {self.headers.Cookie = cookies} + if (!self.uri.pathname) {self.uri.pathname = '/'} if (!self.uri.port) { if (self.uri.protocol == 'http:') {self.uri.port = 80} @@ -162,6 +180,52 @@ Request.prototype.request = function () { if (self.onResponse) self.on('error', function (e) {self.onResponse(e)}) if (self.callback) self.on('error', function (e) {self.callback(e)}) + if (self.form) { + self.headers['content-type'] = 'application/x-www-form-urlencoded; charset=utf-8' + self.body = qs.stringify(self.form).toString('utf8') + } + + if (self.oauth) { + var form + if (self.headers['content-type'] && + self.headers['content-type'].slice(0, 'application/x-www-form-urlencoded'.length) === + 'application/x-www-form-urlencoded' + ) { + form = qs.parse(self.body) + } + if (self.uri.query) { + form = qs.parse(self.uri.query) + } + if (!form) form = {} + var oa = {} + for (i in form) oa[i] = form[i] + for (i in self.oauth) oa['oauth_'+i] = self.oauth[i] + if (!oa.oauth_version) oa.oauth_version = '1.0' + if (!oa.oauth_timestamp) oa.oauth_timestamp = Math.floor( (new Date()).getTime() / 1000 ).toString() + if (!oa.oauth_nonce) oa.oauth_nonce = uuid().replace(/-/g, '') + + oa.oauth_signature_method = 'HMAC-SHA1' + + var consumer_secret = oa.oauth_consumer_secret + delete oa.oauth_consumer_secret + var token_secret = oa.oauth_token_secret + delete oa.oauth_token_secret + + var baseurl = self.uri.protocol + '//' + self.uri.host + self.uri.pathname + var signature = oauth.hmacsign(self.method, baseurl, oa, consumer_secret, token_secret) + + // oa.oauth_signature = signature + for (i in form) { + if ( i.slice(0, 'oauth_') in self.oauth) { + // skip + } else { + delete oa['oauth_'+i] + } + } + self.headers.authorization = + 'OAuth '+Object.keys(oa).sort().map(function (i) {return i+'="'+encodeURIComponent(oa[i])+'"'}).join(',') + self.headers.authorization += ',oauth_signature="'+encodeURIComponent(signature)+'"' + } if (self.uri.auth && !self.headers.authorization) { self.headers.authorization = "Basic " + toBase64(self.uri.auth.split(':').map(function(item){ return qs.unescape(item)}).join(':')) @@ -189,7 +253,7 @@ Request.prototype.request = function () { } } else if (self.multipart) { - self.body = '' + self.body = []; self.headers['content-type'] = 'multipart/related;boundary="frontier"' if (!self.multipart.forEach) throw new Error('Argument error, options.multipart.') @@ -197,21 +261,34 @@ Request.prototype.request = function () { var body = part.body if(!body) throw Error('Body attribute missing in multipart.') delete part.body - self.body += '--frontier\r\n' + var preamble = '--frontier\r\n' Object.keys(part).forEach(function(key){ - self.body += key + ': ' + part[key] + '\r\n' + preamble += key + ': ' + part[key] + '\r\n' }) - self.body += '\r\n' + body + '\r\n' + preamble += '\r\n'; + self.body.push(new Buffer(preamble)); + self.body.push(new Buffer(body)); + self.body.push(new Buffer('\r\n')); }) - self.body += '--frontier--' + self.body.push(new Buffer('--frontier--')); } if (self.body) { + var length = 0; if (!Buffer.isBuffer(self.body)) { - self.body = new Buffer(self.body) + if (Array.isArray(self.body)) { + for (var i = 0; i < self.body.length; i++) { + length += self.body[i].length; + } + } else { + self.body = new Buffer(self.body) + length = self.body.length; + } + } else { + length = self.body.length; } - if (self.body.length) { - self.headers['content-length'] = self.body.length + if (length) { + self.headers['content-length'] = length; } else { throw new Error('Argument error, options.body.') } @@ -358,6 +435,18 @@ Request.prototype.request = function () { response.body = JSON.parse(response.body) } catch (e) {} } + if (response.statusCode == 200 && response.headers['set-cookie'] && (!self._disableCookies)) { + response.headers['set-cookie'].forEach(function(cookie) { + if (self.jar) { + // custom defined jar + self.jar.add(new Cookie(cookie)); + } else { + // add to the global cookie jar if user don't define his own + cookieJar.add(new Cookie(cookie)); + } + }); + } + self.callback(null, response, response.body) }) } @@ -402,7 +491,13 @@ Request.prototype.request = function () { process.nextTick(function () { if (self.body) { - self.write(self.body) + if (Array.isArray(self.body)) { + self.body.forEach(function(part) { + self.write(part); + }); + } else { + self.write(self.body) + } self.end() } else if (self.requestBodyStream) { console.warn("options.requestBodyStream is deprecated, please pass the request object to stream.pipe.") @@ -477,6 +572,8 @@ request.defaults = function (options) { de.put = def(request.put) de.head = def(request.head) de.del = def(request.del) + de.cookie = def(request.cookie) + de.jar = def(request.jar) return de } @@ -504,3 +601,10 @@ request.del = function (options, callback) { options.method = 'DELETE' return request(options, callback) } +request.jar = function () { + return new CookieJar +} +request.cookie = function (str) { + if (typeof str !== 'string') throw new Error("The cookie function only accepts STRING as param") + return new Cookie(str) +} diff --git a/deps/npm/node_modules/request/oauth.js b/deps/npm/node_modules/request/oauth.js new file mode 100644 index 00000000000..e49c16e7464 --- /dev/null +++ b/deps/npm/node_modules/request/oauth.js @@ -0,0 +1,23 @@ +var crypto = require('crypto') + , qs = require('querystring') + ; + +function sha1 (key, body) { + return crypto.createHmac('sha1', key).update(body).digest('base64') +} + +function hmacsign (httpMethod, base_uri, params, consumer_secret, token_secret, body) { + // adapted from https://dev.twitter.com/docs/auth/oauth + var base = + httpMethod + "&" + + encodeURIComponent( base_uri ) + "&" + + Object.keys(params).sort().map(function (i) { + // big WTF here with the escape + encoding but it's what twitter wants + return encodeURIComponent(qs.escape(i)) + "%3D" + encodeURIComponent(qs.escape(params[i])) + }).join("%26") + var key = consumer_secret + '&' + if (token_secret) key += token_secret + return sha1(key, base) +} + +exports.hmacsign = hmacsign \ No newline at end of file diff --git a/deps/npm/node_modules/request/package.json b/deps/npm/node_modules/request/package.json index 2d98aa2510c..a8bed6348b5 100644 --- a/deps/npm/node_modules/request/package.json +++ b/deps/npm/node_modules/request/package.json @@ -1,7 +1,7 @@ { "name" : "request" , "description" : "Simplified HTTP request client." , "tags" : ["http", "simple", "util", "utility"] -, "version" : "2.1.1" +, "version" : "2.2.0" , "author" : "Mikeal Rogers " , "repository" : { "type" : "git" diff --git a/deps/npm/node_modules/request/tests/googledoodle.png b/deps/npm/node_modules/request/tests/googledoodle.png deleted file mode 100644 index f80c9c52d3c507996535a19ee0bcfe3821de322d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38510 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 diff --git a/deps/npm/node_modules/request/tests/run.sh b/deps/npm/node_modules/request/tests/run.sh deleted file mode 100755 index 57d0f649666..00000000000 --- a/deps/npm/node_modules/request/tests/run.sh +++ /dev/null @@ -1,6 +0,0 @@ -FAILS=0 -for i in tests/test-*.js; do - echo $i - node $i || let FAILS++ -done -exit $FAILS diff --git a/deps/npm/node_modules/request/tests/server.js b/deps/npm/node_modules/request/tests/server.js deleted file mode 100644 index bad1e50305a..00000000000 --- a/deps/npm/node_modules/request/tests/server.js +++ /dev/null @@ -1,57 +0,0 @@ -var http = require('http') - , events = require('events') - , stream = require('stream') - , assert = require('assert') - ; - -exports.createServer = function (port) { - port = port || 6767 - var s = http.createServer(function (req, resp) { - s.emit(req.url, req, resp); - }) - s.port = port - s.url = 'http://localhost:'+port - return s; -} - -exports.createPostStream = function (text) { - var postStream = new stream.Stream(); - postStream.writeable = true; - postStream.readable = true; - setTimeout(function () {postStream.emit('data', new Buffer(text)); postStream.emit('end')}, 0); - return postStream; -} -exports.createPostValidator = function (text) { - var l = function (req, resp) { - var r = ''; - req.on('data', function (chunk) {r += chunk}) - req.on('end', function () { - if (r !== text) console.log(r, text); - assert.equal(r, text) - resp.writeHead(200, {'content-type':'text/plain'}) - resp.write('OK') - resp.end() - }) - } - return l; -} -exports.createGetResponse = function (text, contentType) { - var l = function (req, resp) { - contentType = contentType || 'text/plain' - resp.writeHead(200, {'content-type':contentType}) - resp.write(text) - resp.end() - } - return l; -} -exports.createChunkResponse = function (chunks, contentType) { - var l = function (req, resp) { - contentType = contentType || 'text/plain' - resp.writeHead(200, {'content-type':contentType}) - chunks.forEach(function (chunk) { - resp.write(chunk) - }) - resp.end() - } - return l; -} diff --git a/deps/npm/node_modules/request/tests/test-body.js b/deps/npm/node_modules/request/tests/test-body.js deleted file mode 100644 index 18ad5b9c6f3..00000000000 --- a/deps/npm/node_modules/request/tests/test-body.js +++ /dev/null @@ -1,90 +0,0 @@ -var server = require('./server') - , events = require('events') - , stream = require('stream') - , assert = require('assert') - , request = require('../main.js') - ; - -var s = server.createServer(); - -var tests = - { testGet : - { resp : server.createGetResponse("TESTING!") - , expectBody: "TESTING!" - } - , testGetChunkBreak : - { resp : server.createChunkResponse( - [ new Buffer([239]) - , new Buffer([163]) - , new Buffer([191]) - , new Buffer([206]) - , new Buffer([169]) - , new Buffer([226]) - , new Buffer([152]) - , new Buffer([131]) - ]) - , expectBody: "Ω☃" - } - , testGetJSON : - { resp : server.createGetResponse('{"test":true}', 'application/json') - , json : true - , expectBody: {"test":true} - } - , testPutString : - { resp : server.createPostValidator("PUTTINGDATA") - , method : "PUT" - , body : "PUTTINGDATA" - } - , testPutBuffer : - { resp : server.createPostValidator("PUTTINGDATA") - , method : "PUT" - , body : new Buffer("PUTTINGDATA") - } - , testPutJSON : - { resp : server.createPostValidator(JSON.stringify({foo: 'bar'})) - , method: "PUT" - , json: {foo: 'bar'} - } - , testPutMultipart : - { resp: server.createPostValidator( - '--frontier\r\n' + - 'content-type: text/html\r\n' + - '\r\n' + - 'Oh hi.' + - '\r\n--frontier\r\n\r\n' + - 'Oh hi.' + - '\r\n--frontier--' - ) - , method: "PUT" - , multipart: - [ {'content-type': 'text/html', 'body': 'Oh hi.'} - , {'body': 'Oh hi.'} - ] - } - } - -s.listen(s.port, function () { - - var counter = 0 - - for (i in tests) { - (function () { - var test = tests[i] - s.on('/'+i, test.resp) - test.uri = s.url + '/' + i - request(test, function (err, resp, body) { - if (err) throw err - if (test.expectBody) { - assert.deepEqual(test.expectBody, body) - } - counter = counter - 1; - if (counter === 0) { - console.log(Object.keys(tests).length+" tests passed.") - s.close() - } - }) - counter++ - })() - } -}) - diff --git a/deps/npm/node_modules/request/tests/test-errors.js b/deps/npm/node_modules/request/tests/test-errors.js deleted file mode 100644 index e5df87b56cc..00000000000 --- a/deps/npm/node_modules/request/tests/test-errors.js +++ /dev/null @@ -1,30 +0,0 @@ -var server = require('./server') - , events = require('events') - , assert = require('assert') - , request = require('../main.js') - ; - -var local = 'http://localhost:8888/asdf' - -try { - request({uri:local, body:{}}) - assert.fail("Should have throw") -} catch(e) { - assert.equal(e.message, 'Argument error, options.body.') -} - -try { - request({uri:local, multipart: 'foo'}) - assert.fail("Should have throw") -} catch(e) { - assert.equal(e.message, 'Argument error, options.multipart.') -} - -try { - request({uri:local, multipart: [{}]}) - assert.fail("Should have throw") -} catch(e) { - assert.equal(e.message, 'Body attribute missing in multipart.') -} - -console.log("All tests passed.") \ No newline at end of file diff --git a/deps/npm/node_modules/request/tests/test-pipes.js b/deps/npm/node_modules/request/tests/test-pipes.js deleted file mode 100644 index 0774647a179..00000000000 --- a/deps/npm/node_modules/request/tests/test-pipes.js +++ /dev/null @@ -1,167 +0,0 @@ -var server = require('./server') - , events = require('events') - , stream = require('stream') - , assert = require('assert') - , fs = require('fs') - , request = require('../main.js') - , path = require('path') - , util = require('util') - ; - -var s = server.createServer(3453); - -function ValidationStream(str) { - this.str = str - this.buf = '' - this.on('data', function (data) { - this.buf += data - }) - this.on('end', function () { - assert.equal(this.str, this.buf) - }) - this.writable = true -} -util.inherits(ValidationStream, stream.Stream) -ValidationStream.prototype.write = function (chunk) { - this.emit('data', chunk) -} -ValidationStream.prototype.end = function (chunk) { - if (chunk) emit('data', chunk) - this.emit('end') -} - -s.listen(s.port, function () { - counter = 0; - - var check = function () { - counter = counter - 1 - if (counter === 0) { - console.log('All tests passed.') - setTimeout(function () { - process.exit(); - }, 500) - } - } - - // Test pipeing to a request object - s.once('/push', server.createPostValidator("mydata")); - - var mydata = new stream.Stream(); - mydata.readable = true - - counter++ - var r1 = request.put({url:'http://localhost:3453/push'}, function () { - check(); - }) - mydata.pipe(r1) - - mydata.emit('data', 'mydata'); - mydata.emit('end'); - - - // Test pipeing from a request object. - s.once('/pull', server.createGetResponse("mypulldata")); - - var mypulldata = new stream.Stream(); - mypulldata.writable = true - - counter++ - request({url:'http://localhost:3453/pull'}).pipe(mypulldata) - - var d = ''; - - mypulldata.write = function (chunk) { - d += chunk; - } - mypulldata.end = function () { - assert.equal(d, 'mypulldata'); - check(); - }; - - - s.on('/cat', function (req, resp) { - if (req.method === "GET") { - resp.writeHead(200, {'content-type':'text/plain-test', 'content-length':4}); - resp.end('asdf') - } else if (req.method === "PUT") { - assert.equal(req.headers['content-type'], 'text/plain-test'); - assert.equal(req.headers['content-length'], 4) - var validate = ''; - - req.on('data', function (chunk) {validate += chunk}) - req.on('end', function () { - resp.writeHead(201); - resp.end(); - assert.equal(validate, 'asdf'); - check(); - }) - } - }) - s.on('/pushjs', function (req, resp) { - if (req.method === "PUT") { - assert.equal(req.headers['content-type'], 'text/javascript'); - check(); - } - }) - s.on('/catresp', function (req, resp) { - request.get('http://localhost:3453/cat').pipe(resp) - }) - s.on('/doodle', function (req, resp) { - if (req.headers['x-oneline-proxy']) { - resp.setHeader('x-oneline-proxy', 'yup') - } - resp.writeHead('200', {'content-type':'image/png'}) - fs.createReadStream(path.join(__dirname, 'googledoodle.png')).pipe(resp) - }) - s.on('/onelineproxy', function (req, resp) { - var x = request('http://localhost:3453/doodle') - req.pipe(x) - x.pipe(resp) - }) - - counter++ - fs.createReadStream(__filename).pipe(request.put('http://localhost:3453/pushjs')) - - counter++ - request.get('http://localhost:3453/cat').pipe(request.put('http://localhost:3453/cat')) - - counter++ - request.get('http://localhost:3453/catresp', function (e, resp, body) { - assert.equal(resp.headers['content-type'], 'text/plain-test'); - assert.equal(resp.headers['content-length'], 4) - check(); - }) - - var doodleWrite = fs.createWriteStream(path.join(__dirname, 'test.png')) - - counter++ - request.get('http://localhost:3453/doodle').pipe(doodleWrite) - - doodleWrite.on('close', function () { - assert.deepEqual(fs.readFileSync(path.join(__dirname, 'googledoodle.png')), fs.readFileSync(path.join(__dirname, 'test.png'))) - check() - }) - - process.on('exit', function () { - fs.unlinkSync(path.join(__dirname, 'test.png')) - }) - - counter++ - request.get({uri:'http://localhost:3453/onelineproxy', headers:{'x-oneline-proxy':'nope'}}, function (err, resp, body) { - assert.equal(resp.headers['x-oneline-proxy'], 'yup') - check() - }) - - s.on('/afterresponse', function (req, resp) { - resp.write('d') - resp.end() - }) - - counter++ - var afterresp = request.post('http://localhost:3453/afterresponse').on('response', function () { - var v = new ValidationStream('d') - afterresp.pipe(v) - v.on('end', check) - }) - -}) diff --git a/deps/npm/node_modules/request/tests/test-timeout.js b/deps/npm/node_modules/request/tests/test-timeout.js deleted file mode 100644 index 673f8ad86f9..00000000000 --- a/deps/npm/node_modules/request/tests/test-timeout.js +++ /dev/null @@ -1,87 +0,0 @@ -var server = require('./server') - , events = require('events') - , stream = require('stream') - , assert = require('assert') - , request = require('../main.js') - ; - -var s = server.createServer(); -var expectedBody = "waited"; -var remainingTests = 5; - -s.listen(s.port, function () { - // Request that waits for 200ms - s.on('/timeout', function (req, resp) { - setTimeout(function(){ - resp.writeHead(200, {'content-type':'text/plain'}) - resp.write(expectedBody) - resp.end() - }, 200); - }); - - // Scenario that should timeout - var shouldTimeout = { - url: s.url + "/timeout", - timeout:100 - } - - - request(shouldTimeout, function (err, resp, body) { - assert.equal(err.code, "ETIMEDOUT"); - checkDone(); - }) - - - // Scenario that shouldn't timeout - var shouldntTimeout = { - url: s.url + "/timeout", - timeout:300 - } - - request(shouldntTimeout, function (err, resp, body) { - assert.equal(err, null); - assert.equal(expectedBody, body) - checkDone(); - }) - - // Scenario with no timeout set, so shouldn't timeout - var noTimeout = { - url: s.url + "/timeout" - } - - request(noTimeout, function (err, resp, body) { - assert.equal(err); - assert.equal(expectedBody, body) - checkDone(); - }) - - // Scenario with a negative timeout value, should be treated a zero or the minimum delay - var negativeTimeout = { - url: s.url + "/timeout", - timeout:-1000 - } - - request(negativeTimeout, function (err, resp, body) { - assert.equal(err.code, "ETIMEDOUT"); - checkDone(); - }) - - // Scenario with a float timeout value, should be rounded by setTimeout anyway - var floatTimeout = { - url: s.url + "/timeout", - timeout: 100.76 - } - - request(floatTimeout, function (err, resp, body) { - assert.equal(err.code, "ETIMEDOUT"); - checkDone(); - }) - - function checkDone() { - if(--remainingTests == 0) { - s.close(); - console.log("All tests passed."); - } - } -}) - diff --git a/deps/npm/node_modules/request/uuid.js b/deps/npm/node_modules/request/uuid.js new file mode 100644 index 00000000000..1d83bd50a27 --- /dev/null +++ b/deps/npm/node_modules/request/uuid.js @@ -0,0 +1,19 @@ +module.exports = function () { + var s = [], itoh = '0123456789ABCDEF'; + + // Make array of random hex digits. The UUID only has 32 digits in it, but we + // allocate an extra items to make room for the '-'s we'll be inserting. + for (var i = 0; i <36; i++) s[i] = Math.floor(Math.random()*0x10); + + // Conform to RFC-4122, section 4.4 + s[14] = 4; // Set 4 high bits of time_high field to version + s[19] = (s[19] & 0x3) | 0x8; // Specify 2 high bits of clock sequence + + // Convert to hex chars + for (var i = 0; i <36; i++) s[i] = itoh[s[i]]; + + // Insert '-'s + s[8] = s[13] = s[18] = s[23] = '-'; + + return s.join(''); +} diff --git a/deps/npm/node_modules/request/vendor/cookie/index.js b/deps/npm/node_modules/request/vendor/cookie/index.js new file mode 100644 index 00000000000..4ba20d6af3d --- /dev/null +++ b/deps/npm/node_modules/request/vendor/cookie/index.js @@ -0,0 +1,57 @@ +/*! + * Tobi - Cookie + * Copyright(c) 2010 LearnBoost + * MIT Licensed + */ + +/** + * Module dependencies. + */ + +var url = require('url'); + +/** + * Initialize a new `Cookie` with the given cookie `str` and `req`. + * + * @param {String} str + * @param {IncomingRequest} req + * @api private + */ + +var Cookie = exports = module.exports = function Cookie(str, req) { + this.str = str; + + // First key is the name + this.name = str.substr(0, str.indexOf('=')); + + // Map the key/val pairs + str.split(/ *; */).reduce(function(obj, pair){ + pair = pair.split(/ *= */); + obj[pair[0]] = pair[1] || true; + return obj; + }, this); + + // Assign value + this.value = this[this.name]; + + // Expires + this.expires = this.expires + ? new Date(this.expires) + : Infinity; + + // Default or trim path + this.path = this.path + ? this.path.trim() + : url.parse(req.url).pathname; +}; + +/** + * Return the original cookie string. + * + * @return {String} + * @api public + */ + +Cookie.prototype.toString = function(){ + return this.str; +}; diff --git a/deps/npm/node_modules/request/vendor/cookie/jar.js b/deps/npm/node_modules/request/vendor/cookie/jar.js new file mode 100644 index 00000000000..34920e06201 --- /dev/null +++ b/deps/npm/node_modules/request/vendor/cookie/jar.js @@ -0,0 +1,72 @@ +/*! +* Tobi - CookieJar +* Copyright(c) 2010 LearnBoost +* MIT Licensed +*/ + +/** +* Module dependencies. +*/ + +var url = require('url'); + +/** +* Initialize a new `CookieJar`. +* +* @api private +*/ + +var CookieJar = exports = module.exports = function CookieJar() { + this.cookies = []; +}; + +/** +* Add the given `cookie` to the jar. +* +* @param {Cookie} cookie +* @api private +*/ + +CookieJar.prototype.add = function(cookie){ + this.cookies = this.cookies.filter(function(c){ + // Avoid duplication (same path, same name) + return !(c.name == cookie.name && c.path == cookie.path); + }); + this.cookies.push(cookie); +}; + +/** +* Get cookies for the given `req`. +* +* @param {IncomingRequest} req +* @return {Array} +* @api private +*/ + +CookieJar.prototype.get = function(req){ + var path = url.parse(req.url).pathname + , now = new Date + , specificity = {}; + return this.cookies.filter(function(cookie){ + if (0 == path.indexOf(cookie.path) && now < cookie.expires + && cookie.path.length > (specificity[cookie.name] || 0)) + return specificity[cookie.name] = cookie.path.length; + }); +}; + +/** +* Return Cookie string for the given `req`. +* +* @param {IncomingRequest} req +* @return {String} +* @api private +*/ + +CookieJar.prototype.cookieString = function(req){ + var cookies = this.get(req); + if (cookies.length) { + return cookies.map(function(cookie){ + return cookie.name + '=' + cookie.value; + }).join('; '); + } +}; diff --git a/deps/npm/node_modules/rimraf/test/run.sh b/deps/npm/node_modules/rimraf/test/run.sh deleted file mode 100644 index 598f0163b23..00000000000 --- a/deps/npm/node_modules/rimraf/test/run.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash -set -e -for i in test-*.js; do - echo -n $i ... - bash setup.sh - node $i - ! [ -d target ] - echo "pass" -done -rm -rf target diff --git a/deps/npm/node_modules/rimraf/test/setup.sh b/deps/npm/node_modules/rimraf/test/setup.sh deleted file mode 100644 index 2602e631602..00000000000 --- a/deps/npm/node_modules/rimraf/test/setup.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/bash - -set -e - -files=10 -folders=2 -depth=4 -target="$PWD/target" - -rm -rf target - -fill () { - local depth=$1 - local files=$2 - local folders=$3 - local target=$4 - - if ! [ -d $target ]; then - mkdir -p $target - fi - - local f - - f=$files - while [ $f -gt 0 ]; do - touch "$target/f-$depth-$f" - let f-- - done - - let depth-- - - if [ $depth -le 0 ]; then - return 0 - fi - - f=$folders - while [ $f -gt 0 ]; do - mkdir "$target/folder-$depth-$f" - fill $depth $files $folders "$target/d-$depth-$f" - let f-- - done -} - -fill $depth $files $folders $target - -# sanity assert -[ -d $target ] diff --git a/deps/npm/node_modules/rimraf/test/test-async.js b/deps/npm/node_modules/rimraf/test/test-async.js deleted file mode 100644 index 9c2e0b7be0e..00000000000 --- a/deps/npm/node_modules/rimraf/test/test-async.js +++ /dev/null @@ -1,5 +0,0 @@ -var rimraf = require("../rimraf") - , path = require("path") -rimraf(path.join(__dirname, "target"), function (er) { - if (er) throw er -}) diff --git a/deps/npm/node_modules/rimraf/test/test-fiber.js b/deps/npm/node_modules/rimraf/test/test-fiber.js deleted file mode 100644 index 20d61a1099a..00000000000 --- a/deps/npm/node_modules/rimraf/test/test-fiber.js +++ /dev/null @@ -1,15 +0,0 @@ -var rimraf - , path = require("path") - -try { - rimraf = require("../fiber") -} catch (er) { - console.error("skipping fiber test") -} - -if (rimraf) { - Fiber(function () { - rimraf(path.join(__dirname, "target")).wait() - }).run() -} - diff --git a/deps/npm/node_modules/rimraf/test/test-sync.js b/deps/npm/node_modules/rimraf/test/test-sync.js deleted file mode 100644 index eb71f10476e..00000000000 --- a/deps/npm/node_modules/rimraf/test/test-sync.js +++ /dev/null @@ -1,3 +0,0 @@ -var rimraf = require("../rimraf") - , path = require("path") -rimraf.sync(path.join(__dirname, "target")) diff --git a/deps/npm/node_modules/semver/test.js b/deps/npm/node_modules/semver/test.js deleted file mode 100644 index c28fe39701a..00000000000 --- a/deps/npm/node_modules/semver/test.js +++ /dev/null @@ -1,397 +0,0 @@ -var tap = require("tap") - , test = tap.test - , semver = require("./semver.js") - , eq = semver.eq - , gt = semver.gt - , lt = semver.lt - , neq = semver.neq - , cmp = semver.cmp - , gte = semver.gte - , lte = semver.lte - , satisfies = semver.satisfies - , validRange = semver.validRange - , inc = semver.inc - , replaceStars = semver.replaceStars - , toComparators = semver.toComparators - -tap.plan(8) - -test("\ncomparison tests", function (t) { -; [ ["0.0.0", "0.0.0foo"] - , ["0.0.1", "0.0.0"] - , ["1.0.0", "0.9.9"] - , ["0.10.0", "0.9.0"] - , ["0.99.0", "0.10.0"] - , ["2.0.0", "1.2.3"] - , ["v0.0.0", "0.0.0foo"] - , ["v0.0.1", "0.0.0"] - , ["v1.0.0", "0.9.9"] - , ["v0.10.0", "0.9.0"] - , ["v0.99.0", "0.10.0"] - , ["v2.0.0", "1.2.3"] - , ["0.0.0", "v0.0.0foo"] - , ["0.0.1", "v0.0.0"] - , ["1.0.0", "v0.9.9"] - , ["0.10.0", "v0.9.0"] - , ["0.99.0", "v0.10.0"] - , ["2.0.0", "v1.2.3"] - , ["1.2.3", "1.2.3-asdf"] - , ["1.2.3-4", "1.2.3"] - , ["1.2.3-4-foo", "1.2.3"] - , ["1.2.3-5", "1.2.3-5-foo"] - , ["1.2.3-5", "1.2.3-4"] - , ["1.2.3-5-foo", "1.2.3-5-Foo"] - ].forEach(function (v) { - var v0 = v[0] - , v1 = v[1] - t.ok(gt(v0, v1), "gt('"+v0+"', '"+v1+"')") - t.ok(lt(v1, v0), "lt('"+v1+"', '"+v0+"')") - t.ok(!gt(v1, v0), "!gt('"+v1+"', '"+v0+"')") - t.ok(!lt(v0, v1), "!lt('"+v0+"', '"+v1+"')") - t.ok(eq(v0, v0), "eq('"+v0+"', '"+v0+"')") - t.ok(eq(v1, v1), "eq('"+v1+"', '"+v1+"')") - t.ok(neq(v0, v1), "neq('"+v0+"', '"+v1+"')") - t.ok(cmp(v1, "==", v1), "cmp('"+v1+"' == '"+v1+"')") - t.ok(cmp(v0, ">=", v1), "cmp('"+v0+"' >= '"+v1+"')") - t.ok(cmp(v1, "<=", v0), "cmp('"+v1+"' <= '"+v0+"')") - t.ok(cmp(v0, "!=", v1), "cmp('"+v0+"' != '"+v1+"')") - }) - t.end() -}) - -test("\nequality tests", function (t) { -; [ ["1.2.3", "v1.2.3"] - , ["1.2.3", "=1.2.3"] - , ["1.2.3", "v 1.2.3"] - , ["1.2.3", "= 1.2.3"] - , ["1.2.3", " v1.2.3"] - , ["1.2.3", " =1.2.3"] - , ["1.2.3", " v 1.2.3"] - , ["1.2.3", " = 1.2.3"] - , ["1.2.3-0", "v1.2.3-0"] - , ["1.2.3-0", "=1.2.3-0"] - , ["1.2.3-0", "v 1.2.3-0"] - , ["1.2.3-0", "= 1.2.3-0"] - , ["1.2.3-0", " v1.2.3-0"] - , ["1.2.3-0", " =1.2.3-0"] - , ["1.2.3-0", " v 1.2.3-0"] - , ["1.2.3-0", " = 1.2.3-0"] - , ["1.2.3-01", "v1.2.3-1"] - , ["1.2.3-01", "=1.2.3-1"] - , ["1.2.3-01", "v 1.2.3-1"] - , ["1.2.3-01", "= 1.2.3-1"] - , ["1.2.3-01", " v1.2.3-1"] - , ["1.2.3-01", " =1.2.3-1"] - , ["1.2.3-01", " v 1.2.3-1"] - , ["1.2.3-01", " = 1.2.3-1"] - , ["1.2.3beta", "v1.2.3beta"] - , ["1.2.3beta", "=1.2.3beta"] - , ["1.2.3beta", "v 1.2.3beta"] - , ["1.2.3beta", "= 1.2.3beta"] - , ["1.2.3beta", " v1.2.3beta"] - , ["1.2.3beta", " =1.2.3beta"] - , ["1.2.3beta", " v 1.2.3beta"] - , ["1.2.3beta", " = 1.2.3beta"] - ].forEach(function (v) { - var v0 = v[0] - , v1 = v[1] - t.ok(eq(v0, v1), "eq('"+v0+"', '"+v1+"')") - t.ok(!neq(v0, v1), "!neq('"+v0+"', '"+v1+"')") - t.ok(cmp(v0, "==", v1), "cmp("+v0+"=="+v1+")") - t.ok(!cmp(v0, "!=", v1), "!cmp("+v0+"!="+v1+")") - t.ok(!cmp(v0, "===", v1), "!cmp("+v0+"==="+v1+")") - t.ok(cmp(v0, "!==", v1), "cmp("+v0+"!=="+v1+")") - t.ok(!gt(v0, v1), "!gt('"+v0+"', '"+v1+"')") - t.ok(gte(v0, v1), "gte('"+v0+"', '"+v1+"')") - t.ok(!lt(v0, v1), "!lt('"+v0+"', '"+v1+"')") - t.ok(lte(v0, v1), "lte('"+v0+"', '"+v1+"')") - }) - t.end() -}) - - -test("\nrange tests", function (t) { -; [ ["1.0.0 - 2.0.0", "1.2.3"] - , ["1.0.0", "1.0.0"] - , [">=*", "0.2.4"] - , ["", "1.0.0"] - , ["*", "1.2.3"] - , ["*", "v1.2.3-foo"] - , [">=1.0.0", "1.0.0"] - , [">=1.0.0", "1.0.1"] - , [">=1.0.0", "1.1.0"] - , [">1.0.0", "1.0.1"] - , [">1.0.0", "1.1.0"] - , ["<=2.0.0", "2.0.0"] - , ["<=2.0.0", "1.9999.9999"] - , ["<=2.0.0", "0.2.9"] - , ["<2.0.0", "1.9999.9999"] - , ["<2.0.0", "0.2.9"] - , [">= 1.0.0", "1.0.0"] - , [">= 1.0.0", "1.0.1"] - , [">= 1.0.0", "1.1.0"] - , ["> 1.0.0", "1.0.1"] - , ["> 1.0.0", "1.1.0"] - , ["<= 2.0.0", "2.0.0"] - , ["<= 2.0.0", "1.9999.9999"] - , ["<= 2.0.0", "0.2.9"] - , ["< 2.0.0", "1.9999.9999"] - , ["<\t2.0.0", "0.2.9"] - , [">=0.1.97", "v0.1.97"] - , [">=0.1.97", "0.1.97"] - , ["0.1.20 || 1.2.4", "1.2.4"] - , [">=0.2.3 || <0.0.1", "0.0.0"] - , [">=0.2.3 || <0.0.1", "0.2.3"] - , [">=0.2.3 || <0.0.1", "0.2.4"] - , ["||", "1.3.4"] - , ["2.x.x", "2.1.3"] - , ["1.2.x", "1.2.3"] - , ["1.2.x || 2.x", "2.1.3"] - , ["1.2.x || 2.x", "1.2.3"] - , ["x", "1.2.3"] - , ["2.*.*", "2.1.3"] - , ["1.2.*", "1.2.3"] - , ["1.2.* || 2.*", "2.1.3"] - , ["1.2.* || 2.*", "1.2.3"] - , ["*", "1.2.3"] - , ["2", "2.1.2"] - , ["2.3", "2.3.1"] - , ["~2.4", "2.4.0"] // >=2.4.0 <2.5.0 - , ["~2.4", "2.4.5"] - , ["~>3.2.1", "3.2.2"] // >=3.2.1 <3.3.0 - , ["~1", "1.2.3"] // >=1.0.0 <2.0.0 - , ["~>1", "1.2.3"] - , ["~> 1", "1.2.3"] - , ["~1.0", "1.0.2"] // >=1.0.0 <1.1.0 - , ["~ 1.0", "1.0.2"] - , [">=1", "1.0.0"] - , [">= 1", "1.0.0"] - , ["<1.2", "1.1.1"] - , ["< 1.2", "1.1.1"] - , ["1", "1.0.0beta"] - , ["~v0.5.4-pre", "0.5.5"] - , ["~v0.5.4-pre", "0.5.4"] - ].forEach(function (v) { - t.ok(satisfies(v[1], v[0]), v[0]+" satisfied by "+v[1]) - }) - t.end() -}) - -test("\nnegative range tests", function (t) { -; [ ["1.0.0 - 2.0.0", "2.2.3"] - , ["1.0.0", "1.0.1"] - , [">=1.0.0", "0.0.0"] - , [">=1.0.0", "0.0.1"] - , [">=1.0.0", "0.1.0"] - , [">1.0.0", "0.0.1"] - , [">1.0.0", "0.1.0"] - , ["<=2.0.0", "3.0.0"] - , ["<=2.0.0", "2.9999.9999"] - , ["<=2.0.0", "2.2.9"] - , ["<2.0.0", "2.9999.9999"] - , ["<2.0.0", "2.2.9"] - , [">=0.1.97", "v0.1.93"] - , [">=0.1.97", "0.1.93"] - , ["0.1.20 || 1.2.4", "1.2.3"] - , [">=0.2.3 || <0.0.1", "0.0.3"] - , [">=0.2.3 || <0.0.1", "0.2.2"] - , ["2.x.x", "1.1.3"] - , ["2.x.x", "3.1.3"] - , ["1.2.x", "1.3.3"] - , ["1.2.x || 2.x", "3.1.3"] - , ["1.2.x || 2.x", "1.1.3"] - , ["2.*.*", "1.1.3"] - , ["2.*.*", "3.1.3"] - , ["1.2.*", "1.3.3"] - , ["1.2.* || 2.*", "3.1.3"] - , ["1.2.* || 2.*", "1.1.3"] - , ["2", "1.1.2"] - , ["2.3", "2.4.1"] - , ["~2.4", "2.5.0"] // >=2.4.0 <2.5.0 - , ["~2.4", "2.3.9"] - , ["~>3.2.1", "3.3.2"] // >=3.2.1 <3.3.0 - , ["~>3.2.1", "3.2.0"] // >=3.2.1 <3.3.0 - , ["~1", "0.2.3"] // >=1.0.0 <2.0.0 - , ["~>1", "2.2.3"] - , ["~1.0", "1.1.0"] // >=1.0.0 <1.1.0 - , ["<1", "1.0.0"] - , [">=1.2", "1.1.1"] - , ["1", "2.0.0beta"] - , ["~v0.5.4-beta", "0.5.4-alpha"] - , ["<1", "1.0.0beta"] - , ["< 1", "1.0.0beta"] - ].forEach(function (v) { - t.ok(!satisfies(v[1], v[0]), v[0]+" not satisfied by "+v[1]) - }) - t.end() -}) - -test("\nincrement versions test", function (t) { -; [ [ "1.2.3", "major", "2.0.0" ] - , [ "1.2.3", "minor", "1.3.0" ] - , [ "1.2.3", "patch", "1.2.4" ] - , [ "1.2.3", "build", "1.2.3-1" ] - , [ "1.2.3-4", "build", "1.2.3-5" ] - , [ "1.2.3tag", "major", "2.0.0" ] - , [ "1.2.3-tag", "major", "2.0.0" ] - , [ "1.2.3tag", "build", "1.2.3-1" ] - , [ "1.2.3-tag", "build", "1.2.3-1" ] - , [ "1.2.3-4-tag", "build", "1.2.3-5" ] - , [ "1.2.3-4tag", "build", "1.2.3-5" ] - , [ "1.2.3", "fake", null ] - , [ "fake", "major", null ] - ].forEach(function (v) { - t.equal(inc(v[0], v[1]), v[2], "inc("+v[0]+", "+v[1]+") === "+v[2]) - }) - - t.end() -}) - -test("\nreplace stars test", function (t) { -; [ [ "", "" ] - , [ "*", "" ] - , [ "> *", "" ] - , [ "<*", "" ] - , [ " >= *", "" ] - , [ "* || 1.2.3", " || 1.2.3" ] - ].forEach(function (v) { - t.equal(replaceStars(v[0]), v[1], "replaceStars("+v[0]+") === "+v[1]) - }) - - t.end() -}) - -test("\nvalid range test", function (t) { -; [ ["1.0.0 - 2.0.0", ">=1.0.0 <=2.0.0"] - , ["1.0.0", "1.0.0"] - , [">=*", ""] - , ["", ""] - , ["*", ""] - , ["*", ""] - , [">=1.0.0", ">=1.0.0"] - , [">1.0.0", ">1.0.0"] - , ["<=2.0.0", "<=2.0.0"] - , ["1", ">=1.0.0- <2.0.0-"] - , ["<=2.0.0", "<=2.0.0"] - , ["<=2.0.0", "<=2.0.0"] - , ["<2.0.0", "<2.0.0"] - , ["<2.0.0", "<2.0.0"] - , [">= 1.0.0", ">=1.0.0"] - , [">= 1.0.0", ">=1.0.0"] - , [">= 1.0.0", ">=1.0.0"] - , ["> 1.0.0", ">1.0.0"] - , ["> 1.0.0", ">1.0.0"] - , ["<= 2.0.0", "<=2.0.0"] - , ["<= 2.0.0", "<=2.0.0"] - , ["<= 2.0.0", "<=2.0.0"] - , ["< 2.0.0", "<2.0.0"] - , ["< 2.0.0", "<2.0.0"] - , [">=0.1.97", ">=0.1.97"] - , [">=0.1.97", ">=0.1.97"] - , ["0.1.20 || 1.2.4", "0.1.20||1.2.4"] - , [">=0.2.3 || <0.0.1", ">=0.2.3||<0.0.1"] - , [">=0.2.3 || <0.0.1", ">=0.2.3||<0.0.1"] - , [">=0.2.3 || <0.0.1", ">=0.2.3||<0.0.1"] - , ["||", "||"] - , ["2.x.x", ">=2.0.0- <3.0.0-"] - , ["1.2.x", ">=1.2.0- <1.3.0-"] - , ["1.2.x || 2.x", ">=1.2.0- <1.3.0-||>=2.0.0- <3.0.0-"] - , ["1.2.x || 2.x", ">=1.2.0- <1.3.0-||>=2.0.0- <3.0.0-"] - , ["x", ""] - , ["2.*.*", null] - , ["1.2.*", null] - , ["1.2.* || 2.*", null] - , ["1.2.* || 2.*", null] - , ["*", ""] - , ["2", ">=2.0.0- <3.0.0-"] - , ["2.3", ">=2.3.0- <2.4.0-"] - , ["~2.4", ">=2.4.0- <2.5.0-"] - , ["~2.4", ">=2.4.0- <2.5.0-"] - , ["~>3.2.1", ">=3.2.1- <3.3.0-"] - , ["~1", ">=1.0.0- <2.0.0-"] - , ["~>1", ">=1.0.0- <2.0.0-"] - , ["~> 1", ">=1.0.0- <2.0.0-"] - , ["~1.0", ">=1.0.0- <1.1.0-"] - , ["~ 1.0", ">=1.0.0- <1.1.0-"] - , ["<1", "<1.0.0-"] - , ["< 1", "<1.0.0-"] - , [">=1", ">=1.0.0-"] - , [">= 1", ">=1.0.0-"] - , ["<1.2", "<1.2.0-"] - , ["< 1.2", "<1.2.0-"] - , ["1", ">=1.0.0- <2.0.0-"] - ].forEach(function (v) { - t.equal(validRange(v[0]), v[1], "validRange("+v[0]+") === "+v[1]) - }) - - t.end() -}) - -test("\ncomparators test", function (t) { -; [ ["1.0.0 - 2.0.0", [[">=1.0.0", "<=2.0.0"]] ] - , ["1.0.0", [["1.0.0"]] ] - , [">=*", [[">=0.0.0-"]] ] - , ["", [[""]]] - , ["*", [[""]] ] - , ["*", [[""]] ] - , [">=1.0.0", [[">=1.0.0"]] ] - , [">=1.0.0", [[">=1.0.0"]] ] - , [">=1.0.0", [[">=1.0.0"]] ] - , [">1.0.0", [[">1.0.0"]] ] - , [">1.0.0", [[">1.0.0"]] ] - , ["<=2.0.0", [["<=2.0.0"]] ] - , ["1", [[">=1.0.0-", "<2.0.0-"]] ] - , ["<=2.0.0", [["<=2.0.0"]] ] - , ["<=2.0.0", [["<=2.0.0"]] ] - , ["<2.0.0", [["<2.0.0"]] ] - , ["<2.0.0", [["<2.0.0"]] ] - , [">= 1.0.0", [[">=1.0.0"]] ] - , [">= 1.0.0", [[">=1.0.0"]] ] - , [">= 1.0.0", [[">=1.0.0"]] ] - , ["> 1.0.0", [[">1.0.0"]] ] - , ["> 1.0.0", [[">1.0.0"]] ] - , ["<= 2.0.0", [["<=2.0.0"]] ] - , ["<= 2.0.0", [["<=2.0.0"]] ] - , ["<= 2.0.0", [["<=2.0.0"]] ] - , ["< 2.0.0", [["<2.0.0"]] ] - , ["<\t2.0.0", [["<2.0.0"]] ] - , [">=0.1.97", [[">=0.1.97"]] ] - , [">=0.1.97", [[">=0.1.97"]] ] - , ["0.1.20 || 1.2.4", [["0.1.20"], ["1.2.4"]] ] - , [">=0.2.3 || <0.0.1", [[">=0.2.3"], ["<0.0.1"]] ] - , [">=0.2.3 || <0.0.1", [[">=0.2.3"], ["<0.0.1"]] ] - , [">=0.2.3 || <0.0.1", [[">=0.2.3"], ["<0.0.1"]] ] - , ["||", [[""], [""]] ] - , ["2.x.x", [[">=2.0.0-", "<3.0.0-"]] ] - , ["1.2.x", [[">=1.2.0-", "<1.3.0-"]] ] - , ["1.2.x || 2.x", [[">=1.2.0-", "<1.3.0-"], [">=2.0.0-", "<3.0.0-"]] ] - , ["1.2.x || 2.x", [[">=1.2.0-", "<1.3.0-"], [">=2.0.0-", "<3.0.0-"]] ] - , ["x", [[""]] ] - , ["2.*.*", [[">=2.0.0-", "<3.0.0-"]] ] - , ["1.2.*", [[">=1.2.0-", "<1.3.0-"]] ] - , ["1.2.* || 2.*", [[">=1.2.0-", "<1.3.0-"], [">=2.0.0-", "<3.0.0-"]] ] - , ["1.2.* || 2.*", [[">=1.2.0-", "<1.3.0-"], [">=2.0.0-", "<3.0.0-"]] ] - , ["*", [[""]] ] - , ["2", [[">=2.0.0-", "<3.0.0-"]] ] - , ["2.3", [[">=2.3.0-", "<2.4.0-"]] ] - , ["~2.4", [[">=2.4.0-", "<2.5.0-"]] ] - , ["~2.4", [[">=2.4.0-", "<2.5.0-"]] ] - , ["~>3.2.1", [[">=3.2.1-", "<3.3.0-"]] ] - , ["~1", [[">=1.0.0-", "<2.0.0-"]] ] - , ["~>1", [[">=1.0.0-", "<2.0.0-"]] ] - , ["~> 1", [[">=1.0.0-", "<2.0.0-"]] ] - , ["~1.0", [[">=1.0.0-", "<1.1.0-"]] ] - , ["~ 1.0", [[">=1.0.0-", "<1.1.0-"]] ] - , ["<1", [["<1.0.0-"]] ] - , ["< 1", [["<1.0.0-"]] ] - , [">=1", [[">=1.0.0-"]] ] - , [">= 1", [[">=1.0.0-"]] ] - , ["<1.2", [["<1.2.0-"]] ] - , ["< 1.2", [["<1.2.0-"]] ] - , ["1", [[">=1.0.0-", "<2.0.0-"]] ] - ].forEach(function (v) { - t.equivalent(toComparators(v[0]), v[1], "toComparators("+v[0]+") === "+JSON.stringify(v[1])) - }) - - t.end() -}) diff --git a/deps/npm/node_modules/tar/examples/extracter.js b/deps/npm/node_modules/tar/examples/extracter.js deleted file mode 100644 index e150abf25d5..00000000000 --- a/deps/npm/node_modules/tar/examples/extracter.js +++ /dev/null @@ -1,11 +0,0 @@ -var tar = require("../tar.js") - , fs = require("fs") - -fs.createReadStream(__dirname + "/../test/fixtures/c.tar") - .pipe(tar.Extract({ path: __dirname + "/extract" })) - .on("error", function (er) { - console.error("error here") - }) - .on("end", function () { - console.error("done") - }) diff --git a/deps/npm/node_modules/tar/examples/reader.js b/deps/npm/node_modules/tar/examples/reader.js deleted file mode 100644 index c2584d398fc..00000000000 --- a/deps/npm/node_modules/tar/examples/reader.js +++ /dev/null @@ -1,36 +0,0 @@ -var tar = require("../tar.js") - , fs = require("fs") - -fs.createReadStream(__dirname + "/../test/fixtures/c.tar") - .pipe(tar.Reader()) - .on("extendedHeader", function (e) { - console.error("extended pax header", e.props) - e.on("end", function () { - console.error("extended pax fields:", e.fields) - }) - }) - .on("ignoredEntry", function (e) { - console.error("ignoredEntry?!?", e.props) - }) - .on("longLinkpath", function (e) { - console.error("longLinkpath entry", e.props) - e.on("end", function () { - console.error("value=%j", e.body.toString()) - }) - }) - .on("longPath", function (e) { - console.error("longPath entry", e.props) - e.on("end", function () { - console.error("value=%j", e.body.toString()) - }) - }) - .on("entry", function (e) { - console.error("entry", e.props) - e.on("data", function (c) { - console.error(" >>>" + c.toString().replace(/\n/g, "\\n")) - }) - e.on("end", function () { - console.error(" << Math.pow(10, digits) - digits) digits ++ + // itself. In that case, just bump it up again. + if (s.length + digits >= Math.pow(10, digits)) digits += 1 + // console.error("2 s=%j digits=%j s.length=%d", s.toString(), digits, s.length) var len = digits + s.length + // console.error("3 s=%j digits=%j s.length=%d len=%d", s.toString(), digits, s.length, len) + var lenBuf = new Buffer("" + len) + if (lenBuf.length + s.length !== len) { + throw new Error("Bad length calculation\n"+ + "len="+len+"\n"+ + "lenBuf="+JSON.stringify(lenBuf.toString())+"\n"+ + "lenBuf.length="+lenBuf.length+"\n"+ + "digits="+digits+"\n"+ + "s="+JSON.stringify(s.toString())+"\n"+ + "s.length="+s.length) + } - return [new Buffer("" + len), s] + return [lenBuf, s] } diff --git a/deps/npm/node_modules/tar/old/README.md b/deps/npm/node_modules/tar/old/README.md deleted file mode 100644 index aef9844978b..00000000000 --- a/deps/npm/node_modules/tar/old/README.md +++ /dev/null @@ -1 +0,0 @@ -tar for node diff --git a/deps/npm/node_modules/tar/old/doc/example.js b/deps/npm/node_modules/tar/old/doc/example.js deleted file mode 100644 index d29517e49f2..00000000000 --- a/deps/npm/node_modules/tar/old/doc/example.js +++ /dev/null @@ -1,24 +0,0 @@ -// request a tar file, and then write it -require("http").request({...}, function (resp) { - resp.pipe(tar.createParser(function (file) { - if (file.isDirectory()) { - this.pause() - return fs.mkdir(file.name, function (er) { - if (er) return this.emit("error", er) - this.resume() - }) - } else if (file.isSymbolicLink()) { - this.pause() - return fs.symlink(file.link, file.name, function (er) { - if (er) return this.emit("error", er) - this.resume() - }) - } else if (file.isFile()) { - file.pipe(fs.createWriteStream(file.name)) - } - })) - // or maybe just have it do all that internally? - resp.pipe(tar.createParser(function (file) { - this.create("/extract/target/path", file) - })) -}) diff --git a/deps/npm/node_modules/tar/old/generator.js b/deps/npm/node_modules/tar/old/generator.js deleted file mode 100644 index c2506c41517..00000000000 --- a/deps/npm/node_modules/tar/old/generator.js +++ /dev/null @@ -1,387 +0,0 @@ -module.exports = Generator -Generator.create = create - -var tar = require("./tar") - , Stream = require("stream").Stream - , Parser = require("./parser") - , fs = require("fs") - -function create (opts) { - return new Generator(opts) -} - -function Generator (opts) { - this.readable = true - this.currentFile = null - - this._paused = false - this._ended = false - this._queue = [] - - this.options = { cwd: process.cwd() } - Object.keys(opts).forEach(function (o) { - this.options[o] = opts[o] - }, this) - if (this.options.cwd.slice(-1) !== "/") { - this.options.cwd += "/" - } - - Stream.apply(this) -} - -Generator.prototype = Object.create(Stream.prototype) - -Generator.prototype.pause = function () { - if (this.currentFile) this.currentFile.pause() - this.paused = true - this.emit("pause") -} - -Generator.prototype.resume = function () { - this.paused = false - if (this.currentFile) this.currentFile.resume() - this.emit("resume") - this._processQueue() -} - -Generator.prototype.end = function () { - this._ended = true - this._processQueue() -} - -Generator.prototype.append = function (f, st) { - if (this._ended) return this.emit("error", new Error( - "Cannot append after ending")) - - // if it's a string, then treat it as a filename. - // if it's a number, then treat it as a fd - // if it's a Stats, then treat it as a stat object - // if it's a Stream, then stream it in. - var s = toFileStream(f, st) - if (!s) return this.emit("error", new TypeError( - "Invalid argument: "+f)) - - // make sure it's in the folder being added. - if (s.name.indexOf(this.options.cwd) !== 0) { - this.emit("error", new Error( - "Invalid argument: "+s.name+"\nOutside of "+this.options.cwd)) - } - - s.name = s.name.substr(this.options.cwd.length) - s.pause() - this._queue.push(s) - - if (!s._needStat) return this._processQueue() - - var self = this - fs.lstat(s.name, function (er, st) { - if (er) return self.emit("error", new Error( - "invalid file "+s.name+"\n"+er.message)) - s.mode = st.mode & 0777 - s.uid = st.uid - s.gid = st.gid - s.size = st.size - s.mtime = +st.mtime / 1000 - s.type = st.isFile() ? "0" - : st.isSymbolicLink() ? "2" - : st.isCharacterDevice() ? "3" - : st.isBlockDevice() ? "4" - : st.isDirectory() ? "5" - : st.isFIFO() ? "6" - : null - - // TODO: handle all the types in - // http://cdrecord.berlios.de/private/man/star/star.4.html - // for now, skip over unknown ones. - if (s.type === null) { - console.error("Unknown file type: " + s.name) - // kick out of the queue - var i = self._queue.indexOf(s) - if (i !== -1) self._queue.splice(i, 1) - self._processQueue() - return - } - - if (s.type === "2") return fs.readlink(s.name, function (er, n) { - if (er) return self.emit("error", new Error( - "error reading link value "+s.name+"\n"+er.message)) - s.linkname = n - s._needStat = false - self._processQueue() - }) - s._needStat = false - self._processQueue() - }) - return false -} - -function toFileStream (thing) { - if (typeof thing === "string") { - return toFileStream(fs.createReadStream(thing)) - } - - if (thing && typeof thing === "object") { - if (thing instanceof (Parser.File)) return thing - - if (thing instanceof Stream) { - if (thing.hasOwnProperty("name") && - thing.hasOwnProperty("mode") && - thing.hasOwnProperty("uid") && - thing.hasOwnProperty("gid") && - thing.hasOwnProperty("size") && - thing.hasOwnProperty("mtime") && - thing.hasOwnProperty("type")) return thing - - if (thing instanceof (fs.ReadStream)) { - thing.name = thing.path - } - - if (thing.name) { - thing._needStat = true - return thing - } - } - } - - return null -} - -Generator.prototype._processQueue = function processQueue () { - console.error("processQueue", this._queue[0]) - if (this._paused) return false - - if (this.currentFile || - this._queue.length && this._queue[0]._needStat) { - // either already processing one, or waiting on something. - return - } - - var f = this.currentFile = this._queue.shift() - if (!f) { - if (this._ended) { - // close it off with 2 blocks of nulls. - this.emit("data", new Buffer(new Array(512 * 2))) - this.emit("end") - this.emit("close") - } - return true - } - - if (f.type === Parser.File.types.Directory && - f.name.slice(-1) !== "/") { - f.name += "/" - } - - // write out a Pax header if the file isn't kosher. - if (this._needPax(f)) this._emitPax(f) - - // write out the header - f.ustar = true - this._emitHeader(f) - var fpos = 0 - , self = this - console.error("about to read body data", f) - f.on("data", function (c) { - self.emit("data", c) - self.fpos += c.length - }) - f.on("error", function (er) { self.emit("error", er) }) - f.on("end", function $END () { - // pad with \0 out to an even multiple of 512 bytes. - // this ensures that every file starts on a block. - var b = new Buffer(fpos % 512 || 512) - - for (var i = 0, l = b.length; i < l; i ++) b[i] = 0 - //console.log(b.length, b) - self.emit("data", b) - self.currentFile = null - self._processQueue() - }) - f.resume() -} - -Generator.prototype._needPax = function (f) { - // meh. why not? - return true - - return oddTextField(f.name, "NAME") || - oddTextField(f.link, "LINK") || - oddTextField(f.gname, "GNAME") || - oddTextField(f.uname, "UNAME") || - oddTextField(f.prefix, "PREFIX") -} - -// check if a text field is too long or non-ascii -function oddTextField (val, field) { - var nl = Buffer.byteLength(val) - , len = tar.fieldSize[field] - if (nl > len || nl !== val.length) return true -} - -// emit a Pax header of "key = val" for any file with -// odd or too-long field values. -Generator.prototype._emitPax = function (f) { - // since these tend to be relatively small, just go ahead - // and emit it all in-band. That saves having to keep - // track of the pax state in the generator, and we can - // go right back to emitting the file in the same tick. - var dir = f.name.replace(/[^\/]+\/?$/, "") - , base = f.name.substr(dir.length) - var pax = { name: dir + "PaxHeader/" +base - , mode: 0644 - , uid: f.uid - , gid: f.gid - , mtime: +f.mtime - // don't know size yet. - , size: -1 - , type: "x" // extended header - , ustar: true - , ustarVersion: "00" - , user: f.user || f.uname || "" - , group: f.group || f.gname || "" - , dev: { major: f.dev && f.dev.major || 0 - , minor: f.dev && f.dev.minor || 0 } - , prefix: f.prefix - , linkname: "" } - - // generate the Pax body - var kv = { path: (f.prefix ? f.prefix + "/" : "") + f.name - , atime: f.atime - , mtime: f.mtime - , ctime: f.ctime - , charset: "UTF-8" - , gid: f.gid - , uid: f.uid - , uname: f.user || f.uname || "" - , gname: f.group || f.gname || "" - , linkpath: f.linkpath || "" - , size: f.size - } - // "%d %s=%s\n", , , - // length includes the length of the length number, - // the key=val, and the \n. - var body = new Buffer(Object.keys(kv).map(function (key) { - if (!kv[key]) return ["", ""] - - var s = new Buffer(" " + key + "=" + kv[key]+"\n") - , digits = Math.floor(Math.log(s.length) / Math.log(10)) + 1 - - // if adding that many digits will make it go over that length, - // then add one to it - if (s.length > Math.pow(10, digits) - digits) digits ++ - - return [s.length + digits, s] - }).reduce(function (l, r) { - return l + r[0] + r[1] - }, "")) - - pax.size = body.length - this._emitHeader(pax) - this.emit("data", body) - // now the trailing buffer to make it an even number of 512 blocks - var b = new Buffer(512 + (body.length % 512 || 512)) - for (var i = 0, l = b.length; i < l; i ++) b[i] = 0 - this.emit("data", b) -} - -Generator.prototype._emitHeader = function (f) { - var header = new Buffer(new Array(512)) - , fields = tar.fields - , offs = tar.fieldOffs - , sz = tar.fieldSize - - addField(header, "NAME", f.name) - addField(header, "MODE", f.mode) - addField(header, "UID", f.uid) - addField(header, "GID", f.gid) - addField(header, "SIZE", f.size) - addField(header, "MTIME", +f.mtime) - // checksum is generated based on it being spaces - // then it's written as: "######\0 " - // where ### is a zero-lead 6-digit octal number - addField(header, "CKSUM", " ") - - addField(header, "TYPE", f.type) - addField(header, "LINKNAME", f.linkname || "") - if (f.ustar) { - console.error(">>> ustar!!") - addField(header, "USTAR", tar.ustar) - addField(header, "USTARVER", 0) - addField(header, "UNAME", f.user || "") - addField(header, "GNAME", f.group || "") - if (f.dev) { - addField(header, "DEVMAJ", f.dev.major || 0) - addField(header, "DEVMIN", f.dev.minor || 0) - } - addField(header, "PREFIX", f.prefix) - } else { - console.error(">>> no ustar!") - } - - // now the header is written except for checksum. - var ck = 0 - for (var i = 0; i < 512; i ++) ck += header[i] - addField(header, "CKSUM", nF(ck, 7)) - header[ offs[fields.CKSUM] + 7 ] = 0 - - this.emit("data", header) -} - -function addField (buf, field, val) { - var f = tar.fields[field] - console.error("Adding field", field, val) - val = typeof val === "number" - ? nF(val, tar.fieldSize[f]) - : new Buffer(val || "") - val.copy(buf, tar.fieldOffs[f]) -} - -function toBase256 (num, len) { - console.error("toBase256", num, len) - var positive = num > 0 - , buf = new Buffer(len) - if (!positive) { - // rare and slow - var b = num.toString(2).substr(1) - , padTo = (len - 1) * 8 - b = new Array(padTo - b.length + 1).join("0") + b - - // take the 2's complement - var ht = b.match(/^([01]*)(10*)?$/) - , head = ht[1] - , tail = ht[2] - head = head.split("1").join("2") - .split("0").join("1") - .split("2").join("0") - b = head + tail - - buf[0] = 0xFF - for (var i = 1; i < len; i ++) { - buf[i] = parseInt(buf.substr(i * 8, 8), 2) - } - return buf - } - - buf[0] = 0x80 - for (var i = 1, l = len, p = l - 1; i < l; i ++, p --) { - buf[p] = num % 256 - num = Math.floor(num / 256) - } - return buf -} - -function nF (num, size) { - var ns = num.toString(8) - - if (num < 0 || ns.length >= size) { - // make a base 256 buffer - // then return it - return toBase256(num, size) - } - - var buf = new Buffer(size) - ns = new Array(size - ns.length - 1).join("0") + ns + " " - buf[size - 1] = 0 - buf.asciiWrite(ns) - return buf -} diff --git a/deps/npm/node_modules/tar/old/parser.js b/deps/npm/node_modules/tar/old/parser.js deleted file mode 100644 index 1582ee7577e..00000000000 --- a/deps/npm/node_modules/tar/old/parser.js +++ /dev/null @@ -1,344 +0,0 @@ -module.exports = Parser -Parser.create = create -Parser.File = File - -var tar = require("./tar") - , Stream = require("stream").Stream - , fs = require("fs") - -function create (cb) { - return new Parser(cb) -} - -var s = 0 - , HEADER = s ++ - , BODY = s ++ - , PAD = s ++ - -function Parser (cb) { - this.fields = tar.fields - this.fieldSize = tar.fieldSize - this.state = HEADER - this.position = 0 - this.currentFile = null - this._header = [] - this._headerPosition = 0 - this._bodyPosition = 0 - this.writable = true - Stream.apply(this) - if (cb) this.on("file", cb) -} - -Parser.prototype = Object.create(Stream.prototype) - -Parser.prototype.write = function (chunk) { - switch (this.state) { - case HEADER: - // buffer up to 512 bytes in memory, and then - // parse it, emit a "file" event, and stream the rest - this._header.push(chunk) - this._headerPosition += chunk.length - if (this._headerPosition >= tar.headerSize) { - return this._parseHeader() - } - return true - - case BODY: - // stream it through until the end of the file is reached, - // and then step over any \0 byte padding. - var cl = chunk.length - , bp = this._bodyPosition - , np = cl + bp - , s = this.currentFile.size - if (np < s) { - this._bodyPosition = np - return this.currentFile.write(chunk) - } - var c = chunk.slice(0, (s - bp)) - this.currentFile.write(c) - this._closeFile() - return this.write(chunk.slice(s - bp)) - - case PAD: - for (var i = 0, l = chunk.length; i < l; i ++) { - if (chunk[i] !== 0) { - this.state = HEADER - return this.write(chunk.slice(i)) - } - } - } - return true -} - -Parser.prototype.end = function (chunk) { - if (chunk) this.write(chunk) - if (this.currentFile) this._closeFile() - this.emit("end") - this.emit("close") -} - -// at this point, we have at least 512 bytes of header chunks -Parser.prototype._parseHeader = function () { - var hp = this._headerPosition - , last = this._header.pop() - , rem - - if (hp < 512) return this.emit("error", new Error( - "Trying to parse header before finished")) - - if (hp > 512) { - var ll = last.length - , llIntend = 512 - hp + ll - rem = last.slice(llIntend) - last = last.slice(0, llIntend) - } - this._header.push(last) - - var fields = tar.fields - , pos = 0 - , field = 0 - , fieldEnds = tar.fieldEnds - , fieldSize = tar.fieldSize - , set = {} - , fpos = 0 - - Object.keys(fieldSize).forEach(function (f) { - set[ fields[f] ] = new Buffer(fieldSize[f]) - }) - - this._header.forEach(function (chunk) { - for (var i = 0, l = chunk.length; i < l; i ++, pos ++, fpos ++) { - if (pos >= fieldEnds[field]) { - field ++ - fpos = 0 - } - // header is null-padded, so when the fields run out, - // just finish. - if (null === fields[field]) return - set[fields[field]][fpos] = chunk[i] - } - }) - - this._header.length = 0 - - // type definitions here: - // http://cdrecord.berlios.de/private/man/star/star.4.html - var type = set.TYPE.toString() - , file = this.currentFile = new File(set) - if (type === "\0" || - type >= "0" && type <= "7") { - this._addExtended(file) - this.emit("file", file) - } else if (type === "g") { - this._global = this._global || {} - readPax(this, file, this._global) - } else if (type === "h" || type === "x" || type === "X") { - this._extended = this._extended || {} - readPax(this, file, this._extended) - } else if (type === "K") { - this._readLongField(file, "linkname") - } else if (type === "L") { - this._readLongField(file, "name") - } - - this.state = BODY - if (rem) return this.write(rem) - return true -} - -function readPax (self, file, obj) { - var buf = "" - file.on("data", function (c) { - buf += c - var lines = buf.split(/\r?\n/) - buf = lines.pop() - lines.forEach(function (line) { - line = line.match(/^[0-9]+ ([^=]+)=(.*)/) - if (!line) return - obj[line[1]] = line[2] - }) - }) -} - -Parser.prototype._readLongField = function (f, field) { - var self = this - this._longFields[field] = "" - f.on("data", function (c) { - self._longFields[field] += c - }) -} - -Parser.prototype._addExtended = function (file) { - var g = this._global || {} - , e = this._extended || {} - file.extended = {} - ;[g, e].forEach(function (h) { - Object.keys(h).forEach(function (k) { - file.extended[k] = h[k] - // handle known fields - switch (k) { - case "path": file.name = h[k]; break - case "ctime": file.ctime = new Date(1000 * h[k]); break - case "mtime": file.mtime = new Date(1000 * h[k]); break - case "gid": file.gid = parseInt(h[k], 10); break - case "uid": file.uid = parseInt(h[k], 10); break - case "charset": file.charset = h[k]; break - case "gname": file.group = h[k]; break - case "uname": file.user = h[k]; break - case "linkpath": file.linkname = h[k]; break - case "size": file.size = parseInt(h[k], 10); break - case "SCHILY.devmajor": file.dev.major = parseInt(h[k], 10); break - case "SCHILY.devminor": file.dev.minor = parseInt(h[k], 10); break - } - }) - }) - var lf = this._longFields || {} - Object.keys(lf).forEach(function (f) { - file[f] = lf[f] - }) - this._extended = {} - this._longFields = {} -} - -Parser.prototype._closeFile = function () { - if (!this.currentFile) return this.emit("error", new Error( - "Trying to close without current file")) - - this._headerPosition = this._bodyPosition = 0 - this.currentFile.end() - this.currentFile = null - this.state = PAD -} - - -// file stuff - -function strF (f) { - return f.toString("ascii").split("\0").shift() || "" -} - -function parse256 (buf) { - // first byte MUST be either 80 or FF - // 80 for positive, FF for 2's comp - var positive - if (buf[0] === 0x80) positive = true - else if (buf[0] === 0xFF) positive = false - else return 0 - - if (!positive) { - // this is rare enough that the string slowness - // is not a big deal. You need *very* old files - // to ever hit this path. - var s = "" - for (var i = 1, l = buf.length; i < l; i ++) { - var byte = buf[i].toString(2) - if (byte.length < 8) { - byte = new Array(byte.length - 8 + 1).join("1") + byte - } - s += byte - } - var ht = s.match(/^([01]*)(10*)$/) - , head = ht[1] - , tail = ht[2] - head = head.split("1").join("2") - .split("0").join("1") - .split("2").join("0") - return -1 * parseInt(head + tail, 2) - } - - var sum = 0 - for (var i = 1, l = buf.length, p = l - 1; i < l; i ++, p--) { - sum += buf[i] * Math.pow(256, p) - } - return sum -} - -function nF (f) { - if (f[0] & 128 === 128) { - return parse256(f) - } - return parseInt(f.toString("ascii").replace(/\0+/g, "").trim(), 8) || 0 -} - -function bufferMatch (a, b) { - if (a.length != b.length) return false - for (var i = 0, l = a.length; i < l; i ++) { - if (a[i] !== b[i]) return false - } - return true -} - -function File (fields) { - this._raw = fields - this.name = strF(fields.NAME) - this.mode = nF(fields.MODE) - this.uid = nF(fields.UID) - this.gid = nF(fields.GID) - this.size = nF(fields.SIZE) - this.mtime = new Date(nF(fields.MTIME) * 1000) - this.cksum = nF(fields.CKSUM) - this.type = strF(fields.TYPE) - this.linkname = strF(fields.LINKNAME) - - this.ustar = bufferMatch(fields.USTAR, tar.ustar) - - if (this.ustar) { - this.ustarVersion = nF(fields.USTARVER) - this.user = strF(fields.UNAME) - this.group = strF(fields.GNAME) - this.dev = { major: nF(fields.DEVMAJ) - , minor: nF(fields.DEVMIN) } - this.prefix = strF(fields.PREFIX) - if (this.prefix) { - this.name = this.prefix + "/" + this.name - } - } - - this.writable = true - this.readable = true - Stream.apply(this) -} - -File.prototype = Object.create(Stream.prototype) - -File.types = { File: "0" - , HardLink: "1" - , SymbolicLink: "2" - , CharacterDevice: "3" - , BlockDevice: "4" - , Directory: "5" - , FIFO: "6" - , ContiguousFile: "7" } - -Object.keys(File.types).forEach(function (t) { - File.prototype["is"+t] = function () { - return File.types[t] === this.type - } - File.types[ File.types[t] ] = File.types[t] -}) - -// contiguous files are treated as regular files for most purposes. -File.prototype.isFile = function () { - return this.type === "0" && this.name.slice(-1) !== "/" - || this.type === "7" -} - -File.prototype.isDirectory = function () { - return this.type === "5" - || this.type === "0" && this.name.slice(-1) === "/" -} - -File.prototype.write = function (c) { - this.emit("data", c) - return true -} - -File.prototype.end = function (c) { - if (c) this.write(c) - this.emit("end") - this.emit("close") -} - -File.prototype.pause = function () { this.emit("pause") } - -File.prototype.resume = function () { this.emit("resume") } diff --git a/deps/npm/node_modules/tar/old/tar.js b/deps/npm/node_modules/tar/old/tar.js deleted file mode 100644 index f70c081d277..00000000000 --- a/deps/npm/node_modules/tar/old/tar.js +++ /dev/null @@ -1,74 +0,0 @@ -// field names that every tar file must have. -// header is padded to 512 bytes. -var f = 0 - , fields = {} - , NAME = fields.NAME = f++ - , MODE = fields.MODE = f++ - , UID = fields.UID = f++ - , GID = fields.GID = f++ - , SIZE = fields.SIZE = f++ - , MTIME = fields.MTIME = f++ - , CKSUM = fields.CKSUM = f++ - , TYPE = fields.TYPE = f++ - , LINKNAME = fields.LINKNAME = f++ - , headerSize = 512 - , fieldSize = [] - -fieldSize[NAME] = 100 -fieldSize[MODE] = 8 -fieldSize[UID] = 8 -fieldSize[GID] = 8 -fieldSize[SIZE] = 12 -fieldSize[MTIME] = 12 -fieldSize[CKSUM] = 8 -fieldSize[TYPE] = 1 -fieldSize[LINKNAME] = 100 - -// "ustar\0" may introduce another bunch of headers. -// these are optional, and will be nulled out if not present. -var ustar = new Buffer(6) -ustar.asciiWrite("ustar\0") - -var USTAR = fields.USTAR = f++ - , USTARVER = fields.USTARVER = f++ - , UNAME = fields.UNAME = f++ - , GNAME = fields.GNAME = f++ - , DEVMAJ = fields.DEVMAJ = f++ - , DEVMIN = fields.DEVMIN = f++ - , PREFIX = fields.PREFIX = f++ -// terminate fields. -fields[f] = null - -fieldSize[USTAR] = 6 -fieldSize[USTARVER] = 2 -fieldSize[UNAME] = 32 -fieldSize[GNAME] = 32 -fieldSize[DEVMAJ] = 8 -fieldSize[DEVMIN] = 8 -fieldSize[PREFIX] = 155 - -var fieldEnds = {} - , fieldOffs = {} - , fe = 0 -for (var i = 0; i < f; i ++) { - fieldOffs[i] = fe - fieldEnds[i] = (fe += fieldSize[i]) -} - -// build a translation table of field names. -Object.keys(fields).forEach(function (f) { - fields[fields[f]] = f -}) - -exports.ustar = ustar -exports.fields = fields -exports.fieldSize = fieldSize -exports.fieldOffs = fieldOffs -exports.fieldEnds = fieldEnds -exports.headerSize = headerSize - -var Parser = exports.Parser = require("./parser") -exports.createParser = Parser.create - -var Generator = exports.Generator = require("./generator") -exports.createGenerator = Generator.create diff --git a/deps/npm/node_modules/tar/old/test/test-generator.js b/deps/npm/node_modules/tar/old/test/test-generator.js deleted file mode 100644 index dea27321616..00000000000 --- a/deps/npm/node_modules/tar/old/test/test-generator.js +++ /dev/null @@ -1,13 +0,0 @@ -// pipe this file to tar vt - -var Generator = require("../generator") - , fs = require("fs") - , path = require("path") - , ohm = fs.createReadStream(path.resolve(__dirname, "tar-files/Ω.txt")) - , foo = path.resolve(__dirname, "tar-files/foo.js") - , gen = Generator.create({cwd: __dirname}) - -gen.pipe(process.stdout) -gen.append(ohm) -//gen.append(foo) -gen.end() diff --git a/deps/npm/node_modules/tar/old/test/test-generator.tar b/deps/npm/node_modules/tar/old/test/test-generator.tar deleted file mode 100644 index 6752aa51de2f8362d8db9c622e8c44e5ae7c8463..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3260 zcmeHHOA5j;5Y0NLm?o4@kU<8GnrD|xR6Q;-Q;cZVZJYu z7hE+tlxJVh)~;E3xA)cT`Iv?#u)%=-RpCKa0%tbTarjZD=iHt1G|%} zY9H)&vz*NN0*>Y03gjf=*6x%pDBjlP-CM!?mysJ=8T(SM l_)}Ub!Cui5jfPUL#4^Tme?G>_obzS|G6R``%)qz|yZ~{8NM-;4 diff --git a/deps/npm/node_modules/tar/old/test/test-generator.txt b/deps/npm/node_modules/tar/old/test/test-generator.txt deleted file mode 100644 index 349757ba692925ea24ac27eb77f256c6c0052fb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3261 zcmeHHOA5j;5Y0NLm?o4@kU;zXEMbK;-VB(5Y5}!K5mV_1>9us@awi47_IyE*&~S8NXQK%1Ke)X<7YK)tAG{@rB(&1fa5Avk zxuW#JE*I0mm``AvudP5%5>8D|>5SrRnV-EC{0sP{6n<5K=O6nCp0TJqoeKr9N9Uqg hDF}?c>?VE4w9XZ;`%Bc9zoeZ=Ck2uMNr9vQ<5vbbNZP$|5kL z1Z1mJA^WRUFmusQ7k!&bsXOm?-Q~oTR#lh7Lo;JjawhYxLS*E(kMCuIFua5R=?en6 zi}hzHQ2}bRA?wbXA2oK&#-K=pe0|(LJ-@B?;kP8EokJiNq(;4NzLIV&ZI}hRQEm=( z^HHL>D;$d}W;*v<07z>-yZ`AonC!o{426VS6f?bZ;ro9&PJv`U6UYQIflOct1pWYk CGhK-Q diff --git a/deps/npm/node_modules/tar/old/test/test-tar.txt b/deps/npm/node_modules/tar/old/test/test-tar.txt deleted file mode 100644 index d9ac62cc5823cde33a0c0052136308972fa421b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3073 zcmeH{&2GXl499!UQ{)8z+xcn_J#k^u4oIAKj3Cvbv2JR!sjtM#@Js~JUMkTONJxz@ zk^i (http://blog.izs.me/)", "name": "tar", "description": "tar for node", - "version": "0.1.0", + "version": "0.1.3", "repository": { "type": "git", "url": "git://github.com/isaacs/node-tar.git" @@ -17,7 +17,7 @@ "dependencies": { "inherits": "1.x", "block-stream": "*", - "fstream": "~0.1" + "fstream": "0.1" }, "devDependencies": { "tap": "0.x", diff --git a/deps/npm/node_modules/tar/test/extract.js b/deps/npm/node_modules/tar/test/extract.js deleted file mode 100644 index e2dea5c0535..00000000000 --- a/deps/npm/node_modules/tar/test/extract.js +++ /dev/null @@ -1,406 +0,0 @@ -var tap = require("tap") - , tar = require("../tar.js") - , fs = require("fs") - , path = require("path") - , file = path.resolve(__dirname, "fixtures/c.tar") - , target = path.resolve(__dirname, "tmp/extract-test") - , index = 0 - , fstream = require("fstream") - - , ee = 0 - , expectEntries = -[ { path: 'c.txt', - mode: '644', - type: '0', - depth: undefined, - size: 513, - linkpath: '', - nlink: undefined, - dev: undefined, - ino: undefined }, - { path: 'cc.txt', - mode: '644', - type: '0', - depth: undefined, - size: 513, - linkpath: '', - nlink: undefined, - dev: undefined, - ino: undefined }, - { path: 'r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: '644', - type: '0', - depth: undefined, - size: 100, - linkpath: '', - nlink: undefined, - dev: undefined, - ino: undefined }, - { path: 'Ω.txt', - mode: '644', - type: '0', - depth: undefined, - size: 2, - linkpath: '', - nlink: undefined, - dev: undefined, - ino: undefined }, - { path: 'Ω.txt', - mode: '644', - type: '0', - depth: undefined, - size: 2, - linkpath: '', - nlink: 1, - dev: 234881026, - ino: 51693379 }, - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: '644', - type: '0', - depth: undefined, - size: 200, - linkpath: '', - nlink: 1, - dev: 234881026, - ino: 51681874 }, - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: '644', - type: '0', - depth: undefined, - size: 201, - linkpath: '', - nlink: undefined, - dev: undefined, - ino: undefined }, - { path: '200LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL', - mode: '777', - type: '2', - depth: undefined, - size: 0, - linkpath: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - nlink: undefined, - dev: undefined, - ino: undefined }, - { path: '200-hard', - mode: '644', - type: '0', - depth: undefined, - size: 200, - linkpath: '', - nlink: 2, - dev: 234881026, - ino: 51681874 }, - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: '644', - type: '1', - depth: undefined, - size: 0, - linkpath: path.resolve(target, '200-hard'), - nlink: 2, - dev: 234881026, - ino: 51681874 } ] - - , ef = 0 - , expectFiles = -[ { path: '', - mode: '40755', - type: 'Directory', - depth: 0, - size: 306, - linkpath: undefined, - nlink: 9 }, - { path: '/200-hard', - mode: '100644', - type: 'File', - depth: 1, - size: 200, - linkpath: undefined, - nlink: 2 }, - { path: '/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: '100644', - type: 'Link', - depth: 1, - size: 200, - linkpath: '/Users/isaacs/dev-src/js/node-tar/test/tmp/extract-test/200-hard', - nlink: 2 }, - { path: '/200LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL', - mode: '120777', - type: 'SymbolicLink', - depth: 1, - size: 200, - linkpath: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - nlink: 1 }, - { path: '/c.txt', - mode: '100644', - type: 'File', - depth: 1, - size: 513, - linkpath: undefined, - nlink: 1 }, - { path: '/cc.txt', - mode: '100644', - type: 'File', - depth: 1, - size: 513, - linkpath: undefined, - nlink: 1 }, - { path: '/r', - mode: '40755', - type: 'Directory', - depth: 1, - size: 102, - linkpath: undefined, - nlink: 3 }, - { path: '/r/e', - mode: '40755', - type: 'Directory', - depth: 2, - size: 102, - linkpath: undefined, - nlink: 3 }, - { path: '/r/e/a', - mode: '40755', - type: 'Directory', - depth: 3, - size: 102, - linkpath: undefined, - nlink: 3 }, - { path: '/r/e/a/l', - mode: '40755', - type: 'Directory', - depth: 4, - size: 102, - linkpath: undefined, - nlink: 3 }, - { path: '/r/e/a/l/l', - mode: '40755', - type: 'Directory', - depth: 5, - size: 102, - linkpath: undefined, - nlink: 3 }, - { path: '/r/e/a/l/l/y', - mode: '40755', - type: 'Directory', - depth: 6, - size: 102, - linkpath: undefined, - nlink: 3 }, - { path: '/r/e/a/l/l/y/-', - mode: '40755', - type: 'Directory', - depth: 7, - size: 102, - linkpath: undefined, - nlink: 3 }, - { path: '/r/e/a/l/l/y/-/d', - mode: '40755', - type: 'Directory', - depth: 8, - size: 102, - linkpath: undefined, - nlink: 3 }, - { path: '/r/e/a/l/l/y/-/d/e', - mode: '40755', - type: 'Directory', - depth: 9, - size: 102, - linkpath: undefined, - nlink: 3 }, - { path: '/r/e/a/l/l/y/-/d/e/e', - mode: '40755', - type: 'Directory', - depth: 10, - size: 102, - linkpath: undefined, - nlink: 3 }, - { path: '/r/e/a/l/l/y/-/d/e/e/p', - mode: '40755', - type: 'Directory', - depth: 11, - size: 102, - linkpath: undefined, - nlink: 3 }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-', - mode: '40755', - type: 'Directory', - depth: 12, - size: 102, - linkpath: undefined, - nlink: 3 }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f', - mode: '40755', - type: 'Directory', - depth: 13, - size: 102, - linkpath: undefined, - nlink: 3 }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o', - mode: '40755', - type: 'Directory', - depth: 14, - size: 102, - linkpath: undefined, - nlink: 3 }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l', - mode: '40755', - type: 'Directory', - depth: 15, - size: 102, - linkpath: undefined, - nlink: 3 }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d', - mode: '40755', - type: 'Directory', - depth: 16, - size: 102, - linkpath: undefined, - nlink: 3 }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e', - mode: '40755', - type: 'Directory', - depth: 17, - size: 102, - linkpath: undefined, - nlink: 3 }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r', - mode: '40755', - type: 'Directory', - depth: 18, - size: 102, - linkpath: undefined, - nlink: 3 }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-', - mode: '40755', - type: 'Directory', - depth: 19, - size: 102, - linkpath: undefined, - nlink: 3 }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p', - mode: '40755', - type: 'Directory', - depth: 20, - size: 102, - linkpath: undefined, - nlink: 3 }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a', - mode: '40755', - type: 'Directory', - depth: 21, - size: 102, - linkpath: undefined, - nlink: 3 }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t', - mode: '40755', - type: 'Directory', - depth: 22, - size: 102, - linkpath: undefined, - nlink: 3 }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h', - mode: '40755', - type: 'Directory', - depth: 23, - size: 102, - linkpath: undefined, - nlink: 3 }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: '100644', - type: 'File', - depth: 24, - size: 100, - linkpath: undefined, - nlink: 1 }, - { path: '/Ω.txt', - mode: '100644', - type: 'File', - depth: 1, - size: 2, - linkpath: undefined, - nlink: 1 } ] - - - -// The extract class basically just pipes the input -// to a Reader, and then to a fstream.DirWriter - -// So, this is as much a test of fstream.Reader and fstream.Writer -// as it is of tar.Extract, but it sort of makes sense. - -tap.test("extract test", function (t) { - var extract = tar.Extract(target) - var inp = fs.createReadStream(file) - - // give it a weird buffer size to try to break in odd places - inp.bufferSize = 1234 - - inp.pipe(extract) - - extract.on("end", function () { - t.equal(ee, expectEntries.length, "should see "+ee+" entries") - - // should get no more entries after end - extract.removeAllListeners("entry") - extract.on("entry", function (e) { - t.fail("Should not get entries after end!") - }) - - next() - }) - - extract.on("entry", function (entry) { - var found = - { path: entry.path - , mode: entry.props.mode.toString(8) - , type: entry.props.type - , depth: entry.props.depth - , size: entry.props.size - , linkpath: entry.props.linkpath - , nlink: entry.props.nlink - , dev: entry.props.dev - , ino: entry.props.ino - } - - var wanted = expectEntries[ee ++] - - t.equivalent(found, wanted, "tar entry " + ee + " " + wanted.path) - }) - - function next () { - var r = fstream.Reader({ path: target - , type: "Directory" - // this is just to encourage consistency - , sort: "alpha" }) - - r.on("ready", function () { - foundEntry(r) - }) - - r.on("end", finish) - - function foundEntry (entry) { - var p = entry.path.substr(target.length) - var found = - { path: p - , mode: entry.props.mode.toString(8) - , type: entry.props.type - , depth: entry.props.depth - , size: entry.props.size - , linkpath: entry.props.linkpath - , nlink: entry.props.nlink - } - - var wanted = expectFiles[ef ++] - - t.equivalent(found, wanted, "unpacked file " + ef + " " + wanted.path) - - entry.on("entry", foundEntry) - } - - function finish () { - t.equal(ef, expectFiles.length, "should have "+ef+" items") - t.end() - } - } -}) diff --git a/deps/npm/node_modules/tar/test/fixtures/200.tar b/deps/npm/node_modules/tar/test/fixtures/200.tar deleted file mode 100644 index 7e3a8f3e77fa6081a8c32bfcfcdab57557bb60e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3072 zcmeHHO;5ux49z*eBEMkR&PT%`2S7-hv;zVOiDT4dq5?Y97POy_E3G>)t*2$0pw1!6 z^Go8`etC%7d5WvlToFK-!-N0;XN(eHi^3t#Y}BuJW(_JtX9+E8c7QgdL8z@bgMGDK zY&evvjj?QxU&yre`nY@dnBh@sgn3aeLQtQvdkwkDpQEM5&XfeI?5d9xP~)}p{phi{ z#|nc;PHL}~i`$#WyZPezepWV#8Jl{~>i1ca+>TGoSia0w={t}%-XrjC(gR-An_$s- z^o5b=2e^K(>bHRMqN;ru%o)nwOJh|3ntSk<{f~ OrwmLPm@@FUGw=gL<}U)LWSD>|5lc=c#xhHE6ydzL=6+;bbZ%9j9p)5 zS>KQb_ya^D4n!yCQvivWHHc@La>7$TZl5+GV6%1)nQ(Q*huODTNyNDZ+(z)i3hfG= ze}y1S4z1e!n;MYgsnmGK@&6}pzc+QQwfA_^eE9o6dddTc6iYS8kr|LBjROdo!<^3f YU)(g!F5coRKEAUtO@XFBQ=mu%z6f;$5C8xG diff --git a/deps/npm/node_modules/tar/test/fixtures/200longname.tar b/deps/npm/node_modules/tar/test/fixtures/200longname.tar deleted file mode 100644 index 5556567e1511b94317eded255d1827ea936402a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3072 zcmeH{K?=km3`MiUSkcc&cFxQL|-}>^KU4?+vxh+=W>P(NjZ&US%<3Gf0fEPAs zj{OHyYo&t6Y2c5)j~t}0|A{pBk`)gcP)daw1m diff --git a/deps/npm/node_modules/tar/test/fixtures/a.hex b/deps/npm/node_modules/tar/test/fixtures/a.hex deleted file mode 100644 index 529e9cbb368..00000000000 --- a/deps/npm/node_modules/tar/test/fixtures/a.hex +++ /dev/null @@ -1,14 +0,0 @@ --- header -- -612e7478740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000303030363434200030353737363120003030303032342000303030303030303034303120313136353133363033333320303132343531002030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 a.txt...............................................................................................000644..057761..000024..00000000401.11651360333.012451..0................................................................................................... -00757374617200303069736161637300000000000000000000000000000000000000000000000000007374616666000000000000000000000000000000000000000000000000000000303030303030200030303030303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 .ustar.00isaacs..........................staff...........................000000..000000......................................................................................................................................................................... - --- file contents -- -61616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -61000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 a............................................................................................................................................................................................................................................................... - --- tar eof -- -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ................................................................................................................................................................................................................................................................ -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ................................................................................................................................................................................................................................................................ -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ................................................................................................................................................................................................................................................................ -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ................................................................................................................................................................................................................................................................ - diff --git a/deps/npm/node_modules/tar/test/fixtures/a.tar b/deps/npm/node_modules/tar/test/fixtures/a.tar deleted file mode 100644 index 27604d7ec37fb71f6906a9ca689a05947faf3421..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2048 zcmeHENeX~44D3_#0!f-K?+HS|tF7SkjaZNMRuSx6LYR=uOk^s1F@1rE!8tJKV+^EK zVb8w8ApueF!~vNZkgW4$0Q<_iwr{z}s#2CLGUxV19ZRWAS2MRMc$oYYC4a}KzA?m% M1V#cQf%g(P0GjxA*Z=?k diff --git a/deps/npm/node_modules/tar/test/fixtures/a.txt b/deps/npm/node_modules/tar/test/fixtures/a.txt deleted file mode 100644 index a6c406965f6..00000000000 --- a/deps/npm/node_modules/tar/test/fixtures/a.txt +++ /dev/null @@ -1 +0,0 @@ -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \ No newline at end of file diff --git a/deps/npm/node_modules/tar/test/fixtures/b.hex b/deps/npm/node_modules/tar/test/fixtures/b.hex deleted file mode 100644 index cf36eb6bbbd..00000000000 --- a/deps/npm/node_modules/tar/test/fixtures/b.hex +++ /dev/null @@ -1,14 +0,0 @@ --- normal header -- -622e7478740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000303030363434200030353737363120003030303032342000303030303030303130303020313136353133363036373720303132343631002030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 b.txt...............................................................................................000644..057761..000024..00000001000.11651360677.012461..0................................................................................................... -00757374617200303069736161637300000000000000000000000000000000000000000000000000007374616666000000000000000000000000000000000000000000000000000000303030303030200030303030303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 .ustar.00isaacs..........................staff...........................000000..000000......................................................................................................................................................................... - --- file contents - exactly 512 bytes, no null padding -- -62626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262 bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb -62626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262 bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb - --- tar eof blocks -- -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ................................................................................................................................................................................................................................................................ -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ................................................................................................................................................................................................................................................................ -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ................................................................................................................................................................................................................................................................ -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ................................................................................................................................................................................................................................................................ - diff --git a/deps/npm/node_modules/tar/test/fixtures/b.tar b/deps/npm/node_modules/tar/test/fixtures/b.tar deleted file mode 100644 index 2d8e7b3ac7a3d7a20bc21576e0b65c745c8efdda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2048 zcmeHF(F%Yd4D?g>1+kgV@6kZ$H4Xaw7S^M^8A9I67(2GRV`0iiR&9ZZYz!#0&M`?9 z=&LUvDL}-QW=3`nkhEb^fNf=!?R(086De!*eo6IE$NYRnVzY$QdCC{ksQd5 zWqa2FX?HgJnD^|C^6~m^9r-N)V3dj@(AFBHCl%r9bwL1(5sjul3rfU*LTMAl;CET| z=)Z2)SxHM-+-6yR`}~a5?eg+@@WW=BO~oBO2L;MQIcW@x2E~nGG29r)bN>c_)cgzd zzj6BC2p#l42QQqo@(Y{KgZ}4`vf<9bAp$-6ACQ6r=l=`TsHKcSNr~#f^?#WZNtRsG z?@w};%&Ar+H}rOytfd*}Nzdf104z{#)3Re+};Z?~Vf_Cw~5iI=;!) zSJRsMBLQ)~Ui>VkC~;z?oxsGkWslk>U~ojow_o0$U(CLZ=f&@-kSa|Pgc%9hv@e#c zDV^v}Bn>jcv}s;mFP1;17{U$?-rivje^S4hyifjv{omk<`z_diZj29WzK#7C0A7N@ z$X$(fo&SPX_5GiV|0P)#kV;4h_Md}O1VZfq_#(d-p6VF1?ZTMU{kB{fg+i;5Oyk+b zySJaojrsavoRg+c#&k@xLE4+rDJS}6zpolsK%;A9-FuH?UYI#4D5mHn4mX=@^o zQUPoJAIX1T{$C$_SY+LKH5~NcmQ^41aG4y|A+jK*Qdqyh>sFJ1SNJ@ z%Ef(rTT-EpXjD%O+KZ&uzX|4;6J-1k4M=Rahc`t$gP|&5&>iv!QGj>xP@+~1GgqIgnYM0_(4I+AGa5#u~ z(yHl>{s{xoz`Yj~CP3;ui35C<>N>uaHDpDZO9)d%gs#O{0Xl!VpMuKfuSR3Y&98tA O#tfJNGhhZjF|Y%u7Z)G^ diff --git a/deps/npm/node_modules/tar/test/fixtures/hardlink-1 b/deps/npm/node_modules/tar/test/fixtures/hardlink-1 deleted file mode 100644 index c2b6e5096de..00000000000 --- a/deps/npm/node_modules/tar/test/fixtures/hardlink-1 +++ /dev/null @@ -1 +0,0 @@ -200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc \ No newline at end of file diff --git a/deps/npm/node_modules/tar/test/fixtures/hardlink-2 b/deps/npm/node_modules/tar/test/fixtures/hardlink-2 deleted file mode 100644 index c2b6e5096de..00000000000 --- a/deps/npm/node_modules/tar/test/fixtures/hardlink-2 +++ /dev/null @@ -1 +0,0 @@ -200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc \ No newline at end of file diff --git a/deps/npm/node_modules/tar/test/fixtures/omega.hex b/deps/npm/node_modules/tar/test/fixtures/omega.hex deleted file mode 100644 index eef879682e9..00000000000 --- a/deps/npm/node_modules/tar/test/fixtures/omega.hex +++ /dev/null @@ -1,22 +0,0 @@ --- pax header -- -5061784865616465722fcea92e747874000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000303030363434200030353737363120003030303032342000303030303030303031373020313135343337313036313120303135303531002078000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 PaxHeader/Ω.txt....................................................................................000644..057761..000024..00000000170.11543710611.015051..x................................................................................................... -00757374617200303069736161637300000000000000000000000000000000000000000000000000007374616666000000000000000000000000000000000000000000000000000000303030303030200030303030303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 .ustar.00isaacs..........................staff...........................000000..000000......................................................................................................................................................................... - --- pax header contents -- -313520706174683dcea92e7478740a3230206374696d653d313330313435393237380a3230206174696d653d313330313431353738330a323420534348494c592e6465763d3233343838313032360a323320534348494c592e696e6f3d32333737323936360a313820534348494c592e6e6c696e6b3d310a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 15.path=Ω.txt.20.ctime=1301459278.20.atime=1301415783.24.SCHILY.dev=234881026.23.SCHILY.ino=23772966.18.SCHILY.nlink=1......................................................................................................................................... -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ................................................................................................................................................................................................................................................................ - --- normal header -- -cea92e74787400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000303030363434200030353737363120003030303032342000303030303030303030303220313135343337313036313120303133303732002030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 Ω.txt..............................................................................................000644..057761..000024..00000000002.11543710611.013072..0................................................................................................... -00757374617200303069736161637300000000000000000000000000000000000000000000000000007374616666000000000000000000000000000000000000000000000000000000303030303030200030303030303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 .ustar.00isaacs..........................staff...........................000000..000000......................................................................................................................................................................... - --- file contents -- -cea90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 Ω.............................................................................................................................................................................................................................................................. -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ................................................................................................................................................................................................................................................................ - --- tar eof marker -- -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ................................................................................................................................................................................................................................................................ -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ................................................................................................................................................................................................................................................................ -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ................................................................................................................................................................................................................................................................ -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ................................................................................................................................................................................................................................................................ - diff --git a/deps/npm/node_modules/tar/test/fixtures/omega.tar b/deps/npm/node_modules/tar/test/fixtures/omega.tar deleted file mode 100644 index 6590e58ce41c56920dfe19fa8b9d18c6f5d8d839..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3072 zcmeH{&x*n@5XO7XQ{)NUnf#l0=xHws9u_=#3|iT;S{ECoujI@0nKs3(1qL6ZasFs;GvD|uLI8kKif5pS42Cs?=<@$S0*4)Ou3)56k^Izw`^ZV;F0etJrW09i-RC+GR zcA6VB)MO^V z)agG^)c>n|JV@-#HqZIC`a0F@C!n>Y?!rI&xXBpmDeY|ioD f>wnLG0a{1>?-2~Qi~1i9+ZZ__5D|z73>kq>zL21R diff --git a/deps/npm/node_modules/tar/test/fixtures/packtest/omega.txt b/deps/npm/node_modules/tar/test/fixtures/packtest/omega.txt deleted file mode 100644 index 1ca042fff20..00000000000 --- a/deps/npm/node_modules/tar/test/fixtures/packtest/omega.txt +++ /dev/null @@ -1 +0,0 @@ -Ω \ No newline at end of file diff --git a/deps/npm/node_modules/tar/test/fixtures/packtest/star.4.html b/deps/npm/node_modules/tar/test/fixtures/packtest/star.4.html deleted file mode 100644 index b600d772f5e..00000000000 --- a/deps/npm/node_modules/tar/test/fixtures/packtest/star.4.html +++ /dev/null @@ -1,1184 +0,0 @@ - - -Manpage for star.4 - - - - -
-
-
-Schily's USER COMMANDS                                   STAR(4L)
-
-
-
-

NAME

-     star - tape archive file format
-
-
-
-

DESCRIPTION

-     Tar Archives are layered archives.  The basic  structure  is
-     defined by the POSIX.1-1988 archive format and documented in
-     the BASIC TAR HEADER DESCRIPTION section below.  The  higher
-     level  structure  is  defined  by  the POSIX.1-2001 extended
-     headers and documented in  the  EXTENDED  TAR  (PAX)  HEADER
-     STRUCTURE  section below.  POSIX.1-2001 extended headers are
-     pseudo files that contain an unlimited  number  of  extended
-     header  keywords  and associated values. The header keywords
-     are documented in the EXTENDED  TAR  (PAX)  HEADER  KEYWORDS
-     section below.
-
-
-
-

BASIC TAR HEADER DESCRIPTION

-     Physically, a POSIX.1-1988 tar archive consists of a  series
-     of  fixed  sized blocks of TBLOCK (512) characters.  It con-
-     tains a series of  file  entries  terminated  by  a  logical
-     end-of-archive  marker,  which consists of two blocks of 512
-     bytes of binary zeroes.  Each file entry is represented by a
-     header block that describes the file followed by one or more
-     blocks with the content of the file. The length of each file
-     is rounded up to a multiple of 512 bytes.
-
-     A number of TBLOCK sizes blocks are grouped  together  to  a
-     tape  record  for  physical I/O operations. Each record of n
-     blocks is written with a single write(2) operation.  On mag-
-     netic tapes, this results in a single tape record.
-
-     The header block is defined in star.h as follows:
-     /*
-      * POSIX.1-1988 field size values and magic.
-      */
-     #define   TBLOCK         512
-     #define   NAMSIZ         100
-     #define   PFXSIZ         155
-
-     #define   TMODLEN        8
-     #define   TUIDLEN        8
-     #define   TGIDLEN        8
-     #define   TSIZLEN        12
-     #define   TMTMLEN        12
-     #define   TCKSLEN        8
-
-     #define   TMAGIC         "ustar"   /* ustar magic 6 chars + '\0' */
-     #define   TMAGLEN        6         /* "ustar" including '\0' */
-     #define   TVERSION       "00"
-     #define   TVERSLEN       2
-     #define   TUNMLEN        32
-     #define   TGNMLEN        32
-     #define   TDEVLEN        8
-
-Joerg Schilling       Last change: 05/10/19                     1
-
-
-Schily's USER COMMANDS                                   STAR(4L)
-
-     /*
-      * POSIX.1-1988 typeflag values
-      */
-     #define   REGTYPE        '0'  /* Regular File          */
-     #define   AREGTYPE       '\0' /* Regular File (outdated) */
-     #define   LNKTYPE        '1'  /* Hard Link             */
-     #define   SYMTYPE        '2'  /* Symbolic Link         */
-     #define   CHRTYPE        '3'  /* Character Special     */
-     #define   BLKTYPE        '4'  /* Block Special         */
-     #define   DIRTYPE        '5'  /* Directory             */
-     #define   FIFOTYPE       '6'  /* FIFO (named pipe)     */
-     #define   CONTTYPE       '7'  /* Contiguous File       */
-
-     /*
-      * POSIX.1-2001 typeflag extensions.
-      * POSIX.1-2001 calls the extended USTAR format PAX although it is
-      * definitely derived from and based on USTAR. The reason may be that
-      * POSIX.1-2001 calls the tar program outdated and lists the
-      * pax program as the successor.
-      */
-     #define   LF_GHDR        'g'  /* POSIX.1-2001 global extended header */
-     #define   LF_XHDR        'x'  /* POSIX.1-2001 extended header */
-
-     See section EXTENDED TAR  (PAX)  HEADER  KEYWORDS  for  more
-     information about the structure of a POSIX.1-2001 header.
-
-     /*
-      * star/gnu/Sun tar extensions:
-      *
-      * Note that the standards committee allows only capital A through
-      * capital Z for user-defined expansion.  This means that defining
-      * something as, say '8' is a *bad* idea.
-      */
-
-     #define   LF_ACL         'A'  /* Solaris Access Control List     */
-     #define   LF_DUMPDIR     'D'  /* GNU dump dir                    */
-     #define   LF_EXTATTR     'E'  /* Solaris Extended Attribute File */
-     #define   LF_META        'I'  /* Inode (metadata only) no file content */
-     #define   LF_LONGLINK    'K'  /* NEXT file has a long linkname   */
-     #define   LF_LONGNAME    'L'  /* NEXT file has a long name       */
-     #define   LF_MULTIVOL    'M'  /* Continuation file rest to be skipped */
-     #define   LF_NAMES       'N'  /* OLD GNU for names > 100 characters*/
-     #define   LF_SPARSE      'S'  /* This is for sparse files        */
-     #define   LF_VOLHDR      'V'  /* tape/volume header Ignore on extraction */
-     #define   LF_VU_XHDR     'X'  /* POSIX.1-2001 xtended (Sun VU version) */
-
-     /*
-      * Definitions for the t_mode field
-      */
-     #define   TSUID     04000     /* Set UID on execution  */
-     #define   TSGID     02000     /* Set GID on execution  */
-     #define   TSVTX     01000     /* On directories, restricted deletion flag */
-
-Joerg Schilling       Last change: 05/10/19                     2
-
-
-Schily's USER COMMANDS                                   STAR(4L)
-
-     #define   TUREAD    00400     /* Read by owner         */
-     #define   TUWRITE   00200     /* Write by owner special */
-     #define   TUEXEC    00100     /* Execute/search by owner */
-     #define   TGREAD    00040     /* Read by group         */
-     #define   TGWRITE   00020     /* Write by group        */
-     #define   TGEXEC    00010     /* Execute/search by group */
-     #define   TOREAD    00004     /* Read by other         */
-     #define   TOWRITE   00002     /* Write by other        */
-     #define   TOEXEC    00001     /* Execute/search by other */
-
-     #define   TALLMODES 07777     /* The low 12 bits       */
-
-     /*
-      * This is the ustar (Posix 1003.1) header.
-      */
-     struct header {
-          char t_name[NAMSIZ];     /*   0 Filename               */
-          char t_mode[8];          /* 100 Permissions            */
-          char t_uid[8];           /* 108 Numerical User ID      */
-          char t_gid[8];           /* 116 Numerical Group ID     */
-          char t_size[12];         /* 124 Filesize               */
-          char t_mtime[12];        /* 136 st_mtime               */
-          char t_chksum[8];        /* 148 Checksum               */
-          char t_typeflag;         /* 156 Typ of File            */
-          char t_linkname[NAMSIZ]; /* 157 Target of Links        */
-          char t_magic[TMAGLEN];   /* 257 "ustar"                */
-          char t_version[TVERSLEN]; /* 263 Version fixed to 00   */
-          char t_uname[TUNMLEN];   /* 265 User Name              */
-          char t_gname[TGNMLEN];   /* 297 Group Name             */
-          char t_devmajor[8];      /* 329 Major for devices      */
-          char t_devminor[8];      /* 337 Minor for devices      */
-          char t_prefix[PFXSIZ];   /* 345 Prefix for t_name      */
-                                   /* 500 End                    */
-          char t_mfill[12];        /* 500 Filler up to 512       */
-     };
-
-     /*
-      * star header specific definitions
-      */
-     #define   STMAGIC        "tar"     /* star magic */
-     #define   STMAGLEN       4         /* "tar" including '\0' */
-
-     /*
-      * This is the new (post Posix 1003.1-1988) xstar header
-      * defined in 1994.
-      *
-      * t_prefix[130]    is guaranteed to be ' ' to prevent ustar
-      *                  compliant implementations from failing.
-      * t_mfill & t_xmagic need to be zero for a 100% ustar compliant
-      *                  implementation, so setting t_xmagic to
-      *                  "tar" should be avoided in the future.
-      *
-
-Joerg Schilling       Last change: 05/10/19                     3
-
-
-Schily's USER COMMANDS                                   STAR(4L)
-
-      * A different method to recognize this format is to verify that
-      * t_prefix[130]              is equal to ' ' and
-      * t_atime[0]/t_ctime[0]      is an octal number and
-      * t_atime[11]                is equal to ' ' and
-      * t_ctime[11]                is equal to ' '.
-      *
-      * Note that t_atime[11]/t_ctime[11] may be changed in future.
-      */
-     struct xstar_header {
-          char t_name[NAMSIZ];     /*   0 Filename               */
-          char t_mode[8];          /* 100 Permissions            */
-          char t_uid[8];           /* 108 Numerical User ID      */
-          char t_gid[8];           /* 116 Numerical Group ID     */
-          char t_size[12];         /* 124 Filesize               */
-          char t_mtime[12];        /* 136 st_mtime               */
-          char t_chksum[8];        /* 148 Checksum               */
-          char t_typeflag;         /* 156 Typ of File            */
-          char t_linkname[NAMSIZ]; /* 157 Target of Links        */
-          char t_magic[TMAGLEN];   /* 257 "ustar"                */
-          char t_version[TVERSLEN]; /* 263 Version fixed to 00   */
-          char t_uname[TUNMLEN];   /* 265 User Name              */
-          char t_gname[TGNMLEN];   /* 297 Group Name             */
-          char t_devmajor[8];      /* 329 Major for devices      */
-          char t_devminor[8];      /* 337 Minor for devices      */
-          char t_prefix[131];      /* 345 Prefix for t_name      */
-          char t_atime[12];        /* 476 st_atime               */
-          char t_ctime[12];        /* 488 st_ctime               */
-          char t_mfill[8];         /* 500 Filler up to star magic     */
-          char t_xmagic[4];        /* 508 "tar"                  */
-     };
-
-     struct sparse {
-          char t_offset[12];
-          char t_numbytes[12];
-     };
-
-     #define   SPARSE_EXT_HDR  21
-
-     struct xstar_ext_header {
-          struct sparse t_sp[21];
-          char t_isextended;
-     };
-
-     typedef union hblock {
-          char dummy[TBLOCK];
-          long ldummy[TBLOCK/sizeof (long)]; /* force long alignment */
-          struct header            dbuf;
-          struct xstar_header      xstar_dbuf;
-          struct xstar_ext_header  xstar_ext_dbuf;
-     } TCB;
-
-Joerg Schilling       Last change: 05/10/19                     4
-
-
-Schily's USER COMMANDS                                   STAR(4L)
-
-     For maximum portability, all fields that  contain  character
-     strings should be limited to use the low 7 bits of a charac-
-     ter.
-
-     The  name,  linkname  and  prefix  field  contain  character
-     strings.  The  strings  are null terminated except when they
-     use the full space of 100 characters for the name  or  link-
-     name field or 155 characters for the prefix field.
-
-     If the prefix does not start with  a  null  character,  then
-     prefix and name need to be concatenated by using the prefix,
-     followed a slash character followed by the name field.  If a
-     null  character appears in name or prefix before the maximum
-     size is reached, the field in question is terminated.   This
-     way  file  names  up to 256 characters may be archived.  The
-     prefix is not used together with the linkname field, so  the
-     maximum length of a link name is 100 characters.
-
-     The fields magic, uname and gname  contain  null  terminated
-     character strings.
-
-     The version field contains the string "00" without a  trail-
-     ing  zero.  It cannot be set to different values as POSIX.1-
-     1988 did not specify  a  way  to  handle  different  version
-     strings.  The typeflag field contains a single character.
-
-     All  numeric  fields  contain  size-1  leading   zero-filled
-     numbers  using  octal  digits.   They are followed by one or
-     more space or null characters.  All  recent  implementations
-     only use one space or null character at the end of a numeri-
-     cal field to get maximum space for the octal  number.   Star
-     always uses a space character as terminator.  Numeric fields
-     with 8 characters may hold up to 7  octal  digits  (7777777)
-     which results is a maximum value of 2097151.  Numeric fields
-     with  12  characters  may  hold  up  to  11   octal   digits
-     (77777777777)   which   results   is   a  maximum  value  of
-     8589934591.
-
-     Star implements  a  vendor  specific  (and  thus  non-POSIX)
-     extension  to  put  bigger  numbers into the numeric fields.
-     This is done by using a base 256 coding.  The top bit of the
-     first character in the appropriate 8 character or 12 charac-
-     ter field is set to flag non octal coding.  If base 256 cod-
-     ing  is  in  use,  then all remaining characters are used to
-     code the number. This results in 7  base  256  digits  in  8
-     character  fields  and in 11 base 256 digits in 12 character
-     fields.  All base 256 numbers are two's complement  numbers.
-     A base 256 number in a 8 character field may hold 56 bits, a
-     base 256 number in a 12 character field may  hold  88  bits.
-     This  may  extended to 64 bits for 8 character fields and to
-     95 bits for 12 character fields. For a negative  number  the
-     first  character  currently  is set to a value of 255 (all 8
-
-Joerg Schilling       Last change: 05/10/19                     5
-
-
-Schily's USER COMMANDS                                   STAR(4L)
-
-     bits are set).  The rightmost character in a 8 or 12 charac-
-     ter  field  contains  the least significant base 256 number.
-     Recent GNU tar versions implement the same extension.
-
-     While the POSIX standard makes obvious that the fields mode,
-     uid,  gid,    size,  chksum, devmajor and devminor should be
-     treated as unsigned numbers, there is no such definition for
-     the time field.
-
-     The mode field contains 12  bits  holding  permissions,  see
-     above for the definitions for each of the permission bits.
-
-     The uid and gid fields contain the numerical user id of  the
-     file.
-
-     The size field contains the size of the file in  characters.
-     If  the tar header is followed by file data, then the amount
-     of data that follows is computed by (size + 511) / 512.
-
-     The mtime filed contains the number of seconds since Jan 1st
-     1970 00:00 UTC as retrived via stat(2) in st_mtime.
-
-     The chksum field contains a simple checksum over  all  bytes
-     of  the header.  To compute the value, all characters in the
-     header are treated as unsigned integers and  the  characters
-     in  the chksum field are treated as if they were all spaces.
-     When the computation starts, the checksum value is  initial-
-     ized to 0.
-
-     The typeflag field specifies the type of the  file  that  is
-     archived.  If a specific tar implementation does not include
-     support for a specific typeflag value,  this  implementation
-     will  extract  the  unknown file types as if they were plain
-     files.
-
-     '0' REGTYPE
-          A regular file.  If the size field is  non  zero,  then
-          file data follows the header.
-
-     '\0' AREGTYPE
-          For backwards compatibility with pre  POSIX.1-1988  tar
-          implementations,  a nul character is also recognized as
-          marker for plain files.  It is not generated by  recent
-          tar  implementations.   If  the size field is non zero,
-          then file data follows the header.
-
-     '1' LNKTYPE
-          The file is a hard link to another file.  The  name  of
-          the  file that the file is linked to is in the linkname
-          part of the header.  For tar archives  written  by  pre
-          POSIX.1-1988  implementations,  the  size field usually
-          contains the size of the file and needs to  be  ignored
-
-Joerg Schilling       Last change: 05/10/19                     6
-
-
-Schily's USER COMMANDS                                   STAR(4L)
-
-          as  no  data may follow this header type.  For POSIX.1-
-          1988 compliant archives, the size field needs to be  0.
-          For POSIX.1-2001 compliant archives, the size field may
-          be non zero, indicating that file data is  included  in
-          the archive.
-
-     '2' SYMTYPE
-          The file is a symbolic link to another file.  The  name
-          of  the file that the file is linked to is in the link-
-          name part of the header.  The size field needs to be 0.
-          No file data may follow the header.
-
-     '3' CHRTYPE
-          A character special file.  The fields devmajor and dev-
-          minor  contain  information that defines the file.  The
-          meaning of the size field is unspecified by  the  POSIX
-          standard.  No file data may follow the header.
-
-     '4' BLKTYPE
-          A block special file.  The fields devmajor and devminor
-          contain information that defines the file.  The meaning
-          of the size field is unspecified by the POSIX standard.
-          No file data may follow the header.
-
-     '5' DIRTYPE
-          A directory or sub directory.  Old  (pre  POSIX.1-1988)
-          tar  implementations did use the same typeflag value as
-          for plain files and added a slash to the name.  If  the
-          size  field  is  non zero then it indicates the maximum
-          size in characters the system  may  allocate  for  this
-          directory.  If  the  size  field  is 0, then the system
-          shall not limit the size of the directory. On operating
-          systems  where  the  disk  allocation  is not done on a
-          directory base, the size field is  ignored  on  extrac-
-          tion.  No file data may follow the header.
-
-     '6' FIFOTYPE
-          A named  pipe.   The  meaning  of  the  size  field  is
-          unspecified by the POSIX standard.  The size field must
-          be ignored on extraction.  No file data may follow  the
-          header.
-
-     '7' CONTTYPE
-          A contiguous file.  This is a file that  gives  special
-          performance  attributes.   Operating systems that don't
-          support this file type extract this file type as  plain
-          files.   If  the size field is non zero, then file data
-          follows the header.
-
-     'g' GLOBAL POSIX.1-2001 HEADER
-          With POSIX.1-2001 pax archives,  this  type  defines  a
-          global  extended  header.   The size is always non zero
-
-Joerg Schilling       Last change: 05/10/19                     7
-
-
-Schily's USER COMMANDS                                   STAR(4L)
-
-          and denotes  the  sum  of  the  length  fields  in  the
-          extended header data.  The data that follows the header
-          is in the pax extended  header  format.   The  extended
-          header records in this header type affect all following
-          files in the archive unless they are overwritten by new
-          values.   See  EXTENDED TAR (PAX) HEADER FORMAT section
-          below.
-
-     'x' EXTENDED POSIX.1-2001 HEADER
-          With POSIX.1-2001 pax archives, this  type  defines  an
-          extended  header.   The  size  is  always  non zero and
-          denotes the sum of the length fields  in  the  extended
-          header  data.   The  data that follows the header is in
-          the pax extended header format.   The  extended  header
-          records  in  this header type only affect the following
-          file in the archive.  See  EXTENDED  TAR  (PAX)  HEADER
-          FORMAT section below.
-
-     'A' - 'Z'
-          Reserved for vendor specific implementations.
-
-     'A'  A Solaris ACL entry as used by the  tar  implementation
-          from  Sun.  The size is always non zero and denotes the
-          length of the  data  that  follows  the  header.   Star
-          currently is not able to handle this header type.
-
-     'D'  A GNU dump directory.  This header type is not  created
-          by  star and handled like a directory during an extract
-          operation, so the content is ignored by star.  The size
-          field  denotes  the length of the data that follows the
-          header.
-
-     'E'  A Solaris Extended  Attribute  File.   The  size  field
-          denotes the length of the data that follows the header.
-          Star currently is not able to handle this header type.
-
-     'I'  A inode metadata entry.  This header type  is  used  by
-          star  to archive inode meta data only.  To archive more
-          inode meta data than possible with a  POSIX-1.1988  tar
-          header, a header with type 'I' is usually preceded by a
-          'x' header.  It is used with incremental backups.   The
-          size  field holds the length of the file.  No file data
-          follows this header.
-
-     'K'  A long link name.  Star is able to read and write  this
-          type  of  header.  With the xustar and exustar formats,
-          star  prefers  to  store  long  link  names  using  the
-          POSIX.1-2001  method.   The size is always non zero and
-          denotes the length of the long link name including  the
-          trailing  null  byte. The link name is in the data that
-          follows the header.
-
-Joerg Schilling       Last change: 05/10/19                     8
-
-
-Schily's USER COMMANDS                                   STAR(4L)
-
-     'L'  A long file name.  Star is able to read and write  this
-          type  of  header.  With the xustar and exustar formats,
-          star  prefers  to  store  long  file  names  using  the
-          POSIX.1-2001  method.   The size is always non zero and
-          denotes the length of the long file name including  the
-          trailing  null  byte. The file name is in the data that
-          follows the header.
-
-     'M'  A multi volume continuation entry.  It is used by  star
-          to  tell the extraction program via the size field when
-          the next regular  archive  header  will  follow.   This
-          allows to start extracting multi volume archives with a
-          volume number greater than one.  It is used by GNU  tar
-          to  verify  multi  volume  continuation volumes.  Other
-          fields in the GNU multi volume continuation header  are
-          a  result  of  a  GNU tar miss conception and cannot be
-          used.  If the size field is non zero the data following
-          the header is skipped by star if the volume that starts
-          with it is mounted as the first volume.  This header is
-          ignored if the volume that starts with it is mounted as
-          continuation volume.
-
-     'N'  An outdated linktype used by old GNU  tar  versions  to
-          store  long  file  names.   This type is unsupported by
-          star.
-
-     'S'  A sparse file.  This header type is used  by  star  and
-          GNU  tar.   A  sparse header is uses instead of a plain
-          file header to  denote  a  sparse  file  that  follows.
-          Directly  after  the  header,  a  list  of  sparse hole
-          descriptors follows  followed  by  the  compacted  file
-          data.   With  star formats, the size field holds a size
-          that represents the sum of the sparse hole  descriptors
-          plus  the  size of the compacted file data. This allows
-          other tar implementations to correctly skip to the next
-          tar header.  With GNU tar, up to 4 sparse hole descrip-
-          tors fit  into  the  sparse  header.   Additional  hole
-          descriptors  are not needed if the file has less than 4
-          holes.  With GNU tar, the size field breaks general tar
-          header rules and is meaningless because the size of the
-          sparse hole descriptors does not count.
-
-     'V'  A volume header.  The name field is is used to hold the
-          volume  name.   Star  uses  the atime field to hold the
-          volume number in case there is no POSIX.1-2001 extended
-          header.   This header type is used by star and GNU tar.
-          If the size field is non zero the  data  following  the
-          header is skipped by star.
-
-     'X'  A vendor unique variant of  the  POSIX.1-2001  extended
-          header type.  It has been implemented by Sun many years
-          before the POSIX.1-2001  standard  has  been  approved.
-
-Joerg Schilling       Last change: 05/10/19                     9
-
-
-Schily's USER COMMANDS                                   STAR(4L)
-
-          See also the typeflag 'x' header type.  Star is able to
-          read and write this type of header.
-
-
-
-

EXTENDED TAR (PAX) HEADER STRUCTURE

-     Block type                            Description
-
-     Ustar Header [typeflag='g']      Global Extended Header
-     Global Extended Data
-     Ustar Header [typeflag='h']         Extended Header
-     Extended Data
-     Ustar header [typeflag='0']    File with Extended Header
-     Data for File #1
-     Ustar header [typeflag='0']   File without Extended Header
-     Data for File #2
-     Block of binary zeroes              First EOF Block
-     Block of binary zeroes              Second EOF Block
-
-
-
-

EXTENDED TAR (PAX) HEADER FORMAT

-     The data block  that  follows  a  tar  archive  header  with
-     typeflag 'g' or 'x' contains one or more records in the fol-
-     lowing format:
-
-          "%d %s=%s\n", <length>, <keyword>, <value>
-
-     Each record starts with a a decimal length field. The length
-     includes  the  total  size  of a record including the length
-     field itself and the trailing new line.
-
-     The keyword may not include an  equal  sign.   All  keywords
-     beginning  with  lower  case letters and digits are reserved
-     for future use by the POSIX standard.
-
-     If the value field is of zero length, it deletes any  header
-     field  of  the  same  name  that  is in effect from the same
-     extended header or from a previous global header.
-
-     Null characters do not delimit any value. The value is  only
-     limited by its implicit length.
-
-
-
-

EXTENDED TAR (PAX) HEADER KEYWORDS

-     POSIX.1-2001 extended pax  header  keywords.  All  numerical
-     values  are  represented  as decimal strings.  All texts are
-     represented as 7-bit ascii or UTF-8:
-
-     atime
-          The time from st_atime in sub second granularity.  Star
-          currently supports a nanosecond granularity.
-
-     charset
-          The name of the character set used to encode  the  data
-          in  the  following  file(s).  This keyword is currently
-
-Joerg Schilling       Last change: 05/10/19                    10
-
-
-Schily's USER COMMANDS                                   STAR(4L)
-
-          ignored by star.
-
-     comment
-          Any number of characters that   should  be  treated  as
-          comment.  Star ignores the comment as documented by the
-          POSIX standard.
-
-     ctime
-          The time from st_ctime in sub second granularity.  Star
-          currently supports a nanosecond granularity.
-
-     gid  The group ID of the group  that  owns  the  file.   The
-          argument  is  a  decimal number.  This field is used if
-          the group ID of a file is greater than  2097151  (octal
-          7777777).
-
-     gname
-          The group name of the following file(s) coded in  UTF-8
-          if  the  group name does not fit into 323 characters or
-          cannot be expressed in 7-Bit ASCII.
-
-     linkpath
-          The name of the linkpath coded in UTF-8 if it is longer
-          than  100  characters  or  cannot be expressed in 7-Bit
-          ASCII.
-
-     mtime
-          The time from st_mtime in sub second granularity.  Star
-          currently supports a nanosecond granularity.
-
-     path The name of the linkpath coded in UTF-8 if it does  not
-          fit into 100 characters + 155 characters prefix or can-
-          not be expressed in 7-Bit ASCII.
-
-     realtime.any
-          The keywords prefixed by  realtime.  are  reserved  for
-          future standardization.
-
-     security.any
-          The keywords prefixed by  security.  are  reserved  for
-          future standardization.
-
-     size The size of the file as decimal number if the file size
-          is  greater  than  8589934591  (octal 77777777777). The
-          size keyword may not refer to the real file size but is
-          related  to  the  size if the file in the archive.  See
-          also SCHILY.realsize for more information.
-
-     uid  The uid ID of the group that owns the file.  The  argu-
-          ment  is  a  decimal number.  This field is used if the
-          uid ID  of  a  file  is  greater  than  2097151  (octal
-          7777777).
-
-Joerg Schilling       Last change: 05/10/19                    11
-
-
-Schily's USER COMMANDS                                   STAR(4L)
-
-     uname
-          The user name of the following file(s) coded  in  UTF-8
-          if  the  user  name does not fit into 323 characters or
-          cannot be expressed in 7-Bit ASCII.
-
-     VENDOR.keyword
-          Any keyword that starts with a vendor name  in  capital
-          letters  is  reserved for vendor specific extensions by
-          the standard.  Star uses a lot of these vendor specific
-          extension. See below for more informations.
-
-
-
-

SCHILY PAX EXTENSION KEYWORDS

-     Star uses own vendor specific extensions. The SCHILY  vendor
-     specific extended pax header keywords are:
-
-     SCHILY.acl.access
-          The ACL for a file.
-
-          Since no official backup format for POSIX  access  con-
-          trol  lists  has  been  defined,  star  uses the vendor
-          defined      attributes      SCHILY.acl.access      and
-          SCHILY.acl.default  for storing the ACL and Default ACL
-          of a file, respectively.  The access control lists  are
-          stored  in  the  short  text  form  as defined in POSIX
-          1003.1e draft standard 17.
-
-          To each named user ACL entry a fourth  colon  separated
-          field field containing the user identifier (UID) of the
-          associated user is appended.  To each named group entry
-          a  fourth  colon  separated  field containing the group
-          identifier (GID) of the associated group  is  appended.
-          (POSIX  1003.1e  draft standard 17 allows to add fields
-          to ACL entries.)
-
-          This  is  an   example   of   the   format   used   for
-          SCHILY.acl.access  (a space has been inserted after the
-          equal sign and lines are broken [marked with '\' ]  for
-          readability, additional fields in bold):
-
-          SCHILY.acl.access= user::rwx,user:lisa:r-x:502, \
-                             group::r-x,group:toolies:rwx:102, \
-                             mask::rwx,other::r--x
-
-          The numerical user and group identifiers are  essential
-          when  restoring  a  system completely from a backup, as
-          initially the name-to-identifier mappings  may  not  be
-          available,  and  then  file ownership restoration would
-          not work.
-
-          As the archive format  that  is  used  for  backing  up
-          access control lists is compatible with the pax archive
-          format, archives created that way can  be  restored  by
-
-Joerg Schilling       Last change: 05/10/19                    12
-
-
-Schily's USER COMMANDS                                   STAR(4L)
-
-          star  or  a POSIX.1-2001 compliant pax.  Note that pro-
-          grams other than star will ignore the ACL information.
-
-     SCHILY.acl.default
-          The default ACL for a file. See  SCHILY.acl.access  for
-          more information.
-
-          This  is  an   example   of   the   format   used   for
-          SCHILY.acl.default (a space has been inserted after the
-          equal sign and lines are broken [marked with '\' ]  for
-          readability, additional fields in bold):
-
-          SCHILY.acl.default= user::rwx,user:lisa:r-x:502, \
-                              group::r-x,mask::r-x,other::r-x
-
-     SCHILY.ddev
-          The device ids for names used is  the  SCHILY.dir  dump
-          directory  list  from  st_dev  of  the  file as decimal
-          number.  The SCHILY.ddev keyword is followed by a space
-          separated  list  of device id numbers. Each corresponds
-          exactly to a name in the list found in SCHILY.dir.   If
-          a  specific  device  id number is repeated, a comma (,)
-          without a following space may be use to denote that the
-          current  device  id number is identical to the previous
-          number.  This keyword is used in dump mode.  This  key-
-          word is not yet implemented.
-
-          The value is a signed int.  An implementation should be
-          able  to  handle at least 64 bit values.  Note that the
-          value is signed because POSIX  does  not  specify  more
-          than the type should be an int.
-
-     SCHILY.dev
-          The device id  from  st_dev  of  the  file  as  decimal
-          number.  This keyword is used in dump mode.
-
-          The value is a signed int.  An implementation should be
-          able  to  handle at least 64 bit values.  Note that the
-          value is signed because POSIX  does  not  specify  more
-          than the type should be an int.
-
-     SCHILY.devmajor
-          The device major number of the file if it is a  charac-
-          ter  or  block special file.  The argument is a decimal
-          number.  This field is used if the device major of  the
-          file is greater than 2097151 (octal 7777777).
-
-          The value is a signed int.  An implementation should be
-          able  to  handle at least 64 bit values.  Note that the
-          value is signed because POSIX  does  not  specify  more
-          than the type should be an int.
-
-Joerg Schilling       Last change: 05/10/19                    13
-
-
-Schily's USER COMMANDS                                   STAR(4L)
-
-     SCHILY.devminor
-          The device minor number of the file if it is a  charac-
-          ter  or  block special file.  The argument is a decimal
-          number.  This field is used if the device minor of  the
-          file is greater than 2097151 (octal 7777777).
-
-          The value is a signed int.  An implementation should be
-          able  to  handle at least 64 bit values.  Note that the
-          value is signed because POSIX  does  not  specify  more
-          than the type should be an int.
-
-     SCHILY.dino
-          The inode numbers for names used is the SCHILY.dir dump
-          directory  list  from  st_ino  of  the  file as decimal
-          number.  The SCHILY.dino keyword is followed by a space
-          separated  list  of  inode  numbers.  Each  corresponds
-          exactly to a name in  the  list  found  in  SCHILY.dir.
-          This keyword is used in dump mode.
-
-          The values are unsigned int.  An implementation  should
-          be able to handle at least 64 bit unsigned values.
-
-     SCHILY.dir
-          A list of  filenames  (the  content)  for  the  current
-          directory.   The  names  are coded in UTF-8.  Each file
-          name is prefixed by a single character that is used  as
-          a flag.  Each file name is limited by a null character.
-          The null character is  directly  followed  by  he  flag
-          character  for  the  next file name in case the list is
-          not terminated by the  current  file  name.   The  flag
-          character  must not be a null character.  By default, a
-          ^A (octal  001)  is  used.   The  following  flags  are
-          defined:
-
-          \000 This is the list terminator character - the second
-               null byte, see below.
-
-          ^A   The default flag that is used in case the dump dir
-               features have not been active.
-
-          Y    A non  directory  file  that  is  in  the  current
-               (incremental) dump.
-
-          N    A non directory file that is not  in  the  current
-               (incremental) dump.
-
-          D    A directory that is in the  current  (incremental)
-               dump.
-
-          d    A directory that is not in the current  (incremen-
-               tal) dump.
-
-Joerg Schilling       Last change: 05/10/19                    14
-
-
-Schily's USER COMMANDS                                   STAR(4L)
-
-          The list is terminated by two  successive  null  bytes.
-          The first is the null byte for the last file name.  The
-          second null byte is at the position where a flag  char-
-          acter  would be expected, it acts ad a list terminator.
-          The length tag for the SCHILY.dir  data  includes  both
-          null bytes.
-
-          If a dump mode has been selected  that  writes  compact
-          complete  directory information to the beginning of the
-          archive, the flag character  may  contain  values  dif-
-          ferent from ^A.  Star implementations up to star-1.5 do
-          not include this  feature.   Tar  implementations  that
-          like  to read archives that use the SCHILY.dir keyword,
-          shall not rely on values other than \000 (^@)  or  \001
-          (^A).
-
-          This keyword is used in dump mode.
-
-     SCHILY.fflags
-          A textual version of the BSD  or  Linux  extended  file
-          flags.  As this tag has not yet been documented, please
-          look into the  star  source,  file  fflags.c  for  more
-          information.
-
-     SCHILY.filetype
-          A textual version of the real file type  of  the  file.
-          The following names are used:
-
-          unallocated             An unknown file type  that  may
-                                  be  a  result  of  a  unlink(2)
-                                  operation.  This  should  never
-                                  happen.
-
-          regular                 A regular file.
-
-          contiguous              A contiguous file. On operating
-                                  systems  or  file  systems that
-                                  don't support this  file  type,
-                                  it  is  handled  like a regular
-                                  file.
-
-          symlink                 A symbolic  link  to  any  file
-                                  type.
-
-          directory               A directory.
-
-          character special       A character special file.
-
-          block special           A block special file.
-
-          fifo                    A named pipe.
-
-Joerg Schilling       Last change: 05/10/19                    15
-
-
-Schily's USER COMMANDS                                   STAR(4L)
-
-          socket                  A UNIX domain socket.
-
-          mpx character special   A multiplexed character special
-                                  file.
-
-          mpx block special       A  multiplexed  block   special
-                                  file.
-
-          XENIX nsem              A XENIX named semaphore.
-
-          XENIX nshd              XENIX shared data.
-
-          door                    A Solaris door.
-
-          eventcount              A UNOS event count.
-
-          whiteout                A BSD whiteout directory entry.
-
-          sparse                  A sparse regular file.
-
-          volheader               A volume header.
-
-          unknown/bad             Any other  unknown  file  type.
-                                  This should never happen.
-
-     SCHILY.ino
-          The inode number from st_ino of  the  file  as  decimal
-          number.  This keyword is used in dump mode.
-
-          The value is an unsigned int.  An implementation should
-          be able to handle at least 64 bit unsigned values.
-
-     SCHILY.nlink
-          The link count of the file  as  decimal  number.   This
-          keyword is used in dump mode.
-
-          The value is an unsigned int.  An implementation should
-          be able to handle at least 32 bit unsigned values.
-
-     SCHILY.offset
-          The  offset  value  for  a  multi  volume  continuation
-          header.   This  keyword  is used with multi volume con-
-          tinuation headers.  Multi volume  continuation  headers
-          are  used  to  allow  to  start  reading a multi volume
-          archive past the first volume.
-
-          The value is an unsigned int.  An implementation should
-          be able to handle at least 64 bit unsigned values.
-
-     SCHILY.realsize
-          The real size of the  file  as  decimal  number.   This
-
-Joerg Schilling       Last change: 05/10/19                    16
-
-
-Schily's USER COMMANDS                                   STAR(4L)
-
-          keyword  is  used  if the real size of the file differs
-          from the visible size of the file in the archive.   The
-          real  file size differs from the size in the archive if
-          the file type is sparse or if the file is  a  continua-
-          tion  file  on  a  multi  volume  archive.  In case the
-          SCHILY.realsize keyword is needed, it must be past  any
-          size keyword in case a size keyword is also present.
-
-          The value is an unsigned int.  An implementation should
-          be able to handle at least 64 bit unsigned values.
-
-     SCHILY.tarfiletype
-          The  following  additional  file  types  are  used   in
-          SCHILY.tarfiletype:
-
-          hardlink
-               A hard link to any file type.
-
-          dumpdir
-               A directory with dump entries
-
-          multivol continuation
-               A multi volume continuation for any file type.
-
-          meta A meta entry (inode meta data only) for  any  file
-               type.
-
-     SCHILY.xattr.attr
-          A POSIX.1-2001 coded version of the Linux extended file
-          attributes.    Linux   extended   file  attributes  are
-          name/value pairs. Every attribute  name  results  in  a
-          SCHILY.xattr.name  tag  and  the  value of the extended
-          attribute is used as  the  value  of  the  POSIX.1-2001
-          header  tag.  Note that this way of coding is not port-
-          able across  platforms.   A  version  for  BSD  may  be
-          created  but  Solaris  includes  far more features with
-          extended attribute files than Linux does.
-
-          A future version  of  star  will  implement  a  similar
-          method  as  the  tar program on Solaris currently uses.
-          When    this    implementation    is     ready,     the
-          SCHILY.xattr.name  feature may be removed in favor of a
-          truly portable  implementation  that  supports  Solaris
-          also.
-
-
-
-

SCHILY 'G'LOBAL PAX EXTENSION KEYWORDS

-     The following star vendor unique extensions may only  appear
-     in 'g'lobal extended pax headers:
-
-     SCHILY.archtype
-          The textual version of  the  archive  type  used.   The
-
-Joerg Schilling       Last change: 05/10/19                    17
-
-
-Schily's USER COMMANDS                                   STAR(4L)
-
-          textual  values  used  for SCHILY.archtype are the same
-          names that are used in the star command line options to
-          set up a specific archive type.
-
-          In order to allow archive type  recognition  from  this
-          keyword,  the  minimum  tape  block  size must be 2x512
-          bytes (1024  bytes)  and  the  SCHILY.archtype  keyword
-          needs  to  be  in the first 512 bytes of the content of
-          the first 'g'lobal pax  header.  Then  the  first  tape
-          block may be scanned to recognize the archive type.
-
-     SCHILY.release
-          The textual version of the star version string and  the
-          platform  name  where this star has been compiled.  The
-          same text appears when calling star -version.
-
-     SCHILY.volhdr.blockoff
-          This keyword is used for  multi  volume  archives.   It
-          represents   the   offset   within  the  whole  archive
-          expressed in 512 byte units.
-
-          The value is an unsigned int with a valid range between
-          1  and  infinity.  An  implementation should be able to
-          handle at least 64 bit unsigned values.
-
-     SCHILY.volhdr.blocksize
-          The tape blocksize expressed in 512 byte units that was
-          used when writing the archive.
-
-          The value is an unsigned int with a valid range between
-          1  and  infinity.  An  implementation should be able to
-          handle at least 31 bit unsigned values.
-
-     SCHILY.volhdr.cwd
-          This keyword is used in dump mode.  It is only used  to
-          contain  the  real  backup  working  directory  if  the
-          fs-name= option  of  star  is  used  to  overwrite  the
-          SCHILY.volhdr.filesys         value.        Overwriting
-          SCHILY.volhdr.filesys is needed when backups are run on
-          file system snapshots rather than on the real file sys-
-          tem.
-
-     SCHILY.volhdr.device
-          This keyword is used in dump mode.  It  represents  the
-          name of the device that holds the file system data. For
-          disk based file systems, this is the device name of the
-          mounted device.
-
-          This keyword is optional. It helps to  correctly  iden-
-          tify  the  file  system  from  which this dump has been
-          made.
-
-Joerg Schilling       Last change: 05/10/19                    18
-
-
-Schily's USER COMMANDS                                   STAR(4L)
-
-     SCHILY.volhdr.dumpdate
-          This keyword is used in dump mode.  It  represents  the
-          time the current dump did start.
-
-     SCHILY.volhdr.dumplevel
-          This keyword is used in dump mode.  It  represents  the
-          level  of  the  current  dump.   Dump  levels are small
-          numbers, the lowest possible number is 0.  Dump level 0
-          represents  a  full  backup.  Dump level 1 represents a
-          backup that contains all changes that did  occur  since
-          the  last  level  0  dump.   Dump  level 2 represents a
-          backup that contains all changes that did  occur  since
-          the last level 1 dump.  Star does not specify a maximum
-          allowed dump level but  you  should  try  to  keep  the
-          numbers less than 100.
-
-          The value is an unsigned int with a valid range between
-          0 and at least 100.
-
-     SCHILY.volhdr.dumptype
-          This keyword is used in dump mode.  If the  dump  is  a
-          complete  dump  of  a file system, then the argument is
-          the text full, else the argument is the text partial.
-
-     SCHILY.volhdr.filesys
-          This keyword is used in dump mode.  It  represents  the
-          top level directory for the file system from which this
-          dump has been made.  If the dump represents a dump that
-          has  an associated level, then the this directory needs
-          to be identical to the root directory of this file sys-
-          tem which is the mount point.
-
-     SCHILY.volhdr.hostname
-          This keyword is  used  in  dump  mode.   The  value  is
-          retrieved from gethostname(3) or uname(2).
-
-     SCHILY.volhdr.label
-          The textual volume label.  The  volume  label  must  be
-          identical within a set of multi volume archives.
-
-     SCHILY.volhdr.refdate
-          This keyword is used in dump mode if the  current  dump
-          is an incremental dump with a level > 0.  It represents
-          the time the related dump did start.
-
-     SCHILY.volhdr.reflevel
-          This keyword is used in dump mode if the  current  dump
-          is an incremental dump with a level > 0.  It represents
-          the level of the related dump.  The related dump is the
-          last  dump with a level that is lower that the level of
-          this dump.  If a dump with the  level  of  the  current
-          dump  -1  exists,  then this is the related dump level.
-
-Joerg Schilling       Last change: 05/10/19                    19
-
-
-Schily's USER COMMANDS                                   STAR(4L)
-
-          Otherwise, the dump level is decremented until a  valid
-          dump level could be found in the dump database.
-
-          The value is an unsigned int with a valid range between
-          0 and at least 100.
-
-     SCHILY.volhdr.tapesize
-          This keyword is used for multi volume archives and  may
-          be  used  to  verify  the volume size on read back.  It
-          represents the tape size expressed in 512  byte  units.
-          If  this  keyword is set in multi volume mode, the size
-          of the tape is not autodetected but set from a  command
-          line option.
-
-          The value is an unsigned int with a valid range between
-          1  and  infinity.  An  implementation should be able to
-          handle at least 64 bit unsigned values.
-
-     SCHILY.volhdr.volume
-          This keyword is used for  multi  volume  archives.   It
-          represents  the volume number within a volume set.  The
-          number used for the first volume is 1.
-
-          The value is an unsigned int with a valid range between
-          1  and  infinity.  An  implementation should be able to
-          handle at least 31 bit unsigned values.
-
-
-
-

MULTI VOLUME ARCHIVE HANDLING

-     To be documented in the future.
-
-
-
-

SEE ALSO

-
-
-

NOTES

-
-
-

BUGS

-
-
-

AUTHOR

-
-Joerg Schilling       Last change: 05/10/19                    20
-
-
-
-
-Man(1) output converted with -man2html -
-


-FhG -FhG FOKUS -BerliOS - -Schily -Schily's Home -VED powered - - - diff --git a/deps/npm/node_modules/tar/test/fixtures/packtest/Ω.txt b/deps/npm/node_modules/tar/test/fixtures/packtest/Ω.txt deleted file mode 100644 index 1ca042fff20..00000000000 --- a/deps/npm/node_modules/tar/test/fixtures/packtest/Ω.txt +++ /dev/null @@ -1 +0,0 @@ -Ω \ No newline at end of file diff --git a/deps/npm/node_modules/tar/test/fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc b/deps/npm/node_modules/tar/test/fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc deleted file mode 100644 index 5a5d18e2941..00000000000 --- a/deps/npm/node_modules/tar/test/fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc +++ /dev/null @@ -1 +0,0 @@ -cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc \ No newline at end of file diff --git a/deps/npm/node_modules/tar/test/fixtures/symlink b/deps/npm/node_modules/tar/test/fixtures/symlink deleted file mode 120000 index 218c28e640f..00000000000 --- a/deps/npm/node_modules/tar/test/fixtures/symlink +++ /dev/null @@ -1 +0,0 @@ -hardlink-1 \ No newline at end of file diff --git a/deps/npm/node_modules/tar/test/fixtures/Ω.txt b/deps/npm/node_modules/tar/test/fixtures/Ω.txt deleted file mode 100644 index 1ca042fff20..00000000000 --- a/deps/npm/node_modules/tar/test/fixtures/Ω.txt +++ /dev/null @@ -1 +0,0 @@ -Ω \ No newline at end of file diff --git a/deps/npm/node_modules/tar/test/header.js b/deps/npm/node_modules/tar/test/header.js deleted file mode 100644 index 8ea6f79500d..00000000000 --- a/deps/npm/node_modules/tar/test/header.js +++ /dev/null @@ -1,183 +0,0 @@ -var tap = require("tap") -var TarHeader = require("../lib/header.js") -var tar = require("../tar.js") -var fs = require("fs") - - -var headers = - { "a.txt file header": - [ "612e747874000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030303036343420003035373736312000303030303234200030303030303030303430312031313635313336303333332030313234353100203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000757374617200303069736161637300000000000000000000000000000000000000000000000000007374616666000000000000000000000000000000000000000000000000000000303030303030200030303030303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - , { cksumValid: true - , path: 'a.txt' - , mode: 420 - , uid: 24561 - , gid: 20 - , size: 257 - , mtime: 1319493851 - , cksum: 5417 - , type: '0' - , linkpath: '' - , ustar: 'ustar\0' - , ustarver: '00' - , uname: 'isaacs' - , gname: 'staff' - , devmaj: 0 - , devmin: 0 - , fill: '' } - ] - - , "omega pax": // the extended header from omega tar. - [ "5061784865616465722fcea92e74787400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030303036343420003035373736312000303030303234200030303030303030303137302031313534333731303631312030313530353100207800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000757374617200303069736161637300000000000000000000000000000000000000000000000000007374616666000000000000000000000000000000000000000000000000000000303030303030200030303030303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - , { cksumValid: true - , path: 'PaxHeader/Ω.txt' - , mode: 420 - , uid: 24561 - , gid: 20 - , size: 120 - , mtime: 1301254537 - , cksum: 6697 - , type: 'x' - , linkpath: '' - , ustar: 'ustar\0' - , ustarver: '00' - , uname: 'isaacs' - , gname: 'staff' - , devmaj: 0 - , devmin: 0 - , fill: '' } ] - - , "omega file header": - [ "cea92e7478740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030303036343420003035373736312000303030303234200030303030303030303030322031313534333731303631312030313330373200203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000757374617200303069736161637300000000000000000000000000000000000000000000000000007374616666000000000000000000000000000000000000000000000000000000303030303030200030303030303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - , { cksumValid: true - , path: 'Ω.txt' - , mode: 420 - , uid: 24561 - , gid: 20 - , size: 2 - , mtime: 1301254537 - , cksum: 5690 - , type: '0' - , linkpath: '' - , ustar: 'ustar\0' - , ustarver: '00' - , uname: 'isaacs' - , gname: 'staff' - , devmaj: 0 - , devmin: 0 - , fill: '' } ] - - , "foo.js file header": - [ "666f6f2e6a730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030303036343420003035373736312000303030303234200030303030303030303030342031313534333637303734312030313236313700203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000757374617200303069736161637300000000000000000000000000000000000000000000000000007374616666000000000000000000000000000000000000000000000000000000303030303030200030303030303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - , { cksumValid: true - , path: 'foo.js' - , mode: 420 - , uid: 24561 - , gid: 20 - , size: 4 - , mtime: 1301246433 - , cksum: 5519 - , type: '0' - , linkpath: '' - , ustar: 'ustar\0' - , ustarver: '00' - , uname: 'isaacs' - , gname: 'staff' - , devmaj: 0 - , devmin: 0 - , fill: '' } - ] - - , "b.txt file header": - [ "622e747874000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030303036343420003035373736312000303030303234200030303030303030313030302031313635313336303637372030313234363100203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000757374617200303069736161637300000000000000000000000000000000000000000000000000007374616666000000000000000000000000000000000000000000000000000000303030303030200030303030303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - , { cksumValid: true - , path: 'b.txt' - , mode: 420 - , uid: 24561 - , gid: 20 - , size: 512 - , mtime: 1319494079 - , cksum: 5425 - , type: '0' - , linkpath: '' - , ustar: 'ustar\0' - , ustarver: '00' - , uname: 'isaacs' - , gname: 'staff' - , devmaj: 0 - , devmin: 0 - , fill: '' } - ] - - , "deep nested file": - [ "636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363633030303634342000303537373631200030303030323420003030303030303030313434203131363532313531353333203034333331340020300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000075737461720030306973616163730000000000000000000000000000000000000000000000000000737461666600000000000000000000000000000000000000000000000000000030303030303020003030303030302000722f652f612f6c2f6c2f792f2d2f642f652f652f702f2d2f662f6f2f6c2f642f652f722f2d2f702f612f742f680000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - , { cksumValid: true, - path: 'r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' - , mode: 420 - , uid: 24561 - , gid: 20 - , size: 100 - , mtime: 1319687003 - , cksum: 18124 - , type: '0' - , linkpath: '' - , ustar: 'ustar\0' - , ustarver: '00' - , uname: 'isaacs' - , gname: 'staff' - , devmaj: 0 - , devmin: 0 - , fill: '' } - ] - } - -tap.test("parsing", function (t) { - Object.keys(headers).forEach(function (name) { - var h = headers[name] - , header = new Buffer(h[0], "hex") - , expect = h[1] - , parsed = new TarHeader(header) - - // console.error(parsed) - t.has(parsed, expect, "parse " + name) - }) - t.end() -}) - -tap.test("encoding", function (t) { - Object.keys(headers).forEach(function (name) { - var h = headers[name] - , expect = new Buffer(h[0], "hex") - , encoded = TarHeader.encode(h[1]) - - // might have slightly different bytes, since the standard - // isn't very strict, but should have the same semantics - // checkSum will be different, but cksumValid will be true - - var th = new TarHeader(encoded) - delete h[1].block - delete h[1].needExtended - delete h[1].cksum - t.has(th, h[1], "fields "+name) - }) - t.end() -}) - -// test these manually. they're a bit rare to find in the wild -tap.test("parseNumeric tests", function (t) { - var parseNumeric = TarHeader.parseNumeric - , numbers = - { "303737373737373700": 2097151 - , "30373737373737373737373700": 8589934591 - , "303030303036343400": 420 - , "800000ffffffffffff": 281474976710655 - , "ffffff000000000001": -281474976710654 - , "ffffff000000000000": -281474976710655 - , "800000000000200000": 2097152 - , "8000000000001544c5": 1393861 - , "ffffffffffff1544c5": -15383354 } - Object.keys(numbers).forEach(function (n) { - var b = new Buffer(n, "hex") - t.equal(parseNumeric(b), numbers[n], n + " === " + numbers[n]) - }) - t.end() -}) diff --git a/deps/npm/node_modules/tar/test/pack.js b/deps/npm/node_modules/tar/test/pack.js deleted file mode 100644 index 3fc808d04f5..00000000000 --- a/deps/npm/node_modules/tar/test/pack.js +++ /dev/null @@ -1,953 +0,0 @@ -var tap = require("tap") - , tar = require("../tar.js") - , pkg = require("../package.json") - , Pack = tar.Pack - , fstream = require("fstream") - , Reader = fstream.Reader - , Writer = fstream.Writer - , path = require("path") - , input = path.resolve(__dirname, "fixtures/") - , target = path.resolve(__dirname, "tmp/pack.tar") - , uid = process.getuid ? process.getuid() : 0 - , gid = process.getgid ? process.getgid() : 0 - - , entries = - - // the global header and root fixtures/ dir are going to get - // a different date each time, so omit that bit. - // Also, dev/ino values differ across machines, so that's not - // included. Rather than use - [ [ 'globalExtendedHeader', - { path: 'PaxHeader/', - mode: 438, - uid: 0, - gid: 0, - type: 'g', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' }, - { "NODETAR.author": pkg.author, - "NODETAR.name": pkg.name, - "NODETAR.description": pkg.description, - "NODETAR.version": pkg.version, - "NODETAR.repository.type": pkg.repository.type, - "NODETAR.repository.url": pkg.repository.url, - "NODETAR.main": pkg.main, - "NODETAR.scripts.test": pkg.scripts.test, - "NODETAR.engines.node": pkg.engines.node } ] - - , [ 'entry', - { path: 'fixtures/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'extendedHeader', - { path: 'PaxHeader/fixtures/200cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: uid, - gid: gid, - size: 402, - mtime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'), - cksum: 13492, - type: 'x', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: 'fixtures/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - 'NODETAR.depth': '1', - 'NODETAR.type': 'File', - nlink: 1, - uid: uid, - gid: gid, - size: 200, - 'NODETAR.blksize': '4096', - 'NODETAR.blocks': '8' } ] - - , [ 'entry', - { path: 'fixtures/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: uid, - gid: gid, - size: 200, - mtime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'), - cksum: 13475, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '', - 'NODETAR.depth': '1', - 'NODETAR.type': 'File', - nlink: 1, - 'NODETAR.blksize': '4096', - 'NODETAR.blocks': '8' } ] - - , [ 'entry', - { path: 'fixtures/a.txt', - mode: 420, - uid: uid, - gid: gid, - size: 257, - mtime: new Date('Mon, 24 Oct 2011 22:04:11 GMT'), - cksum: 5114, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/b.txt', - mode: 420, - uid: uid, - gid: gid, - size: 512, - mtime: new Date('Mon, 24 Oct 2011 22:07:59 GMT'), - cksum: 5122, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/c.txt', - mode: 420, - uid: uid, - gid: gid, - size: 513, - mtime: new Date('Wed, 26 Oct 2011 01:10:58 GMT'), - cksum: 5119, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/cc.txt', - mode: 420, - uid: uid, - gid: gid, - size: 513, - mtime: new Date('Wed, 26 Oct 2011 01:11:02 GMT'), - cksum: 5222, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/foo.js', - mode: 420, - uid: uid, - gid: gid, - size: 4, - mtime: new Date('Fri, 21 Oct 2011 21:19:29 GMT'), - cksum: 5211, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/hardlink-1', - mode: 420, - uid: uid, - gid: gid, - size: 200, - mtime: new Date('Tue, 15 Nov 2011 03:10:09 GMT'), - cksum: 5554, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/hardlink-2', - mode: 420, - uid: uid, - gid: gid, - size: 0, - mtime: new Date('Tue, 15 Nov 2011 03:10:09 GMT'), - cksum: 7428, - type: '1', - linkpath: 'fixtures/hardlink-1', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/omega.txt', - mode: 420, - uid: uid, - gid: gid, - size: 2, - mtime: new Date('Fri, 21 Oct 2011 21:19:29 GMT'), - cksum: 5537, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/packtest/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/packtest/omega.txt', - mode: 420, - uid: uid, - gid: gid, - size: 2, - mtime: new Date('Mon, 14 Nov 2011 21:42:24 GMT'), - cksum: 6440, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/packtest/star.4.html', - mode: 420, - uid: uid, - gid: gid, - size: 54081, - mtime: new Date("Sun, 06 May 2007 13:25:06 GMT"), - cksum: 6566, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'extendedHeader', - { path: 'PaxHeader/fixtures/packtest/Ω.txt', - mode: 420, - uid: uid, - gid: gid, - size: 213, - mtime: new Date('Mon, 14 Nov 2011 21:39:39 GMT'), - cksum: 7306, - type: 'x', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: 'fixtures/packtest/Ω.txt', - 'NODETAR.depth': '2', - 'NODETAR.type': 'File', - nlink: 1, - uid: uid, - gid: gid, - size: 2, - 'NODETAR.blksize': '4096', - 'NODETAR.blocks': '8' } ] - - , [ 'entry', - { path: 'fixtures/packtest/Ω.txt', - mode: 420, - uid: uid, - gid: gid, - size: 2, - mtime: new Date('Mon, 14 Nov 2011 21:39:39 GMT'), - cksum: 6297, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '', - 'NODETAR.depth': '2', - 'NODETAR.type': 'File', - nlink: 1, - 'NODETAR.blksize': '4096', - 'NODETAR.blocks': '8' } ] - - , [ 'entry', - { path: 'fixtures/r/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - mtime: new Date('Thu, 27 Oct 2011 03:42:46 GMT'), - cksum: 4789, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - mtime: new Date('Thu, 27 Oct 2011 03:42:46 GMT'), - cksum: 4937, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - mtime: new Date('Thu, 27 Oct 2011 03:42:46 GMT'), - cksum: 5081, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - mtime: new Date('Thu, 27 Oct 2011 03:42:46 GMT'), - cksum: 5236, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - mtime: new Date('Thu, 27 Oct 2011 03:42:46 GMT'), - cksum: 5391, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - mtime: new Date('Thu, 27 Oct 2011 03:42:46 GMT'), - cksum: 5559, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - mtime: new Date('Thu, 27 Oct 2011 03:42:46 GMT'), - cksum: 5651, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - mtime: new Date('Thu, 27 Oct 2011 03:42:46 GMT'), - cksum: 5798, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - mtime: new Date('Thu, 27 Oct 2011 03:42:46 GMT'), - cksum: 5946, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - mtime: new Date('Thu, 27 Oct 2011 03:42:46 GMT'), - cksum: 6094, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - mtime: new Date('Thu, 27 Oct 2011 03:42:46 GMT'), - cksum: 6253, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - mtime: new Date('Thu, 27 Oct 2011 03:42:46 GMT'), - cksum: 6345, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - mtime: new Date('Thu, 27 Oct 2011 03:42:46 GMT'), - cksum: 6494, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - mtime: new Date('Thu, 27 Oct 2011 03:42:46 GMT'), - cksum: 6652, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - mtime: new Date('Thu, 27 Oct 2011 03:42:46 GMT'), - cksum: 6807, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - mtime: new Date('Thu, 27 Oct 2011 03:42:46 GMT'), - cksum: 6954, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - mtime: new Date('Thu, 27 Oct 2011 03:42:46 GMT'), - cksum: 7102, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - mtime: new Date('Thu, 27 Oct 2011 03:42:46 GMT'), - cksum: 7263, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - mtime: new Date('Thu, 27 Oct 2011 03:42:46 GMT'), - cksum: 7355, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - mtime: new Date('Thu, 27 Oct 2011 03:42:46 GMT'), - cksum: 7514, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - mtime: new Date('Thu, 27 Oct 2011 03:42:46 GMT'), - cksum: 7658, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - mtime: new Date('Thu, 27 Oct 2011 03:42:46 GMT'), - cksum: 7821, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - mtime: new Date('Thu, 27 Oct 2011 03:43:23 GMT'), - cksum: 7967, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: uid, - gid: gid, - size: 100, - mtime: new Date('Thu, 27 Oct 2011 03:43:23 GMT'), - cksum: 17821, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/symlink', - mode: 493, - uid: uid, - gid: gid, - size: 0, - mtime: new Date('Tue, 15 Nov 2011 19:57:48 GMT'), - cksum: 6337, - type: '2', - linkpath: 'hardlink-1', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'extendedHeader', - { path: 'PaxHeader/fixtures/Ω.txt', - mode: 420, - uid: uid, - gid: gid, - size: 204, - mtime: new Date('Thu, 27 Oct 2011 17:51:49 GMT'), - cksum: 6399, - type: 'x', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: "fixtures/Ω.txt" - , "NODETAR.depth": "1" - , "NODETAR.type": "File" - , nlink: 1 - , uid: uid - , gid: gid - , size: 2 - , "NODETAR.blksize": "4096" - , "NODETAR.blocks": "8" } ] - - , [ 'entry', - { path: 'fixtures/Ω.txt', - mode: 420, - uid: uid, - gid: gid, - size: 2, - mtime: new Date('Thu, 27 Oct 2011 17:51:49 GMT'), - cksum: 5392, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '', - 'NODETAR.depth': '1', - 'NODETAR.type': 'File', - nlink: 1, - 'NODETAR.blksize': '4096', - 'NODETAR.blocks': '8' } ] - ] - - -// first, make sure that the hardlinks are actually hardlinks, or this -// won't work. Git has a way of replacing them with a copy. -var hard1 = path.resolve(__dirname, "fixtures/hardlink-1") - , hard2 = path.resolve(__dirname, "fixtures/hardlink-2") - , fs = require("fs") - -try { fs.unlinkSync(hard2) } catch (e) {} -fs.linkSync(hard1, hard2) - -tap.test("with global header", { timeout: 10000 }, function (t) { - runTest(t, true) -}) - -tap.test("without global header", { timeout: 10000 }, function (t) { - runTest(t, false) -}) - -function runTest (t, doGH) { - var reader = Reader({ path: input - , filter: function () { - return !this.path.match(/\.(tar|hex)$/) - } - }) - - var pack = Pack(doGH ? pkg : null) - var writer = Writer(target) - - // skip the global header if we're not doing that. - var entry = doGH ? 0 : 1 - - t.ok(reader, "reader ok") - t.ok(pack, "pack ok") - t.ok(writer, "writer ok") - - pack.pipe(writer) - - var parse = tar.Parse() - t.ok(parse, "parser should be ok") - - pack.on("data", function (c) { - // console.error("PACK DATA") - t.equal(c.length, 512, "parser should emit data in 512byte blocks") - parse.write(c) - }) - - pack.on("end", function () { - // console.error("PACK END") - t.pass("parser ends") - parse.end() - }) - - pack.on("error", function (er) { - t.fail("pack error", er) - }) - - parse.on("error", function (er) { - t.fail("parse error", er) - }) - - writer.on("error", function (er) { - t.fail("writer error", er) - }) - - reader.on("error", function (er) { - t.fail("reader error", er) - }) - - parse.on("*", function (ev, e) { - var wanted = entries[entry++] - if (!wanted) { - t.fail("unexpected event: "+ev) - return - } - t.equal(ev, wanted[0], "event type should be "+wanted[0]) - // if (ev !== wanted[0] || e.path !== wanted[1].path) { - // console.error(wanted) - // console.error([ev, e.props]) - // throw "break" - // } - t.has(e.props, wanted[1], "properties "+wanted[1].path) - if (wanted[2]) { - e.on("end", function () { - t.has(e.fields, wanted[2], "should get expected fields") - }) - } - }) - - reader.pipe(pack) - - writer.on("close", function () { - t.equal(entry, entries.length, "should get all expected entries") - t.pass("it finished") - t.end() - }) - -} diff --git a/deps/npm/node_modules/tar/test/parse.js b/deps/npm/node_modules/tar/test/parse.js deleted file mode 100644 index f765a50129b..00000000000 --- a/deps/npm/node_modules/tar/test/parse.js +++ /dev/null @@ -1,359 +0,0 @@ -var tap = require("tap") - , tar = require("../tar.js") - , fs = require("fs") - , path = require("path") - , file = path.resolve(__dirname, "fixtures/c.tar") - , index = 0 - - , expect = -[ [ 'entry', - { path: 'c.txt', - mode: 420, - uid: 24561, - gid: 20, - size: 513, - mtime: new Date('Wed, 26 Oct 2011 01:10:58 GMT'), - cksum: 5422, - type: '0', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - undefined ], - [ 'entry', - { path: 'cc.txt', - mode: 420, - uid: 24561, - gid: 20, - size: 513, - mtime: new Date('Wed, 26 Oct 2011 01:11:02 GMT'), - cksum: 5525, - type: '0', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - undefined ], - [ 'entry', - { path: 'r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: 24561, - gid: 20, - size: 100, - mtime: new Date('Thu, 27 Oct 2011 03:43:23 GMT'), - cksum: 18124, - type: '0', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - undefined ], - [ 'entry', - { path: 'Ω.txt', - mode: 420, - uid: 24561, - gid: 20, - size: 2, - mtime: new Date('Thu, 27 Oct 2011 17:51:49 GMT'), - cksum: 5695, - type: '0', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - undefined ], - [ 'extendedHeader', - { path: 'PaxHeader/Ω.txt', - mode: 420, - uid: 24561, - gid: 20, - size: 120, - mtime: new Date('Thu, 27 Oct 2011 17:51:49 GMT'), - cksum: 6702, - type: 'x', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: 'Ω.txt', - ctime: 1319737909, - atime: 1319739061, - dev: 234881026, - ino: 51693379, - nlink: 1 } ], - [ 'entry', - { path: 'Ω.txt', - mode: 420, - uid: 24561, - gid: 20, - size: 2, - mtime: new Date('Thu, 27 Oct 2011 17:51:49 GMT'), - cksum: 5695, - type: '0', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '', - ctime: new Date('Thu, 27 Oct 2011 17:51:49 GMT'), - atime: new Date('Thu, 27 Oct 2011 18:11:01 GMT'), - dev: 234881026, - ino: 51693379, - nlink: 1 }, - undefined ], - [ 'extendedHeader', - { path: 'PaxHeader/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: 24561, - gid: 20, - size: 353, - mtime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'), - cksum: 14488, - type: 'x', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - ctime: 1319686868, - atime: 1319741254, - 'LIBARCHIVE.creationtime': '1319686852', - dev: 234881026, - ino: 51681874, - nlink: 1 } ], - [ 'entry', - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: 24561, - gid: 20, - size: 200, - mtime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'), - cksum: 14570, - type: '0', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '', - ctime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'), - atime: new Date('Thu, 27 Oct 2011 18:47:34 GMT'), - 'LIBARCHIVE.creationtime': '1319686852', - dev: 234881026, - ino: 51681874, - nlink: 1 }, - undefined ], - [ 'longPath', - { path: '././@LongLink', - mode: 0, - uid: 0, - gid: 0, - size: 201, - mtime: new Date('Thu, 01 Jan 1970 00:00:00 GMT'), - cksum: 4976, - type: 'L', - linkpath: '', - ustar: false }, - '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' ], - [ 'entry', - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: 1000, - gid: 1000, - size: 201, - mtime: new Date('Thu, 27 Oct 2011 22:21:50 GMT'), - cksum: 14086, - type: '0', - linkpath: '', - ustar: false }, - undefined ], - [ 'longLinkpath', - { path: '././@LongLink', - mode: 0, - uid: 0, - gid: 0, - size: 201, - mtime: new Date('Thu, 01 Jan 1970 00:00:00 GMT'), - cksum: 4975, - type: 'K', - linkpath: '', - ustar: false }, - '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' ], - [ 'longPath', - { path: '././@LongLink', - mode: 0, - uid: 0, - gid: 0, - size: 201, - mtime: new Date('Thu, 01 Jan 1970 00:00:00 GMT'), - cksum: 4976, - type: 'L', - linkpath: '', - ustar: false }, - '200LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL' ], - [ 'entry', - { path: '200LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL', - mode: 511, - uid: 1000, - gid: 1000, - size: 0, - mtime: new Date('Fri, 28 Oct 2011 23:05:17 GMT'), - cksum: 21603, - type: '2', - linkpath: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - ustar: false }, - undefined ], - [ 'extendedHeader', - { path: 'PaxHeader/200-hard', - mode: 420, - uid: 24561, - gid: 20, - size: 143, - mtime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'), - cksum: 6533, - type: 'x', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - { ctime: 1320617144, - atime: 1320617232, - 'LIBARCHIVE.creationtime': '1319686852', - dev: 234881026, - ino: 51681874, - nlink: 2 } ], - [ 'entry', - { path: '200-hard', - mode: 420, - uid: 24561, - gid: 20, - size: 200, - mtime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'), - cksum: 5526, - type: '0', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '', - ctime: new Date('Sun, 06 Nov 2011 22:05:44 GMT'), - atime: new Date('Sun, 06 Nov 2011 22:07:12 GMT'), - 'LIBARCHIVE.creationtime': '1319686852', - dev: 234881026, - ino: 51681874, - nlink: 2 }, - undefined ], - [ 'extendedHeader', - { path: 'PaxHeader/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: 24561, - gid: 20, - size: 353, - mtime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'), - cksum: 14488, - type: 'x', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - ctime: 1320617144, - atime: 1320617406, - 'LIBARCHIVE.creationtime': '1319686852', - dev: 234881026, - ino: 51681874, - nlink: 2 } ], - [ 'entry', - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: 24561, - gid: 20, - size: 0, - mtime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'), - cksum: 15173, - type: '1', - linkpath: '200-hard', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '', - ctime: new Date('Sun, 06 Nov 2011 22:05:44 GMT'), - atime: new Date('Sun, 06 Nov 2011 22:10:06 GMT'), - 'LIBARCHIVE.creationtime': '1319686852', - dev: 234881026, - ino: 51681874, - nlink: 2 }, - undefined ] ] - - -tap.test("parser test", function (t) { - var parser = tar.Parse() - - parser.on("end", function () { - t.equal(index, expect.length, "saw all expected events") - t.end() - }) - - fs.createReadStream(file) - .pipe(parser) - .on("*", function (ev, entry) { - var wanted = expect[index] - if (!wanted) { - return t.fail("Unexpected event: " + ev) - } - var result = [ev, entry.props] - entry.on("end", function () { - result.push(entry.fields || entry.body) - - t.equal(ev, wanted[0], index + " event type") - t.equivalent(entry.props, wanted[1], wanted[1].path + " entry properties") - if (wanted[2]) { - t.equivalent(result[2], wanted[2], "metadata values") - } - index ++ - }) - }) -}) diff --git a/deps/npm/package.json b/deps/npm/package.json index 3060e4d077a..23fdd515a40 100644 --- a/deps/npm/package.json +++ b/deps/npm/package.json @@ -2,7 +2,7 @@ , "publishConfig": { "tag": "alpha" } , "description": "A package manager for node" , "keywords": [ "package manager", "modules", "install", "package.json" ] -, "version": "1.1.0-alpha" +, "version": "1.1.0-alpha-2" , "preferGlobal": true , "config": { "publishtest": false } , "homepage": "http://npmjs.org/" @@ -32,16 +32,17 @@ , "graceful-fs": "1" , "minimatch": "0" , "nopt": "1" - , "node-uuid": "1.2" + , "node-uuid": "~1.3" , "proto-list": "1" , "rimraf": "1" - , "request": "~2.1.1" + , "request": "~2.2" , "which": "1" - , "tar": "0" - , "fstream": "0" + , "tar": "0.1 >=0.1.3" + , "fstream": "0.1" , "block-stream": "*" , "inherits": "1" , "mkdirp": "0.1" + , "fast-list": "1" } , "bundleDependencies": [ "slide" @@ -61,6 +62,7 @@ , "block-stream" , "inherits" , "mkdirp" + , "fast-list" ] , "devDependencies": { "ronn": "https://github.com/isaacs/ronnjs/tarball/master" } diff --git a/deps/npm/test/common.js b/deps/npm/test/common.js deleted file mode 100644 index 2755056b1b4..00000000000 --- a/deps/npm/test/common.js +++ /dev/null @@ -1,7 +0,0 @@ - -// whatever, it's just tests. -;["util","assert"].forEach(function (thing) { - thing = require("thing") - for (var i in thing) global[i] = thing[i] -} - diff --git a/deps/npm/test/disabled/bundlerecurs/package.json b/deps/npm/test/disabled/bundlerecurs/package.json deleted file mode 100644 index d870411706c..00000000000 --- a/deps/npm/test/disabled/bundlerecurs/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ "name" : "bundletest" -, "version" : "1.0.0" -, "dependencies" : { "bundletest" : "*" } -} diff --git a/deps/npm/test/disabled/failer/package.json b/deps/npm/test/disabled/failer/package.json deleted file mode 100644 index e1f8e946b78..00000000000 --- a/deps/npm/test/disabled/failer/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "name" : "failer" -, "version" : "9999.999.99" -, "dependencies" : { "base64" : "*" } -, "scripts" : { "preinstall" : "exit 1" } -} diff --git a/deps/npm/test/disabled/fast/package.json b/deps/npm/test/disabled/fast/package.json deleted file mode 100644 index fbf26e9b14d..00000000000 --- a/deps/npm/test/disabled/fast/package.json +++ /dev/null @@ -1,9 +0,0 @@ -{ "name" : "fast" -, "description" : "does nothing, and not very fast" -, "version" : "1.2.3" -, "scripts" : -{ "preinstall" : "sleep 1 && echo fast 1 $(date +%s) && echo fast 2" -, "install" : "sleep 1 && echo fast 2 $(date +%s) && echo fast 3" -, "postinstall" : "sleep 1 && echo fast 3 $(date +%s) && echo fast 4" -} -} diff --git a/deps/npm/test/disabled/package-config/package.json b/deps/npm/test/disabled/package-config/package.json deleted file mode 100644 index 7ec97d38053..00000000000 --- a/deps/npm/test/disabled/package-config/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{"name":"package-config" -,"version":"1.2.3" -,"config":{"foo":"bar"} -,"scripts":{"test":"./test.js"}} diff --git a/deps/npm/test/disabled/package-config/test.js b/deps/npm/test/disabled/package-config/test.js deleted file mode 100755 index 7337b237b5f..00000000000 --- a/deps/npm/test/disabled/package-config/test.js +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env node - -var env = process.env - , orig = require(process.env.npm_package_name+"/package.json").config - , assert = require("assert") - -console.log("Before running this test, do:\n" - +" npm config set package-config:foo boo\n" - +"or else it's about to fail.") -assert.equal(env.npm_package_config_foo, "boo", "foo != boo") -assert.equal(orig.foo, "bar", "original foo != bar") -assert.equal(env["npm_config_package-config:foo"], "boo", - "package-config:foo != boo") -console.log({ foo: env.npm_package_config_foo - , orig_foo: orig.foo - , "package-config:foo": env["npm_config_package-config:foo"] - }) diff --git a/deps/npm/test/disabled/slow/package.json b/deps/npm/test/disabled/slow/package.json deleted file mode 100644 index ba6be42fa95..00000000000 --- a/deps/npm/test/disabled/slow/package.json +++ /dev/null @@ -1,9 +0,0 @@ -{ "name" : "slow" -, "description" : "just like fast, but even slower" -, "version" : "1.2.3" -, "scripts" : - { "preinstall" : "sleep 1 && echo slow 1 $(date +%s) && sleep 1 && echo slow 2 $(date +%s)" - , "install" : "sleep 1 && echo slow 2 $(date +%s) && sleep 1 && echo slow 3 $(date +%s)" - , "postinstall" : "sleep 1 && echo slow 3 $(date +%s) && sleep 1 && echo slow 4 $(date +%s)" - } -} diff --git a/deps/npm/test/disabled/startstop/package.json b/deps/npm/test/disabled/startstop/package.json deleted file mode 100644 index bee2a2fd3ab..00000000000 --- a/deps/npm/test/disabled/startstop/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{"name":"startstop" -,"version":"1.2.3" -,"scripts":{"start":"echo 'start'","stop":"echo 'stop'"}} diff --git a/deps/npm/test/packages/npm-test-blerg/package.json b/deps/npm/test/packages/npm-test-blerg/package.json deleted file mode 100644 index 374b4432b24..00000000000 --- a/deps/npm/test/packages/npm-test-blerg/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ "name":"npm-test-blerg" -, "version" : "0.0.0" -, "scripts" : { "test" : "node test.js" } -} diff --git a/deps/npm/test/packages/npm-test-blerg/test.js b/deps/npm/test/packages/npm-test-blerg/test.js deleted file mode 100644 index f548458ac04..00000000000 --- a/deps/npm/test/packages/npm-test-blerg/test.js +++ /dev/null @@ -1,5 +0,0 @@ - -var assert = require("assert") -assert.equal(undefined, process.env.npm_config__password, "password exposed!") -assert.equal(undefined, process.env.npm_config__auth, "auth exposed!") -assert.equal(undefined, process.env.npm_config__authCrypt, "authCrypt exposed!") diff --git a/deps/npm/test/packages/npm-test-env-reader/package.json b/deps/npm/test/packages/npm-test-env-reader/package.json deleted file mode 100644 index ddd5c91abd8..00000000000 --- a/deps/npm/test/packages/npm-test-env-reader/package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ "name":"npm-test-env-reader" -, "version" : "1.2.3" -, "scripts" : - { "install" : "./test.sh" - , "preinstall" : "./test.sh" - , "preuninstall" : "./test.sh" - , "postuninstall" : "./test.sh" - , "test" : "./test.sh" - , "stop" : "./test.sh" - , "start" : "./test.sh" - , "restart" : "./test.sh" - , "foo" : "./test.sh" - } -} diff --git a/deps/npm/test/packages/npm-test-env-reader/test.sh b/deps/npm/test/packages/npm-test-env-reader/test.sh deleted file mode 100755 index b4ca4374eda..00000000000 --- a/deps/npm/test/packages/npm-test-env-reader/test.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env sh -env | grep npm | sort | uniq -echo PATH=$PATH diff --git a/deps/npm/test/packages/npm-test-missing-bindir/package.json b/deps/npm/test/packages/npm-test-missing-bindir/package.json deleted file mode 100644 index 49e26742df5..00000000000 --- a/deps/npm/test/packages/npm-test-missing-bindir/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ "name":"npm-test-missing-bindir" -, "version" : "0.0.0" -, "scripts" : { "test" : "node test.js" } -, "directories": { "bin" : "./not-found" } } diff --git a/deps/npm/test/packages/npm-test-missing-bindir/test.js b/deps/npm/test/packages/npm-test-missing-bindir/test.js deleted file mode 100644 index f548458ac04..00000000000 --- a/deps/npm/test/packages/npm-test-missing-bindir/test.js +++ /dev/null @@ -1,5 +0,0 @@ - -var assert = require("assert") -assert.equal(undefined, process.env.npm_config__password, "password exposed!") -assert.equal(undefined, process.env.npm_config__auth, "auth exposed!") -assert.equal(undefined, process.env.npm_config__authCrypt, "authCrypt exposed!") diff --git a/deps/npm/test/packages/npm-test-private/package.json b/deps/npm/test/packages/npm-test-private/package.json deleted file mode 100644 index 3d95a37af14..00000000000 --- a/deps/npm/test/packages/npm-test-private/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{"name":"npm-test-private" -,"version":"9.9.9-9" -,"homepage":"http://www.youtube.com/watch?v=1MLry6Cn_D4" -,"private":"true"} diff --git a/deps/npm/test/packages/npm-test-test-package/package.json b/deps/npm/test/packages/npm-test-test-package/package.json deleted file mode 100644 index c5c5aeabc1e..00000000000 --- a/deps/npm/test/packages/npm-test-test-package/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "name":"npm-test-test-package" -, "author" : "Testy McMock" -, "version" : "1.2.3-99-b" -, "description" : "This is a test package used for debugging. It has some random data and that's all." -} diff --git a/deps/npm/test/packages/npm-test-url-dep/package.json b/deps/npm/test/packages/npm-test-url-dep/package.json deleted file mode 100644 index 72a139e5471..00000000000 --- a/deps/npm/test/packages/npm-test-url-dep/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ "name":"npm-test-url-dep" -, "version" : "1.2.3" -, "dependencies" : - { "dnode" : "https://github.com/substack/dnode/tarball/master" } } diff --git a/deps/npm/test/run b/deps/npm/test/run deleted file mode 100755 index 2443726db87..00000000000 --- a/deps/npm/test/run +++ /dev/null @@ -1,138 +0,0 @@ -#!/bin/bash - -if [ "$DEBUG" != "" ]; then - set -x -fi - - -# the "npm" command is set to a custom function here so that we can -# test the code in this repo, rather than whichever version of npm -# happens to be installed. - -main () { - # setup - FAILURES=0 - - cd "$TESTDIR" - - npm config ls - - # install - npm install "$NPMPKG" || exit 1 - - # used in test later - npm config set package-config:foo boo || exit 1 - - npm install $( ls packages | awk '{print "packages/" $1 }' ) || exit 1 - (ls packages | while read pkg; do - npm test "$pkg" - done) || exit 1 - if [ "$FAILURES" == "0" ]; then - npm rm $(ls packages) npm || exit 1 - fi - cleanup - - if ! [ "$npm_package_config_publishtest" == "true" ]; then - echo_err "To test publishing: npm config set npm:publishtest true" - else - # attempt to publish and unpublish each of them. - npm install "$NPMPKG" || exit 1 - - (ls packages | grep -v 'npm-test-private' | while read pkg; do - npm publish packages/$pkg || exit 1 - npm install $pkg || exit 1 - npm unpublish $pkg || exit 1 - done) || exit 1 - - # verify that the private package can't be published - # bypass the test-harness npm function. - "$NPMCLI" publish packages/npm-test-private && ( - npm unpublish npm-test-private - exit 1000 - ) - if [ $? -eq 1000 ]; then - fail "Private package shouldn't be publishable" >&2 - fi - - if [ "$FAILURES" == "0" ]; then - npm rm $(ls packages) npm || exit 1 - fi - cleanup - - fi - - if [ $FAILURES -eq 0 ]; then - echo_err "ok" - rm -rf $TMP - else - echo_err "FAILED: $FAILURES" - fi - exit $FAILURES -} - - - -#################### -# Test Harness below - -# fake functions -npm () { - echo -e "npm $@" - "$NPMCLI" "$@" \ - || fail npm "$@" -} - -# get the absolute path of the executable -SELF_PATH="$0" -if [ "${SELF_PATH:0:1}" != "." ] && [ "${SELF_PATH:0:1}" != "/" ]; then - SELF_PATH=./"$SELF_PATH" -fi -SELF_PATH=$( cd -P -- "$(dirname -- "$SELF_PATH")" \ - && pwd -P \ - ) && SELF_PATH=$SELF_PATH/$(basename -- "$0") -# resolve symlinks -while [ -h "$SELF_PATH" ]; do - DIR=$(dirname -- "$SELF_PATH") - SYM=$(readlink -- "$SELF_PATH") - SELF_PATH=$( cd -- "$DIR" \ - && cd -- $(dirname -- "$SYM") \ - && pwd \ - )/$(basename -- "$SYM") -done -NPMPKG="$(dirname -- "$(dirname -- "$SELF_PATH")")" -NPMCLI="$NPMPKG/cli.js" -TESTDIR="$NPMPKG/test/" -TMP=${TMPDIR:-/tmp} -rm -rf $TMP/npm* -TMP=$TMP/npm-test-$$ -echo "Testing in $TMP ..." -ROOTDIR="$TMP/root" - -cleanup () { - if [ "$FAILURES" != "0" ] && [ "$FAILURES" != "" ]; then - return - fi - [ -d "$ROOTDIR" ] && rm -rf -- "$ROOTDIR" - mkdir -p -- "$ROOTDIR" -} - -export npm_config_prefix="$ROOTDIR" -export npm_config_color="always" -export npm_config_global=true -# have to set this to false, or it'll try to test itself forever -export npm_config_npat=false -export PATH="$PATH":"$ROOTDIR/bin":"$ROOTDIR/node_modules/.bin" -export NODE_PATH="$ROOTDIR/node_modules" - -echo_err () { - echo "$@" >&2 -} -fail () { - let 'FAILURES += 1' - echo_err "" - echo_err -e "\033[33mFailure: $@\033[m" - exit 1 -} - -cleanup -main diff --git a/deps/npm/test/update-test.sh b/deps/npm/test/update-test.sh deleted file mode 100755 index f72c90dd98e..00000000000 --- a/deps/npm/test/update-test.sh +++ /dev/null @@ -1,59 +0,0 @@ -#!/bin/bash - -SELF_PATH="$0" -if [ "${SELF_PATH:0:1}" != "." ] && [ "${SELF_PATH:0:1}" != "/" ]; then - SELF_PATH=./"$SELF_PATH" -fi -SELF_PATH=$( cd -P -- "$(dirname -- "$SELF_PATH")" \ - && pwd -P \ - ) && SELF_PATH=$SELF_PATH/$(basename -- "$0") - -# resolve symlinks -while [ -h "$SELF_PATH" ]; do - DIR=$(dirname -- "$SELF_PATH") - SYM=$(readlink -- "$SELF_PATH") - SELF_PATH=$( cd -- "$DIR" \ - && cd -- $(dirname -- "$SYM") \ - && pwd \ - )/$(basename -- "$SYM") -done -DIR=$( dirname -- "$SELF_PATH" ) - -export npm_config_root=$DIR/root -export npm_config_binroot=$DIR/bin - -rm -rf $DIR/{root,bin} -mkdir -p $DIR/root -mkdir -p $DIR/bin -npm ls installed 2>/dev/null | grep -v npm | awk '{print $1}' | xargs npm rm &>/dev/null -npm install \ - base64@1.0.0 \ - eyes@0.1.1 \ - vows@0.2.5 \ - websocket-server@1.0.5 &>/dev/null -npm install ./test/packages/blerg &>/dev/null -npm install vows@0.3.0 &>/dev/null - -echo "" -echo "##" -echo "## starting update" -echo "##" -echo "" - -npm update - -echo "" -echo "##" -echo "## update done, all should be 'latest'" -echo "##" -echo "" - -list=$( npm ls installed remote 2>/dev/null ) -echo "$list" -notlatest=$( echo "$list" | grep -v latest ) -if [ "$notlatest" != "" ]; then - echo "Failed: not latest" - echo $notlatest -else - echo "ok" -fi