Skip to content

Commit aac0c51

Browse files
author
Ivan Nikitin
committed
Fixes shama#214 - Gaze.prototype._addToWatched repeating readDir of same directory on each call
1 parent bec9df3 commit aac0c51

File tree

2 files changed

+24
-13
lines changed

2 files changed

+24
-13
lines changed

lib/gaze.js

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -257,26 +257,27 @@ Gaze.prototype._addToWatched = function (files) {
257257
for (var i = 0; i < files.length; i++) {
258258
var file = files[i];
259259
var filepath = path.resolve(this.options.cwd, file);
260+
var isDir = helper.isDir(file);
260261

261-
var dirname = (helper.isDir(file)) ? filepath : path.dirname(filepath);
262+
var dirname = isDir ? filepath : path.dirname(filepath);
262263
dirname = helper.markDir(dirname);
263264

264265
// If a new dir is added
265-
if (helper.isDir(file) && !(filepath in this._watched)) {
266-
helper.objectPush(this._watched, filepath, []);
266+
if (!(dirname in this._watched)) {
267+
helper.objectPush(this._watched, dirname, []);
268+
269+
// add folders into the mix
270+
var readdir = fs.readdirSync(dirname);
271+
for (var j = 0; j < readdir.length; j++) {
272+
var dirfile = path.join(dirname, readdir[j]);
273+
if (fs.lstatSync(dirfile).isDirectory()) {
274+
helper.objectPush(this._watched, dirname, dirfile + path.sep);
275+
}
276+
}
267277
}
268278

269279
if (file.slice(-1) === '/') { filepath += path.sep; }
270280
helper.objectPush(this._watched, path.dirname(filepath) + path.sep, filepath);
271-
272-
// add folders into the mix
273-
var readdir = fs.readdirSync(dirname);
274-
for (var j = 0; j < readdir.length; j++) {
275-
var dirfile = path.join(dirname, readdir[j]);
276-
if (fs.lstatSync(dirfile).isDirectory()) {
277-
helper.objectPush(this._watched, dirname, dirfile + path.sep);
278-
}
279-
}
280281
}
281282
return this;
282283
};

test/add_test.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,13 @@ exports.add = {
1414
done();
1515
},
1616
addToWatched: function (test) {
17-
test.expect(1);
17+
test.expect(2);
18+
var oldreaddirSync = fs.readdirSync;
19+
var readdirCount = 0;
20+
fs.readdirSync = function() {
21+
readdirCount++;
22+
return oldreaddirSync.apply(this, arguments);
23+
};
1824
var files = [
1925
'Project (LO)/',
2026
'Project (LO)/one.js',
@@ -31,10 +37,14 @@ exports.add = {
3137
'nested/': ['sub/', 'sub2/', 'one.js', 'three.js'],
3238
'nested/sub/': ['two.js'],
3339
};
40+
3441
var gaze = new Gaze('addnothingtowatch');
3542
gaze._addToWatched(files);
3643
var result = gaze.relative(null, true);
3744
test.deepEqual(sortobj(result), sortobj(expected));
45+
test.strictEqual(readdirCount, 4);
46+
47+
fs.readdirSync = oldreaddirSync;
3848
gaze.on('end', test.done);
3949
gaze.close();
4050
},

0 commit comments

Comments
 (0)