Skip to content

Instantly share code, notes, and snippets.

@inimino
Forked from tim-smart/gist:293938
Created February 3, 2010 19:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save inimino/293954 to your computer and use it in GitHub Desktop.
Save inimino/293954 to your computer and use it in GitHub Desktop.
var http = require('http'),
sys = require('sys'),
path = require('path'),
posix = require('posix'),
events = require('events');
var listdir = function (pathname) {
var p = new events.Promise();
var ls = process.createChildProcess("ls", [pathname]);
ls.addListener("output", function (data) {
if (data) {
var files = [];
data.split('\n').forEach(function(f) {if (f){files.push(f)}});
p.emitSuccess(files)
}
});
return p;
}
var walk = function (pathname, callback) {
var counter=1;
var promise = new process.Promise();
go(pathname);
return promise;
function go(pathname){
listdir(pathname).addCallback(function(files) {
counter--;
files.forEach(function(f) {
var abspath = path.join(pathname, f);
posix.stat(abspath).addCallback(function(stat) {
if (stat.isDirectory()) {
counter++;
go(abspath);
} else {
callback(abspath);
}
});
});
if(!counter) promise.emitSuccess();
});
}
}
walk('/home/node', function() {});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment