cloudcmd/lib/server/patch.js
2014-11-20 07:33:06 -05:00

61 lines
1.8 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),
tryRequire = require(DIR_SERVER + 'tryRequire'),
flop = tryRequire('flop', {log: true, exit: true}),
ERROR_MSG = 'File is to big. ' +
'Could not patch files ' +
'bigger then ';
module.exports = function(name, patch, options, callback) {
Util.check(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.try(function() {
diffResult = diff.applyPatch(data, patch);
});
if (error)
callback(error);
else
fs.writeFile(name, diffResult, callback);
}
});
}
})();