cloudcmd/lib/server/rest/fs/put.js
2014-03-05 07:25:35 -05:00

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;
}
}
})();