123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- var path = require('path');
- var rimraf = require('rimraf');
- var fstreamIgnore = require('fstream-ignore');
- var mout = require('mout');
- var Q = require('q');
- function removeIgnores(dir, meta) {
- var reader;
- var applyIgnores;
- var deferred = Q.defer();
- var ignored = [];
- var nonIgnored = ['bower.json'];
- // Don't ignore main files
- nonIgnored = nonIgnored.concat(meta.main || []);
- nonIgnored = nonIgnored.map(function (file) {
- return path.join(dir, file);
- });
- reader = fstreamIgnore({
- path: dir,
- type: 'Directory'
- });
- reader.addIgnoreRules(meta.ignore || []);
- // Monkey patch applyIgnores such that we get hold of all ignored files
- applyIgnores = reader.applyIgnores;
- reader.applyIgnores = function (entry) {
- var ret = applyIgnores.apply(this, arguments);
- if (!ret) {
- ignored.push(path.join(dir, entry));
- }
- return ret;
- };
- reader
- .on('child', function (entry) {
- nonIgnored.push(entry.path);
- })
- .on('error', deferred.reject)
- .on('end', function () {
- var promises;
- // Ensure that we are not ignoring files that should not be ignored!
- ignored = mout.array.unique(ignored);
- ignored = ignored.filter(function (file) {
- return nonIgnored.indexOf(file) === -1;
- });
- // Delete all the ignored files
- promises = ignored.map(function (file) {
- return Q.nfcall(rimraf, file);
- });
- return Q.all(promises)
- .then(deferred.resolve, deferred.reject);
- });
- return deferred.promise;
- }
- module.exports = removeIgnores;
|