Narcoleptic's Patch Mangler

    fsa

    0.5.1 • Public • Published

    fsa

    File system auditor. Shows changes after previous audit session. Works over git.

    Example

    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);
            }
        );
    }

    Keywords

    none

    Install

    npm i fsa

    DownloadsWeekly Downloads

    1,020

    Version

    0.5.1

    License

    none

    Last publish

    Collaborators

    • gregof