'use strict'; var path = require('path'); var gutil = require('gulp-util'); var through = require('through2'); var objectAssign = require('object-assign'); var archiver = require('archiver'); module.exports = function (filename, opts) { if (!filename) { throw new gutil.PluginError('gulp-tar', '`filename` required'); } var firstFile; var archive = archiver('tar'); return through.obj(function (file, enc, cb) { if (file.relative === '') { cb(); return; } if (firstFile === undefined) { firstFile = file; } archive.append(file.contents, objectAssign({ name: file.relative.replace(/\\/g, '/') + (file.isNull() ? '/' : ''), mode: file.stat && file.stat.mode, date: file.stat && file.stat.mtime ? file.stat.mtime : null }, opts)); cb(); }, function (cb) { if (firstFile === undefined) { cb(); return; } archive.finalize(); this.push(new gutil.File({ cwd: firstFile.cwd, base: firstFile.base, path: path.join(firstFile.base, filename), contents: archive })); cb(); }); };