mirror of
https://github.com/coderaiser/cloudcmd.git
synced 2026-01-23 18:55:26 +00:00
62 lines
1.9 KiB
JavaScript
62 lines
1.9 KiB
JavaScript
(function() {
|
|
'use strict';
|
|
|
|
var DIR = '../',
|
|
DIR_SERVER = './',
|
|
|
|
fs = require('fs'),
|
|
|
|
Util = require(DIR + 'util'),
|
|
|
|
diffPatch = require(DIR + 'diff/diff-match-patch').diff_match_patch,
|
|
diff = new (require(DIR + 'diff').DiffProto)(diffPatch),
|
|
|
|
flop = require(DIR_SERVER + 'flop'),
|
|
|
|
ERROR_MSG = 'File is to big. ' +
|
|
'Could not patch files ' +
|
|
'bigger then ';
|
|
|
|
module.exports = function(name, patch, options, callback) {
|
|
Util.checkArgs(arguments, ['name', 'patch', 'callback']);
|
|
|
|
if (!callback) {
|
|
callback = options;
|
|
options = {};
|
|
}
|
|
|
|
flop.read(name, 'size raw', function(error, size) {
|
|
if (!error)
|
|
if (isNaN(options.size) || size < options.size)
|
|
patchFile(name, patch, callback);
|
|
else
|
|
error = {
|
|
message: ERROR_MSG + options.size
|
|
};
|
|
|
|
if (error)
|
|
callback(error);
|
|
});
|
|
};
|
|
|
|
function patchFile(name, patch, callback) {
|
|
fs.readFile(name, 'utf8', function read(error, data) {
|
|
var diffResult;
|
|
|
|
if (error) {
|
|
callback(error);
|
|
} else {
|
|
error = Util.exec.tryLog(function() {
|
|
diffResult = diff.applyPatch(data, patch);
|
|
});
|
|
|
|
if (error || !diffResult)
|
|
callback({
|
|
message: 'Patch fail'
|
|
});
|
|
else
|
|
fs.writeFile(name, diffResult, callback);
|
|
}
|
|
});
|
|
}
|
|
})();
|