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.

35 lines
876 B

var fs = require('fs')
var path = require('path')
var mkdirp = require('mkdirp')
var tar = require('tar-stream')
var zlib = require('zlib')
function mode (octal) {
return parseInt(octal, 8)
}
function pack (filename, tarPath, cb) {
mkdirp(path.dirname(tarPath), function () {
fs.stat(filename, function (err, st) {
if (err) return cb(err)
var tarStream = tar.pack()
var ws = fs.createWriteStream(tarPath)
var stream = tarStream.entry({
name: filename.replace(/\\/g, '/').replace(/:/g, '_'),
size: st.size,
mode: st.mode | mode('444') | mode('222'),
gid: st.gid,
uid: st.uid
})
fs.createReadStream(filename).pipe(stream).on('finish', function () {
tarStream.finalize()
})
tarStream.pipe(zlib.createGzip()).pipe(ws).on('close', cb)
})
})
}
module.exports = pack