12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- '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);
- };
|