mirror of
https://github.com/coderaiser/cloudcmd.git
synced 2026-01-23 18:55:26 +00:00
83 lines
2.5 KiB
JavaScript
83 lines
2.5 KiB
JavaScript
(function(){
|
|
'use strict';
|
|
|
|
var main = global.cloudcmd.main,
|
|
Util = main.util,
|
|
pipe = main.pipe,
|
|
path = require('path'),
|
|
fs = require('fs'),
|
|
diff = main.diff,
|
|
CloudFunc = main.cloudfunc,
|
|
fse = main.require('fs-extra') || {
|
|
mkdirs : fs.mkdir.bind(fs),
|
|
};
|
|
|
|
exports.onPut = onPut;
|
|
|
|
function onPut(name, query, readStream, callback) {
|
|
var func = Util.retExec(callback),
|
|
baseName = path.basename(name);
|
|
|
|
switch(query) {
|
|
case 'dir':
|
|
fse.mkdirs(name, function(error) {
|
|
var msg;
|
|
|
|
if (!error)
|
|
msg = CloudFunc.formatMsg('make dir', name);
|
|
|
|
func(error, msg);
|
|
});
|
|
break;
|
|
|
|
default:
|
|
pipe.create({
|
|
read : readStream,
|
|
to : name,
|
|
callback : function(error) {
|
|
var msg;
|
|
|
|
if (!error)
|
|
msg = CloudFunc.formatMsg('save', baseName);
|
|
|
|
func(error, msg);
|
|
}
|
|
});
|
|
break;
|
|
|
|
case 'patch':
|
|
pipe.getBody(readStream, function(patch) {
|
|
fs.readFile(name, 'utf8', read);
|
|
|
|
function read(error, data) {
|
|
var diffResult;
|
|
|
|
if (error)
|
|
func(error);
|
|
else {
|
|
error = Util.tryCatchLog(function() {
|
|
diffResult = diff.applyPatch(data, patch);
|
|
});
|
|
|
|
if (diffResult && !error)
|
|
fs.writeFile(name, diffResult, write);
|
|
else {
|
|
msg = CloudFunc.formatMsg('patch', baseName, 'fail');
|
|
func(null, msg);
|
|
}
|
|
}
|
|
}
|
|
|
|
function write(name, error) {
|
|
var msg;
|
|
|
|
if (!error)
|
|
msg = CloudFunc.formatMsg('patch', baseName);
|
|
|
|
func(error, msg);
|
|
}
|
|
});
|
|
break;
|
|
}
|
|
}
|
|
})();
|