Comparing version 0.5.0 to 0.5.1
358
index.js
@@ -1,237 +0,237 @@ | ||
var tar = require('tar-stream'); | ||
var pump = require('pump'); | ||
var mkdirp = require('mkdirp'); | ||
var fs = require('fs'); | ||
var path = require('path'); | ||
var os = require('os'); | ||
var tar = require('tar-stream') | ||
var pump = require('pump') | ||
var mkdirp = require('mkdirp') | ||
var fs = require('fs') | ||
var path = require('path') | ||
var os = require('os') | ||
var win32 = os.platform() === 'win32'; | ||
var win32 = os.platform() === 'win32' | ||
var noop = function() {}; | ||
var noop = function() {} | ||
var echo = function(name) { | ||
return name; | ||
}; | ||
return name | ||
} | ||
var normalize = !win32 ? echo : function(name) { | ||
return name.replace(/\\/g, '/'); | ||
}; | ||
return name.replace(/\\/g, '/') | ||
} | ||
var statAll = function(cwd, ignore) { | ||
var queue = ['.']; | ||
var queue = ['.'] | ||
return function loop(callback) { | ||
if (!queue.length) return callback(); | ||
var next = queue.shift(); | ||
var nextAbs = path.join(cwd, next); | ||
return function loop(callback) { | ||
if (!queue.length) return callback() | ||
var next = queue.shift() | ||
var nextAbs = path.join(cwd, next) | ||
fs.lstat(nextAbs, function(err, stat) { | ||
if (err) return callback(err); | ||
fs.lstat(nextAbs, function(err, stat) { | ||
if (err) return callback(err) | ||
if (!stat.isDirectory()) return callback(null, next, stat); | ||
if (!stat.isDirectory()) return callback(null, next, stat) | ||
fs.readdir(nextAbs, function(err, files) { | ||
if (err) return callback(err); | ||
fs.readdir(nextAbs, function(err, files) { | ||
if (err) return callback(err) | ||
for (var i = 0; i < files.length; i++) { | ||
if (!ignore(path.join(cwd, next, files[i]))) queue.push(path.join(next, files[i])); | ||
} | ||
for (var i = 0; i < files.length; i++) { | ||
if (!ignore(path.join(cwd, next, files[i]))) queue.push(path.join(next, files[i])) | ||
} | ||
callback(null, next, stat); | ||
}); | ||
}); | ||
}; | ||
}; | ||
callback(null, next, stat) | ||
}) | ||
}) | ||
} | ||
} | ||
var strip = function(map, level) { | ||
return function(header) { | ||
header.name = header.name.split('/').slice(level).join('/') | ||
if (header.linkname) header.linkname = header.linkname.split('/').slice(level).join('/') | ||
return map(header) | ||
} | ||
return function(header) { | ||
header.name = header.name.split('/').slice(level).join('/') | ||
if (header.linkname) header.linkname = header.linkname.split('/').slice(level).join('/') | ||
return map(header) | ||
} | ||
} | ||
exports.pack = function(cwd, opts) { | ||
if (!cwd) cwd = '.'; | ||
if (!opts) opts = {}; | ||
if (!cwd) cwd = '.' | ||
if (!opts) opts = {} | ||
var ignore = opts.ignore || noop; | ||
var map = opts.map || noop; | ||
var mapStream = opts.mapStream || echo; | ||
var statNext = statAll(cwd, ignore); | ||
var pack = tar.pack(); | ||
var ignore = opts.ignore || noop | ||
var map = opts.map || noop | ||
var mapStream = opts.mapStream || echo | ||
var statNext = statAll(cwd, ignore) | ||
var pack = tar.pack() | ||
if (opts.strip) map = strip(map, opts.strip) | ||
if (opts.strip) map = strip(map, opts.strip) | ||
var onlink = function(filename, header) { | ||
fs.readlink(path.join(cwd, filename), function(err, linkname) { | ||
if (err) return pack.destroy(err); | ||
header.linkname = normalize(linkname); | ||
pack.entry(header, onnextentry); | ||
}); | ||
}; | ||
var onlink = function(filename, header) { | ||
fs.readlink(path.join(cwd, filename), function(err, linkname) { | ||
if (err) return pack.destroy(err) | ||
header.linkname = normalize(linkname) | ||
pack.entry(header, onnextentry) | ||
}) | ||
} | ||
var onstat = function(err, filename, stat) { | ||
if (err) return pack.destroy(err); | ||
if (!filename) return pack.finalize(); | ||
var onstat = function(err, filename, stat) { | ||
if (err) return pack.destroy(err) | ||
if (!filename) return pack.finalize() | ||
if (stat.isSocket()) return onnextentry() // tar does not support sockets... | ||
if (stat.isSocket()) return onnextentry() // tar does not support sockets... | ||
var header = { | ||
name: normalize(filename), | ||
mode: stat.mode, | ||
mtime: stat.mtime, | ||
size: stat.size, | ||
type: 'file', | ||
uid: stat.uid, | ||
gid: stat.gid | ||
}; | ||
var header = { | ||
name: normalize(filename), | ||
mode: stat.mode, | ||
mtime: stat.mtime, | ||
size: stat.size, | ||
type: 'file', | ||
uid: stat.uid, | ||
gid: stat.gid | ||
} | ||
if (stat.isDirectory()) { | ||
header.size = 0; | ||
header.type = 'directory'; | ||
return pack.entry(header, onnextentry); | ||
} | ||
if (stat.isDirectory()) { | ||
header.size = 0 | ||
header.type = 'directory' | ||
return pack.entry(header, onnextentry) | ||
} | ||
if (stat.isSymbolicLink()) { | ||
header.size = 0; | ||
header.type = 'symlink'; | ||
return onlink(filename, header); | ||
} | ||
if (stat.isSymbolicLink()) { | ||
header.size = 0 | ||
header.type = 'symlink' | ||
return onlink(filename, header) | ||
} | ||
// TODO: add fifo etc... | ||
// TODO: add fifo etc... | ||
if (!stat.isFile()) return pack.destroy(new Error('unsupported type for '+filename)); | ||
if (!stat.isFile()) return pack.destroy(new Error('unsupported type for '+filename)) | ||
header = map(header) || header | ||
header = map(header) || header | ||
var entry = pack.entry(header, onnextentry); | ||
if (!entry) return; | ||
var rs = fs.createReadStream(path.join(cwd, filename)); | ||
var entry = pack.entry(header, onnextentry) | ||
if (!entry) return | ||
var rs = fs.createReadStream(path.join(cwd, filename)) | ||
pump(mapStream(rs), entry); | ||
}; | ||
pump(mapStream(rs), entry) | ||
} | ||
var onnextentry = function(err) { | ||
if (err) return pack.destroy(err); | ||
statNext(onstat); | ||
}; | ||
var onnextentry = function(err) { | ||
if (err) return pack.destroy(err) | ||
statNext(onstat) | ||
} | ||
onnextentry(); | ||
onnextentry() | ||
return pack; | ||
}; | ||
return pack | ||
} | ||
var head = function(list) { | ||
return list.length ? list[list.length-1] : null | ||
}; | ||
return list.length ? list[list.length-1] : null | ||
} | ||
exports.extract = function(cwd, opts) { | ||
if (!cwd) cwd = '.'; | ||
if (!opts) opts = {}; | ||
if (!cwd) cwd = '.' | ||
if (!opts) opts = {} | ||
var ignore = opts.ignore || noop; | ||
var map = opts.map || noop; | ||
var mapStream = opts.mapStream || echo; | ||
var own = opts.chown !== false && !win32 && process.getuid() === 0; | ||
var extract = tar.extract(); | ||
var stack = []; | ||
var now = new Date(); | ||
var umask = typeof opts.umask === 'number' ? ~opts.umask : ~process.umask(); | ||
var dmode = typeof opts.dmode === 'number' ? opts.dmode : 0; | ||
var fmode = typeof opts.fmode === 'number' ? opts.fmode : 0; | ||
var ignore = opts.ignore || noop | ||
var map = opts.map || noop | ||
var mapStream = opts.mapStream || echo | ||
var own = opts.chown !== false && !win32 && process.getuid() === 0 | ||
var extract = tar.extract() | ||
var stack = [] | ||
var now = new Date() | ||
var umask = typeof opts.umask === 'number' ? ~opts.umask : ~process.umask() | ||
var dmode = typeof opts.dmode === 'number' ? opts.dmode : 0 | ||
var fmode = typeof opts.fmode === 'number' ? opts.fmode : 0 | ||
if (opts.strip) map = strip(map, opts.strip) | ||
if (opts.strip) map = strip(map, opts.strip) | ||
if (opts.readable) { | ||
dmode |= 0555; | ||
fmode |= 0444; | ||
} | ||
if (opts.writable) { | ||
dmode |= 0333; | ||
fmode |= 0222; | ||
} | ||
if (opts.readable) { | ||
dmode |= 0555 | ||
fmode |= 0444 | ||
} | ||
if (opts.writable) { | ||
dmode |= 0333 | ||
fmode |= 0222 | ||
} | ||
var utimesParent = function(name, cb) { // we just set the mtime on the parent dir again everytime we write an entry | ||
var top; | ||
while ((top = head(stack)) && name.slice(0, top[0].length) !== top[0]) stack.pop(); | ||
if (!top) return cb(); | ||
fs.utimes(top[0], now, top[1], cb); | ||
}; | ||
var utimesParent = function(name, cb) { // we just set the mtime on the parent dir again everytime we write an entry | ||
var top | ||
while ((top = head(stack)) && name.slice(0, top[0].length) !== top[0]) stack.pop() | ||
if (!top) return cb() | ||
fs.utimes(top[0], now, top[1], cb) | ||
} | ||
var utimes = function(name, header, cb) { | ||
if (opts.utimes === false) return cb(); | ||
var utimes = function(name, header, cb) { | ||
if (opts.utimes === false) return cb() | ||
if (header.type === 'directory') return fs.utimes(name, now, header.mtime, cb); | ||
if (header.type === 'symlink') return utimesParent(name, cb); // TODO: how to set mtime on link? | ||
if (header.type === 'directory') return fs.utimes(name, now, header.mtime, cb) | ||
if (header.type === 'symlink') return utimesParent(name, cb) // TODO: how to set mtime on link? | ||
fs.utimes(name, now, header.mtime, function(err) { | ||
if (err) return cb(err); | ||
utimesParent(name, cb); | ||
}); | ||
}; | ||
fs.utimes(name, now, header.mtime, function(err) { | ||
if (err) return cb(err) | ||
utimesParent(name, cb) | ||
}) | ||
} | ||
var chperm = function(name, header, cb) { | ||
var link = header.type === 'symlink'; | ||
var chmod = link ? fs.lchmod : fs.chmod; | ||
var chown = link ? fs.lchown : fs.chown; | ||
var chperm = function(name, header, cb) { | ||
var link = header.type === 'symlink' | ||
var chmod = link ? fs.lchmod : fs.chmod | ||
var chown = link ? fs.lchown : fs.chown | ||
if (!chmod) return cb(); | ||
chmod(name, (header.mode | (header.type === 'directory' ? dmode : fmode)) & umask, function(err) { | ||
if (err) return cb(err); | ||
if (!own) return cb(); | ||
if (!chown) return cb(); | ||
chown(name, header.uid, header.gid, cb); | ||
}); | ||
}; | ||
if (!chmod) return cb() | ||
chmod(name, (header.mode | (header.type === 'directory' ? dmode : fmode)) & umask, function(err) { | ||
if (err) return cb(err) | ||
if (!own) return cb() | ||
if (!chown) return cb() | ||
chown(name, header.uid, header.gid, cb) | ||
}) | ||
} | ||
extract.on('entry', function(header, stream, next) { | ||
header = map(header) || header | ||
var name = path.join(cwd, path.join('/', header.name)); | ||
extract.on('entry', function(header, stream, next) { | ||
header = map(header) || header | ||
var name = path.join(cwd, path.join('/', header.name)) | ||
if (ignore(name)) { | ||
stream.resume(); | ||
return next(); | ||
} | ||
if (ignore(name)) { | ||
stream.resume() | ||
return next() | ||
} | ||
var stat = function(err) { | ||
if (err) return next(err); | ||
if (win32) return next(); | ||
utimes(name, header, function(err) { | ||
if (err) return next(err); | ||
chperm(name, header, next); | ||
}); | ||
}; | ||
var stat = function(err) { | ||
if (err) return next(err) | ||
if (win32) return next() | ||
utimes(name, header, function(err) { | ||
if (err) return next(err) | ||
chperm(name, header, next) | ||
}) | ||
} | ||
var onlink = function() { | ||
if (win32) return next(); // skip symlinks on win for now before it can be tested | ||
fs.unlink(name, function() { | ||
fs.symlink(header.linkname, name, stat); | ||
}); | ||
}; | ||
var onlink = function() { | ||
if (win32) return next() // skip symlinks on win for now before it can be tested | ||
fs.unlink(name, function() { | ||
fs.symlink(header.linkname, name, stat) | ||
}) | ||
} | ||
var onfile = function() { | ||
var ws = fs.createWriteStream(name); | ||
var onfile = function() { | ||
var ws = fs.createWriteStream(name) | ||
pump(mapStream(stream), ws, function(err) { | ||
if (err) return next(err); | ||
ws.on('close', stat); | ||
}); | ||
}; | ||
pump(mapStream(stream), ws, function(err) { | ||
if (err) return next(err) | ||
ws.on('close', stat) | ||
}) | ||
} | ||
if (header.type === 'directory') { | ||
stack.push([name, header.mtime]); | ||
return mkdirp(name, stat); | ||
} | ||
if (header.type === 'directory') { | ||
stack.push([name, header.mtime]) | ||
return mkdirp(name, stat) | ||
} | ||
mkdirp(path.dirname(name), function(err) { | ||
if (err) return next(err); | ||
if (header.type === 'symlink') return onlink(); | ||
if (header.type !== 'file') return next(new Error('unsupported type for '+name+' ('+header.type+')')); | ||
mkdirp(path.dirname(name), function(err) { | ||
if (err) return next(err) | ||
if (header.type === 'symlink') return onlink() | ||
if (header.type !== 'file') return next(new Error('unsupported type for '+name+' ('+header.type+')')) | ||
onfile(); | ||
}); | ||
}); | ||
onfile() | ||
}) | ||
}) | ||
return extract; | ||
}; | ||
return extract | ||
} |
{ | ||
"name": "tar-fs", | ||
"version": "0.5.0", | ||
"version": "0.5.1", | ||
"description": "filesystem bindings for tar-stream", | ||
"repository": "git://github.com:mafintosh/tar-fs.git", | ||
"repository": { | ||
"type": "git", | ||
"url": "git://github.com:mafintosh/tar-fs.git" | ||
}, | ||
"dependencies": { | ||
"tar-stream": "~0.4.1", | ||
"pump": "~0.3.0", | ||
"mkdirp": "~0.3.5" | ||
"mkdirp": "^0.5.0", | ||
"pump": "^0.3.5", | ||
"tar-stream": "^0.4.6" | ||
}, | ||
@@ -20,8 +23,18 @@ "keywords": [ | ||
"devDependencies": { | ||
"tap": "~0.4.6", | ||
"rimraf": "~2.2.5" | ||
"rimraf": "^2.2.8", | ||
"tape": "^3.0.0" | ||
}, | ||
"scripts": { | ||
"test": "tap test/index.js" | ||
} | ||
"test": "tape test/index.js" | ||
}, | ||
"bugs": { | ||
"url": "https://github.com/mafintosh/tar-fs/issues" | ||
}, | ||
"homepage": "https://github.com/mafintosh/tar-fs", | ||
"main": "index.js", | ||
"directories": { | ||
"test": "test" | ||
}, | ||
"author": "Mathias Buus", | ||
"license": "MIT" | ||
} |
@@ -1,127 +0,127 @@ | ||
var test = require('tap').test; | ||
var rimraf = require('rimraf'); | ||
var tar = require('../index'); | ||
var path = require('path'); | ||
var fs = require('fs'); | ||
var os = require('os'); | ||
var test = require('tape') | ||
var rimraf = require('rimraf') | ||
var tar = require('../index') | ||
var path = require('path') | ||
var fs = require('fs') | ||
var os = require('os') | ||
var win32 = os.platform() === 'win32'; | ||
var win32 = os.platform() === 'win32' | ||
test('copy a -> copy/a', function(t) { | ||
t.plan(5); | ||
t.plan(5) | ||
var a = path.join(__dirname, 'fixtures', 'a'); | ||
var b = path.join(__dirname, 'fixtures', 'copy', 'a'); | ||
var a = path.join(__dirname, 'fixtures', 'a') | ||
var b = path.join(__dirname, 'fixtures', 'copy', 'a') | ||
rimraf.sync(b); | ||
tar.pack(a) | ||
.pipe(tar.extract(b)) | ||
.on('finish', function() { | ||
var files = fs.readdirSync(b); | ||
t.same(files.length, 1); | ||
t.same(files[0], 'hello.txt'); | ||
var fileB = path.join(b, files[0]); | ||
var fileA = path.join(a, files[0]); | ||
t.same(fs.readFileSync(fileB, 'utf-8'), fs.readFileSync(fileA, 'utf-8')); | ||
t.same(fs.statSync(fileB).mode, fs.statSync(fileA).mode); | ||
t.same(fs.statSync(fileB).mtime.getTime(), fs.statSync(fileA).mtime.getTime()); | ||
}); | ||
}); | ||
rimraf.sync(b) | ||
tar.pack(a) | ||
.pipe(tar.extract(b)) | ||
.on('finish', function() { | ||
var files = fs.readdirSync(b) | ||
t.same(files.length, 1) | ||
t.same(files[0], 'hello.txt') | ||
var fileB = path.join(b, files[0]) | ||
var fileA = path.join(a, files[0]) | ||
t.same(fs.readFileSync(fileB, 'utf-8'), fs.readFileSync(fileA, 'utf-8')) | ||
t.same(fs.statSync(fileB).mode, fs.statSync(fileA).mode) | ||
t.same(fs.statSync(fileB).mtime.getTime(), fs.statSync(fileA).mtime.getTime()) | ||
}) | ||
}) | ||
test('copy b -> copy/b', function(t) { | ||
t.plan(8); | ||
t.plan(8) | ||
var a = path.join(__dirname, 'fixtures', 'b'); | ||
var b = path.join(__dirname, 'fixtures', 'copy', 'b'); | ||
var a = path.join(__dirname, 'fixtures', 'b') | ||
var b = path.join(__dirname, 'fixtures', 'copy', 'b') | ||
rimraf.sync(b); | ||
tar.pack(a) | ||
.pipe(tar.extract(b)) | ||
.on('finish', function() { | ||
var files = fs.readdirSync(b); | ||
t.same(files.length, 1); | ||
t.same(files[0], 'a'); | ||
var dirB = path.join(b, files[0]); | ||
var dirA = path.join(a, files[0]); | ||
t.same(fs.statSync(dirB).mode, fs.statSync(dirA).mode); | ||
t.same(fs.statSync(dirB).mtime.getTime(), fs.statSync(dirA).mtime.getTime()); | ||
t.ok(fs.statSync(dirB).isDirectory()); | ||
var fileB = path.join(dirB, 'test.js'); | ||
var fileA = path.join(dirA, 'test.js'); | ||
t.same(fs.readFileSync(fileB, 'utf-8'), fs.readFileSync(fileA, 'utf-8')); | ||
t.same(fs.statSync(fileB).mode, fs.statSync(fileA).mode); | ||
t.same(fs.statSync(fileB).mtime.getTime(), fs.statSync(fileA).mtime.getTime()); | ||
}); | ||
}); | ||
rimraf.sync(b) | ||
tar.pack(a) | ||
.pipe(tar.extract(b)) | ||
.on('finish', function() { | ||
var files = fs.readdirSync(b) | ||
t.same(files.length, 1) | ||
t.same(files[0], 'a') | ||
var dirB = path.join(b, files[0]) | ||
var dirA = path.join(a, files[0]) | ||
t.same(fs.statSync(dirB).mode, fs.statSync(dirA).mode) | ||
t.same(fs.statSync(dirB).mtime.getTime(), fs.statSync(dirA).mtime.getTime()) | ||
t.ok(fs.statSync(dirB).isDirectory()) | ||
var fileB = path.join(dirB, 'test.js') | ||
var fileA = path.join(dirA, 'test.js') | ||
t.same(fs.readFileSync(fileB, 'utf-8'), fs.readFileSync(fileA, 'utf-8')) | ||
t.same(fs.statSync(fileB).mode, fs.statSync(fileA).mode) | ||
t.same(fs.statSync(fileB).mtime.getTime(), fs.statSync(fileA).mtime.getTime()) | ||
}) | ||
}) | ||
test('symlink', function(t) { | ||
if (win32) { // no symlink support on win32 currently. TODO: test if this can be enabled somehow | ||
t.plan(1); | ||
t.ok(true); | ||
return; | ||
} | ||
if (win32) { // no symlink support on win32 currently. TODO: test if this can be enabled somehow | ||
t.plan(1) | ||
t.ok(true) | ||
return | ||
} | ||
t.plan(5); | ||
t.plan(5) | ||
var a = path.join(__dirname, 'fixtures', 'c'); | ||
var a = path.join(__dirname, 'fixtures', 'c') | ||
rimraf.sync(path.join(a, 'link')); | ||
fs.symlinkSync('.gitignore', path.join(a, 'link')); | ||
rimraf.sync(path.join(a, 'link')) | ||
fs.symlinkSync('.gitignore', path.join(a, 'link')) | ||
var b = path.join(__dirname, 'fixtures', 'copy', 'c'); | ||
var b = path.join(__dirname, 'fixtures', 'copy', 'c') | ||
rimraf.sync(b); | ||
tar.pack(a) | ||
.pipe(tar.extract(b)) | ||
.on('finish', function() { | ||
var files = fs.readdirSync(b).sort(); | ||
t.same(files.length, 2); | ||
t.same(files[0], '.gitignore'); | ||
t.same(files[1], 'link'); | ||
rimraf.sync(b) | ||
tar.pack(a) | ||
.pipe(tar.extract(b)) | ||
.on('finish', function() { | ||
var files = fs.readdirSync(b).sort() | ||
t.same(files.length, 2) | ||
t.same(files[0], '.gitignore') | ||
t.same(files[1], 'link') | ||
var linkA = path.join(a, 'link'); | ||
var linkB = path.join(b, 'link'); | ||
var linkA = path.join(a, 'link') | ||
var linkB = path.join(b, 'link') | ||
t.same(fs.lstatSync(linkB).mtime.getTime(), fs.lstatSync(linkA).mtime.getTime()); | ||
t.same(fs.readlinkSync(linkB), fs.readlinkSync(linkA)); | ||
}); | ||
}); | ||
t.same(fs.lstatSync(linkB).mtime.getTime(), fs.lstatSync(linkA).mtime.getTime()) | ||
t.same(fs.readlinkSync(linkB), fs.readlinkSync(linkA)) | ||
}) | ||
}) | ||
test('strip', function(t) { | ||
t.plan(2) | ||
t.plan(2) | ||
var a = path.join(__dirname, 'fixtures', 'b'); | ||
var b = path.join(__dirname, 'fixtures', 'copy', 'b-strip'); | ||
var a = path.join(__dirname, 'fixtures', 'b') | ||
var b = path.join(__dirname, 'fixtures', 'copy', 'b-strip') | ||
rimraf.sync(b) | ||
rimraf.sync(b) | ||
tar.pack(a) | ||
.pipe(tar.extract(b, {strip:1})) | ||
.on('finish', function() { | ||
var files = fs.readdirSync(b).sort(); | ||
t.same(files.length, 1) | ||
t.same(files[0], 'test.js') | ||
}) | ||
tar.pack(a) | ||
.pipe(tar.extract(b, {strip:1})) | ||
.on('finish', function() { | ||
var files = fs.readdirSync(b).sort() | ||
t.same(files.length, 1) | ||
t.same(files[0], 'test.js') | ||
}) | ||
}) | ||
test('strip + map', function(t) { | ||
t.plan(2) | ||
t.plan(2) | ||
var a = path.join(__dirname, 'fixtures', 'b'); | ||
var b = path.join(__dirname, 'fixtures', 'copy', 'b-strip'); | ||
var a = path.join(__dirname, 'fixtures', 'b') | ||
var b = path.join(__dirname, 'fixtures', 'copy', 'b-strip') | ||
rimraf.sync(b) | ||
rimraf.sync(b) | ||
var uppercase = function(header) { | ||
header.name = header.name.toUpperCase() | ||
return header | ||
} | ||
var uppercase = function(header) { | ||
header.name = header.name.toUpperCase() | ||
return header | ||
} | ||
tar.pack(a) | ||
.pipe(tar.extract(b, {strip:1, map:uppercase})) | ||
.on('finish', function() { | ||
var files = fs.readdirSync(b).sort(); | ||
t.same(files.length, 1) | ||
t.same(files[0], 'TEST.JS') | ||
}) | ||
tar.pack(a) | ||
.pipe(tar.extract(b, {strip:1, map:uppercase})) | ||
.on('finish', function() { | ||
var files = fs.readdirSync(b).sort() | ||
t.same(files.length, 1) | ||
t.same(files[0], 'TEST.JS') | ||
}) | ||
}) |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
No contributors or author data
MaintenancePackage does not specify a list of contributors or an author in package.json.
Found 1 instance in 1 package
No bug tracker
MaintenancePackage does not have a linked bug tracker in package.json.
Found 1 instance in 1 package
No repository
Supply chain riskPackage does not have a linked source code repository. Without this field, a package will have no reference to the location of the source code use to generate the package.
Found 1 instance in 1 package
No website
QualityPackage does not have a website.
Found 1 instance in 1 package
14226
0
1
2
1
+ Addedminimist@1.2.8(transitive)
+ Addedmkdirp@0.5.6(transitive)
- Removedmkdirp@0.3.5(transitive)
Updatedmkdirp@^0.5.0
Updatedpump@^0.3.5
Updatedtar-stream@^0.4.6