Skip to content

Commit

Permalink
Merge pull request #73 from kss-node/pr-63-rebased
Browse files Browse the repository at this point in the history
Updated walk.js to be re-entrant.
  • Loading branch information
JohnAlbin committed Jul 18, 2014
2 parents 0000e2b + 684e968 commit 36793d3
Showing 1 changed file with 53 additions and 44 deletions.
97 changes: 53 additions & 44 deletions lib/walk.js
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -3,54 +3,63 @@ var fs = require("fs");
var path = require("path"); var path = require("path");


module.exports = (function() { module.exports = (function() {
var counter = 0;
var walk = function(dirname, options, callbacks) {
var callbacks = callbacks || {};

options = options || {};
if (typeof callbacks.finished !== 'function') { callbacks.finished = function(){}; }
if (typeof callbacks.file !== 'function') { callbacks.file = function(){}; }

counter += 1;
fs.readdir(dirname, function(err, relnames) {
if(err) {
callbacks.finished(err);
return;
}

if (!relnames.length) {
counter -= 1;
if (!counter) callbacks.finished(null);
return;
}

relnames.forEach(function(relname, index, relnames) {
var name = path.join(dirname, relname);
counter += 1;

fs.stat(name, function(err, stat) {
if(err) {
callbacks.finished(err);
return;
}

if(stat.isDirectory()) {
if (name !== '.svn' && name !== '.git') walk(name, options, callbacks);
} else {
if (!options.mask || name.match(options.mask)) {
callbacks.file(name);
}
}



function walk(dirname, options, callbacks) {

var counter = 0;

var walkInternal = function(dirname, options, callbacks) {
var callbacks = callbacks || {};

options = options || {};
if (typeof callbacks.finished !== 'function') { callbacks.finished = function(){}; }
if (typeof callbacks.file !== 'function') { callbacks.file = function(){}; }

counter += 1;
fs.readdir(dirname, function(err, relnames) {
if(err) {
callbacks.finished(err);
return;
}

if (!relnames.length) {
counter -= 1; counter -= 1;
if(index === relnames.length - 1) counter -= 1; if (!counter) callbacks.finished(null);
return;
}

relnames.forEach(function(relname, index, relnames) {
var name = path.join(dirname, relname);
counter += 1;


if(counter === 0) { fs.stat(name, function(err, stat) {
callbacks.finished(null); if(err) {
} callbacks.finished(err);
return;
}

if(stat.isDirectory()) {
if (name !== '.svn' && name !== '.git') walkInternal(name, options, callbacks);
} else {
if (!options.mask || name.match(options.mask)) {
callbacks.file(name);
}
}

counter -= 1;
if(index === relnames.length - 1) counter -= 1;

if(counter === 0) {
callbacks.finished(null);
}
});
}); });
}); });
}); };
};
walkInternal(dirname, options, callbacks);
}

return walk; return walk;
})(); })();

0 comments on commit 36793d3

Please sign in to comment.