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.
 
 
 
 

62 lines
1.3 KiB

'use strict';
var fs = require('fs');
var path = require('path');
var through = require('through2');
var mkdirp = require('mkdirp');
var rimraf = require('rimraf');
function write(file) {
var dir = path.dirname(file.path);
if (!fs.existsSync(dir)) {
mkdirp.sync(dir);
}
fs.writeFileSync(file.path, file.contents, {
mode: file.stat ? file.stat.mode : null
});
}
function remove(file) {
rimraf.sync(file.path);
}
module.exports = function (filters, cb) {
var store = this.store;
if (arguments.length === 1) {
cb = filters;
filters = [];
}
var modifiedFilter = through.obj(function (file, enc, cb) {
// Don't process deleted file who haven't been commited yet.
if (file.state === 'modified' || (file.state === 'deleted' && !file.isNew)) {
this.push(file);
}
cb();
});
var commitFilter = through.obj(function (file, enc, cb) {
store.add(file);
if (file.state === 'modified') {
write(file);
} else if (file.state === 'deleted') {
remove(file);
}
delete file.state;
delete file.isNew;
cb();
});
filters.unshift(modifiedFilter);
filters.push(commitFilter);
var stream = filters.reduce(function (stream, filter) {
return stream.pipe(filter);
}, this.store.stream());
stream.on('finish', cb);
};