| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367 | 
							- // Set the umask, so that it works the same everywhere.
 
- process.umask(parseInt('22', 8))
 
- 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,
 
-     linkpath: undefined },
 
-   { path: '/200-hard',
 
-     mode: '100644',
 
-     type: 'File',
 
-     depth: 1,
 
-     size: 200,
 
-     linkpath: undefined,
 
-     nlink: 2 },
 
-   { path: '/200LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL',
 
-     mode: '120777',
 
-     type: 'SymbolicLink',
 
-     depth: 1,
 
-     size: 200,
 
-     linkpath: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc',
 
-     nlink: 1 },
 
-   { path: '/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc',
 
-     mode: '100644',
 
-     type: 'Link',
 
-     depth: 1,
 
-     size: 200,
 
-     linkpath: path.join(target, '200-hard'),
 
-     nlink: 2 },
 
-   { 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,
 
-     linkpath: undefined },
 
-   { path: '/r/e',
 
-     mode: '40755',
 
-     type: 'Directory',
 
-     depth: 2,
 
-     linkpath: undefined },
 
-   { path: '/r/e/a',
 
-     mode: '40755',
 
-     type: 'Directory',
 
-     depth: 3,
 
-     linkpath: undefined },
 
-   { path: '/r/e/a/l',
 
-     mode: '40755',
 
-     type: 'Directory',
 
-     depth: 4,
 
-     linkpath: undefined },
 
-   { path: '/r/e/a/l/l',
 
-     mode: '40755',
 
-     type: 'Directory',
 
-     depth: 5,
 
-     linkpath: undefined },
 
-   { path: '/r/e/a/l/l/y',
 
-     mode: '40755',
 
-     type: 'Directory',
 
-     depth: 6,
 
-     linkpath: undefined },
 
-   { path: '/r/e/a/l/l/y/-',
 
-     mode: '40755',
 
-     type: 'Directory',
 
-     depth: 7,
 
-     linkpath: undefined },
 
-   { path: '/r/e/a/l/l/y/-/d',
 
-     mode: '40755',
 
-     type: 'Directory',
 
-     depth: 8,
 
-     linkpath: undefined },
 
-   { path: '/r/e/a/l/l/y/-/d/e',
 
-     mode: '40755',
 
-     type: 'Directory',
 
-     depth: 9,
 
-     linkpath: undefined },
 
-   { path: '/r/e/a/l/l/y/-/d/e/e',
 
-     mode: '40755',
 
-     type: 'Directory',
 
-     depth: 10,
 
-     linkpath: undefined },
 
-   { path: '/r/e/a/l/l/y/-/d/e/e/p',
 
-     mode: '40755',
 
-     type: 'Directory',
 
-     depth: 11,
 
-     linkpath: undefined },
 
-   { path: '/r/e/a/l/l/y/-/d/e/e/p/-',
 
-     mode: '40755',
 
-     type: 'Directory',
 
-     depth: 12,
 
-     linkpath: undefined },
 
-   { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f',
 
-     mode: '40755',
 
-     type: 'Directory',
 
-     depth: 13,
 
-     linkpath: undefined },
 
-   { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o',
 
-     mode: '40755',
 
-     type: 'Directory',
 
-     depth: 14,
 
-     linkpath: undefined },
 
-   { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l',
 
-     mode: '40755',
 
-     type: 'Directory',
 
-     depth: 15,
 
-     linkpath: undefined },
 
-   { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d',
 
-     mode: '40755',
 
-     type: 'Directory',
 
-     depth: 16,
 
-     linkpath: undefined },
 
-   { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e',
 
-     mode: '40755',
 
-     type: 'Directory',
 
-     depth: 17,
 
-     linkpath: undefined },
 
-   { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r',
 
-     mode: '40755',
 
-     type: 'Directory',
 
-     depth: 18,
 
-     linkpath: undefined },
 
-   { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-',
 
-     mode: '40755',
 
-     type: 'Directory',
 
-     depth: 19,
 
-     linkpath: undefined },
 
-   { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p',
 
-     mode: '40755',
 
-     type: 'Directory',
 
-     depth: 20,
 
-     linkpath: undefined },
 
-   { 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,
 
-     linkpath: undefined },
 
-   { 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,
 
-     linkpath: undefined },
 
-   { 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,
 
-     linkpath: undefined },
 
-   { 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("preclean", function (t) {
 
-   require("rimraf").sync(__dirname + "/tmp/extract-test")
 
-   t.pass("cleaned!")
 
-   t.end()
 
- })
 
- 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.has(found, wanted, "unpacked file " + ef + " " + wanted.path)
 
-       entry.on("entry", foundEntry)
 
-     }
 
-     function finish () {
 
-       t.equal(ef, expectFiles.length, "should have "+ef+" items")
 
-       t.end()
 
-     }
 
-   }
 
- })
 
 
  |