Blame view

node_modules/bower/lib/util/removeIgnores.js 1.64 KB
2dda2e10   Administrator   generator ignore
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
  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;