|
@@ -5,18 +5,35 @@ var path = require('path'),
|
|
|
fs = require('fs');
|
|
|
|
|
|
function eachConfigFile(root, callback) {
|
|
|
- var result = {files: [], dirs: []};
|
|
|
+ var files = {};
|
|
|
+ var dirs = {};
|
|
|
+ var dirNames = {};
|
|
|
var find = findit(root, {followSymlinks: true});
|
|
|
+ var loopingOn = null;
|
|
|
find.on('file', function (file, stat, linkPath) {
|
|
|
if (file.match(/\.amd\.json$/)) {
|
|
|
- result.files[linkPath || file] = stat;
|
|
|
+ files[linkPath || file] = stat;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ find.on('error', function (err) {
|
|
|
+ if (err.code === 'ELOOP') loopingOn = err.path;
|
|
|
+ else {
|
|
|
+ console.log(err);
|
|
|
+ find.stop();
|
|
|
}
|
|
|
});
|
|
|
find.on('directory', function (dir, stat, stop, linkPath) {
|
|
|
- result.dirs[linkPath || dir] = stat;
|
|
|
+ var name = linkPath || dir;
|
|
|
+ if (dir === loopingOn && !isLessDeep(name, dirNames[dir])) {
|
|
|
+ stop();
|
|
|
+ name = dirNames[dir];
|
|
|
+ }
|
|
|
+ loopingOn = null;
|
|
|
+ dirNames[dir] = name;
|
|
|
+ dirs[name] = stat;
|
|
|
});
|
|
|
find.on('end', function () {
|
|
|
- callback(null, result);
|
|
|
+ callback(null, {files: files, dirs: dirs});
|
|
|
});
|
|
|
}
|
|
|
|