mirror of
https://github.com/bower/bower.git
synced 2026-01-14 08:47:54 -05:00
66 lines
1.7 KiB
JavaScript
66 lines
1.7 KiB
JavaScript
var path = require('path');
|
|
var rimraf = require('../util/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;
|