You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							952 lines
						
					
					
						
							21 KiB
						
					
					
				
			
		
		
	
	
							952 lines
						
					
					
						
							21 KiB
						
					
					
				
 | 
						|
// the symlink file is excluded from git, because it makes | 
						|
// windows freak the hell out. | 
						|
var fs = require("fs") | 
						|
  , path = require("path") | 
						|
  , symlink = path.resolve(__dirname, "fixtures/symlink") | 
						|
try { fs.unlinkSync(symlink) } catch (e) {} | 
						|
fs.symlinkSync("./hardlink-1", symlink) | 
						|
process.on("exit", function () { | 
						|
  fs.unlinkSync(symlink) | 
						|
}) | 
						|
 | 
						|
 | 
						|
var tap = require("tap") | 
						|
  , tar = require("../tar.js") | 
						|
  , pkg = require("../package.json") | 
						|
  , Pack = tar.Pack | 
						|
  , fstream = require("fstream") | 
						|
  , Reader = fstream.Reader | 
						|
  , Writer = fstream.Writer | 
						|
  , 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. | 
						|
    [ [ '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 } ] | 
						|
 | 
						|
    , [ '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, | 
						|
        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, | 
						|
        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, | 
						|
        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, | 
						|
        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, | 
						|
        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, | 
						|
        type: '0', | 
						|
        linkpath: '', | 
						|
        ustar: 'ustar\u0000', | 
						|
        ustarver: '00', | 
						|
        uname: '', | 
						|
        gname: '', | 
						|
        devmaj: 0, | 
						|
        devmin: 0, | 
						|
        fill: '' } ] | 
						|
 | 
						|
    , [ 'entry', | 
						|
      { path: 'fixtures/dir/', | 
						|
        mode: 488, | 
						|
        uid: uid, | 
						|
        gid: gid, | 
						|
        size: 0, | 
						|
        type: '5', | 
						|
        linkpath: '', | 
						|
        ustar: 'ustar\u0000', | 
						|
        ustarver: '00', | 
						|
        uname: '', | 
						|
        gname: '', | 
						|
        devmaj: 0, | 
						|
        devmin: 0, | 
						|
        fill: '' } ] | 
						|
 | 
						|
    , [ 'entry', | 
						|
      { path: 'fixtures/dir/sub/', | 
						|
        mode: 488, | 
						|
        uid: uid, | 
						|
        gid: gid, | 
						|
        size: 0, | 
						|
        type: '5', | 
						|
        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, | 
						|
        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, | 
						|
        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, | 
						|
        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, | 
						|
        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, | 
						|
        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, | 
						|
        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, | 
						|
        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, | 
						|
        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, | 
						|
        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, | 
						|
        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, | 
						|
        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, | 
						|
        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, | 
						|
        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, | 
						|
        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, | 
						|
        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, | 
						|
        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, | 
						|
        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, | 
						|
        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, | 
						|
        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, | 
						|
        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, | 
						|
        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, | 
						|
        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, | 
						|
        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, | 
						|
        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, | 
						|
        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, | 
						|
        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, | 
						|
        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, | 
						|
        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, | 
						|
        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, | 
						|
        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, | 
						|
        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, | 
						|
        type: '0', | 
						|
        linkpath: '', | 
						|
        ustar: 'ustar\u0000', | 
						|
        ustarver: '00', | 
						|
        uname: '', | 
						|
        gname: '', | 
						|
        devmaj: 0, | 
						|
        devmin: 0, | 
						|
        fill: '' } ] | 
						|
 | 
						|
    , [ 'entry', | 
						|
      { path: 'fixtures/symlink', | 
						|
        uid: uid, | 
						|
        gid: gid, | 
						|
        size: 0, | 
						|
        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, | 
						|
        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, | 
						|
        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) | 
						|
}) | 
						|
 | 
						|
tap.test("with from base", { timeout: 10000 }, function (t) { | 
						|
  runTest(t, true, true) | 
						|
}) | 
						|
 | 
						|
function alphasort (a, b) { | 
						|
  return a === b ? 0 | 
						|
       : a.toLowerCase() > b.toLowerCase() ? 1 | 
						|
       : a.toLowerCase() < b.toLowerCase() ? -1 | 
						|
       : a > b ? 1 | 
						|
       : -1 | 
						|
} | 
						|
 | 
						|
 | 
						|
function runTest (t, doGH, doFromBase) { | 
						|
  var reader = Reader({ path: input | 
						|
                      , filter: function () { | 
						|
                          return !this.path.match(/\.(tar|hex)$/) | 
						|
                        } | 
						|
                      , sort: alphasort | 
						|
                      }) | 
						|
 | 
						|
  var props = doGH ? pkg : {} | 
						|
  if(doFromBase) props.fromBase = true; | 
						|
 | 
						|
  var pack = Pack(props) | 
						|
  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") | 
						|
    if (c.length !== 512) { | 
						|
      // this one is too noisy, only assert if it'll be relevant | 
						|
      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(doFromBase) { | 
						|
      if(wanted[1].path.indexOf('fixtures/') && wanted[1].path.length == 100) | 
						|
        wanted[1].path = wanted[1].path.replace('fixtures/', '') + 'ccccccccc' | 
						|
 | 
						|
      if(wanted[1]) wanted[1].path = wanted[1].path.replace('fixtures/', '').replace('//', '/') | 
						|
      if(wanted[1].path == '') wanted[1].path = '/' | 
						|
      if(wanted[2] && wanted[2].path) wanted[2].path = wanted[2].path.replace('fixtures', '').replace(/^\//, '') | 
						|
 | 
						|
      wanted[1].linkpath = wanted[1].linkpath.replace('fixtures/', '') | 
						|
    } | 
						|
 | 
						|
    if (ev !== wanted[0] || e.path !== wanted[1].path) { | 
						|
      console.error("wanted", wanted) | 
						|
      console.error([ev, e.props]) | 
						|
      e.on("end", function () { | 
						|
        console.error(e.fields) | 
						|
        throw "break" | 
						|
      }) | 
						|
    } | 
						|
 | 
						|
 | 
						|
    t.has(e.props, wanted[1], "properties "+wanted[1].path) | 
						|
    if (wanted[2]) { | 
						|
      e.on("end", function () { | 
						|
        if (!e.fields) { | 
						|
          t.ok(e.fields, "should get fields") | 
						|
        } else { | 
						|
          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() | 
						|
  }) | 
						|
 | 
						|
}
 | 
						|
 |