mirror of
https://github.com/coderaiser/cloudcmd.git
synced 2026-01-24 03:05:41 +00:00
75 lines
No EOL
2.4 KiB
JavaScript
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...'));
|
|
};
|
|
} |