fsa

File system auditor. Shows changes after previous audit session.

fsa

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 (datachangeManager) {
    processDir(data, changeManager, function (newData) {
        dc.save(newData, function () {
            console.log(JSON.stringify(newData, null, '  '))
            console.log('Done. Time - ' + (new Date() - startDate));
        })
    });
});    
 
function processDir (cachedDatachangeManagercallback) {
    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 (cachedDatachangeManagernewDatacallback) {
    abc.async.forEach(
        cachedData,
        function (filecallback) {
            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 (filecallback) {
    abc.file.read(file, function (text) {
        callback({
            name: file,
            hash: crypto.createHash('md5').update(text).digest('hex')
        });
    })
}
 
function readFiles (filesnewDatacallback) {
    abc.async.forEach(
        files,
        function (filecallback) {
            readFile(file, function (readedFile) {
                newData.push(readedFile);
                callback();
            })
        },
        callback
    );
}
 
function readDirs (dirsnewDatacallback) {
    abc.async.forEach(
        dirs,
        function (dircallback) {
            readDir(dir, newData, callback);
        },
        callback
    );
}
 
function readDir (dirnewDatacallback) {
    var newFiles = []
    abc.find(
        dir,
        function (filedirPath) {
            newFiles.push(path.join(dirPath, file))
        },
        function () {
            readFiles(newFiles, newData, callback);
        }
    );
}