cloudcmd/lib/server/is-file-changed.js

75 lines
No EOL
2.4 KiB
JavaScript

/* Модуль проверяет поменялось ли содержимое файла по хэшу. */
var fs = require('fs'),
crypto = require('crypto');
/* object contains hashes of files*/
var Hashes;
/*
* Function reads hash table of files
* checks is file changed or not
* and return result.
* @pFileName - name of file
* @pFileData - data of file
* result: boolean
*/
exports.check = function(pFileName, pFileData, pOverWrite_b){
var lReadedHash;
/* boolean hashes.json changed or not */
var lHashesChanged_b = false;
if(!Hashes)
try {
console.log('trying to read hashes.json');
Hashes = require(process.cwd() + '/hashes');
}catch(pError) {
console.log('hashes.json not found... \n');
Hashes = {};
}
for(var lFileName in Hashes)
/* if founded row with
* file name - save hash
*/
if (lFileName === pFileName) {
lReadedHash = Hashes[pFileName];
break;
}
/* create hash of file data */
var lFileHash = crypto.createHash('sha1');
lFileHash = crypto.createHash('sha1');
lFileHash.update(pFileData);
lFileHash = lFileHash.digest('hex');
if(lReadedHash !== lFileHash){
Hashes[pFileName] = lFileHash;
lHashesChanged_b = true;
}
if(pOverWrite_b){
/* if hashes file was changes - write it */
if(lHashesChanged_b)
fs.writeFile('./hashes.json',
JSON.stringify(Hashes),
fileWrited('./hashes.json'));
else console.log('no one file has been changed');
}
/* has file changed? */
return lHashesChanged_b;
};
/*
* Функция вызываеться после записи файла
* и выводит ошибку или сообщает,
* что файл успешно записан
*/
function fileWrited(pFileName){
"use strict";
return function(error){
console.log(error?error:('file '+pFileName+' writed...'));
};
}