File system auditor. Shows changes after previous audit session. Works over git.
Get hash for each file in current directory.
var fsa = require('fsa');
var abc = require('abc');
var crypto = require('crypto');
var path = require('path');
var startDate = new Date();
var dc = new fsa.DirCache('.', '.exmpl');
dc.load(function (data, changeManager) {
processDir(data, changeManager, function (newData) {
dc.save(newData, function () {
console.log(JSON.stringify(newData, null, ' '))
console.log('Done. Time - ' + (new Date() - startDate));
})
});
});
function processDir (cachedData, changeManager, callback) {
var newData = [];
abc.async.forEach(
[
function (callback) {
if (cachedData) {
checkCachedFiles(cachedData, changeManager, newData, callback)
} else {
callback();
}
},
function (callback) {
readFiles(changeManager.getAddedFiles(), newData, callback)
},
function (callback) {
readDirs(changeManager.getAddedDirs(), newData, callback)
}
],
function () {
callback(newData);
}
);
}
function checkCachedFiles (cachedData, changeManager, newData, callback) {
abc.async.forEach(
cachedData,
function (file, callback) {
var fileStatus = changeManager.getFileStatus(file.name);
if (fileStatus === 'M') {
readFile(file.name, function (rereadFile) {
newData.push(rereadFile);
callback();
})
return;
} else if (fileStatus === '-') {
newData.push(file);
}
callback();
},
callback
);
}
function readFile (file, callback) {
abc.file.read(file, function (text) {
callback({
name: file,
hash: crypto.createHash('md5').update(text).digest('hex')
});
})
}
function readFiles (files, newData, callback) {
abc.async.forEach(
files,
function (file, callback) {
readFile(file, function (readedFile) {
newData.push(readedFile);
callback();
})
},
callback
);
}
function readDirs (dirs, newData, callback) {
abc.async.forEach(
dirs,
function (dir, callback) {
readDir(dir, newData, callback);
},
callback
);
}
function readDir (dir, newData, callback) {
var newFiles = []
abc.find(
dir,
function (file, dirPath) {
newFiles.push(path.join(dirPath, file))
},
function () {
readFiles(newFiles, newData, callback);
}
);
}