fix(delete) deleteFiles: remove when access denied

This commit is contained in:
coderaiser 2014-04-18 10:24:10 -04:00
parent 7c3cd2258e
commit 66647c09c9
2 changed files with 52 additions and 42 deletions

View file

@ -202,18 +202,18 @@
else {
files = Util.parseJSON(body);
onDelete(p.name, files, query, function(error, callback) {
onDelete(p.name, files, query, function(error) {
var names;
if (error)
if (error) {
sendError(params,error);
else {
names = (files && files.length) ? files : p.name;
if (callback)
Util.exec(callback);
} else {
if (files && files.length)
names = files;
else
sendMsg(params, 'delete', names);
names = p.name;
sendMsg(params, 'delete', names);
}
});
}

View file

@ -5,18 +5,18 @@
fs = require('fs'),
dir = main.dir,
Util = main.util,
rimraf = main.require('rimraf'),
fse = {
delete : main.require('rimraf') || fs.rmdir,
delete : rimraf || fs.rmdir,
};
exports.onDelete = onDelete;
function onDelete(name, files, query, callback) {
var i, n, isDirFunc, onIsDir, dirPath,
assync = 0,
rmFile = fs.unlink,
rmDir = fse.delete,
func = Util.retExec(callback);
var func = Util.retExec(callback),
fileNames = Util.slice(files),
rmFile = fs.unlink,
rmDir = fse.delete;
switch(query) {
default:
@ -26,36 +26,46 @@
case 'dir':
rmDir(name, func);
break;
case 'files':
n = files && files.length,
dirPath = name,
onIsDir = function(name, error, isDir) {
var log = Util.log.bind(Util);
++assync;
if (error)
func(error);
else {
if (isDir)
rmDir(name, log);
else
rmFile(name, log);
if (assync === n)
func();
}
};
for (i = 0; i < n; i ++) {
name = dirPath + files[i];
isDirFunc = Util.bind(onIsDir, name);
dir.isDir(name, isDirFunc);
Util.log(name);
}
deleteFiles(name, fileNames, func);
break;
}
}
function deleteFiles(from, names, callback) {
var name,
rmFile = fs.unlink,
rmDir = fse.delete,
isLast = true;
isLast = !names.length;
name = names.shift();
if (isLast)
callback(null);
else
Util.ifExec(rimraf, function(result, func) {
(func || rimraf)(from + name, function(error) {
if (error)
callback(error);
else
deleteFiles(from, names, callback);
});
}, function(func) {
dir.isDir(name, function(error, isDir) {
var funcRm;
if (error)
callback(error);
else if (isDir)
funcRm = rmDir;
else
funcRm = rmFile;
func(null, funcRm);
});
});
}
})();