mirror of
https://github.com/coderaiser/cloudcmd.git
synced 2026-08-01 20:22:29 +00:00
feature(flop) add from npm
This commit is contained in:
parent
fdce2eb201
commit
822d444964
11 changed files with 23 additions and 726 deletions
|
|
@ -1,107 +0,0 @@
|
|||
/*
|
||||
* FLOP - FiLe OPerations
|
||||
*/
|
||||
|
||||
(function() {
|
||||
'use strict';
|
||||
|
||||
var fs = require('fs'),
|
||||
DIR = './',
|
||||
|
||||
Util = require(DIR + '../util'),
|
||||
|
||||
size = require(DIR + 'size'),
|
||||
readify = require(DIR + 'readify'),
|
||||
time = require(DIR + 'timem'),
|
||||
files = require(DIR + 'files'),
|
||||
tryRequire = require(DIR + 'tryRequire'),
|
||||
|
||||
ncp = tryRequire('./ncp'),
|
||||
rimraf = tryRequire('rimraf'),
|
||||
mkdir = tryRequire('mkdirp') || fs.mkdir;
|
||||
|
||||
exports.create = function(path, type, callback) {
|
||||
Util.check(arguments, ['path', 'callback']);
|
||||
|
||||
mkdir(path, callback);
|
||||
};
|
||||
|
||||
exports.read = function(path, type, callback) {
|
||||
Util.check(arguments, ['path', 'callback']);
|
||||
|
||||
if (!callback)
|
||||
callback = type;
|
||||
|
||||
switch (type) {
|
||||
case 'size':
|
||||
size(path, callback);
|
||||
break;
|
||||
|
||||
case 'size raw':
|
||||
size(path, { type: 'raw' }, callback);
|
||||
break;
|
||||
|
||||
case 'time':
|
||||
time(path, callback);
|
||||
break;
|
||||
|
||||
case 'time raw':
|
||||
time(path, 'raw', callback);
|
||||
break;
|
||||
|
||||
default:
|
||||
readify(path, callback);
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
exports.delete = function(path, callback) {
|
||||
Util.check(arguments, ['path', 'callback']);
|
||||
|
||||
if (rimraf)
|
||||
rimraf(path, callback);
|
||||
else
|
||||
fs.unlink(path, function(error) {
|
||||
var isDir = error && error.code === 'EISDIR';
|
||||
|
||||
if (isDir)
|
||||
fs.rmdir(path, callback);
|
||||
else
|
||||
callback(error);
|
||||
});
|
||||
};
|
||||
|
||||
exports.move = function(from, to, callback) {
|
||||
Util.check(arguments, ['path', 'to', 'callback']);
|
||||
|
||||
fs.rename(from, to, function(error) {
|
||||
var isExDev = error && error.code === 'EXDEV';
|
||||
|
||||
if (ncp && rimraf && isExDev)
|
||||
ncp(from, to, {
|
||||
stopOnError: true
|
||||
}, function() {
|
||||
rimraf(from, callback);
|
||||
});
|
||||
else
|
||||
callback(error);
|
||||
});
|
||||
};
|
||||
|
||||
exports.copy = function(from, to, callback) {
|
||||
Util.check(arguments, ['from', 'to', 'callback']);
|
||||
|
||||
fs.lstat(from, function(error, stat) {
|
||||
var isDir = stat && stat.isDirectory();
|
||||
|
||||
if (error)
|
||||
callback(error);
|
||||
else if (isDir && ncp)
|
||||
ncp(from, to, {
|
||||
stopOnError: true
|
||||
}, callback);
|
||||
else
|
||||
files.pipe(from, to, callback);
|
||||
});
|
||||
};
|
||||
})();
|
||||
|
|
@ -1,265 +0,0 @@
|
|||
'use strict';
|
||||
|
||||
var fs = require('fs'),
|
||||
path = require('path');
|
||||
|
||||
var modern = /^v0\.1\d\.\d+/.test(process.version);
|
||||
|
||||
module.exports = ncp;
|
||||
ncp.ncp = ncp;
|
||||
|
||||
function ncp (source, dest, options, callback) {
|
||||
var cback = callback;
|
||||
|
||||
if (!callback) {
|
||||
cback = options;
|
||||
options = {};
|
||||
}
|
||||
|
||||
var basePath = process.cwd(),
|
||||
currentPath = path.resolve(basePath, source),
|
||||
targetPath = path.resolve(basePath, dest),
|
||||
filter = options.filter,
|
||||
rename = options.rename,
|
||||
transform = options.transform,
|
||||
clobber = options.clobber !== false,
|
||||
modified = options.modified,
|
||||
dereference = options.dereference,
|
||||
errs = null,
|
||||
eventName = modern ? 'finish' : 'close',
|
||||
defer = modern ? setImmediate : process.nextTick,
|
||||
started = 0,
|
||||
finished = 0,
|
||||
running = 0,
|
||||
limit = options.limit || ncp.limit || 16;
|
||||
|
||||
limit = (limit < 1) ? 1 : (limit > 512) ? 512 : limit;
|
||||
|
||||
startCopy(currentPath);
|
||||
|
||||
function startCopy(source) {
|
||||
started++;
|
||||
if (filter) {
|
||||
if (filter instanceof RegExp) {
|
||||
if (!filter.test(source)) {
|
||||
return cb(true);
|
||||
}
|
||||
}
|
||||
else if (typeof filter === 'function') {
|
||||
if (!filter(source)) {
|
||||
return cb(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
return getStats(source);
|
||||
}
|
||||
|
||||
function getStats(source) {
|
||||
var stat = dereference ? fs.stat : fs.lstat;
|
||||
if (running >= limit) {
|
||||
return defer(function () {
|
||||
getStats(source);
|
||||
});
|
||||
}
|
||||
running++;
|
||||
stat(source, function (err, stats) {
|
||||
var item = {};
|
||||
if (err) {
|
||||
return onError(err);
|
||||
}
|
||||
|
||||
// We need to get the mode from the stats object and preserve it.
|
||||
item.name = source;
|
||||
item.mode = stats.mode;
|
||||
item.mtime = stats.mtime; //modified time
|
||||
item.atime = stats.atime; //access time
|
||||
|
||||
if (stats.isDirectory()) {
|
||||
return onDir(item);
|
||||
}
|
||||
else if (stats.isFile()) {
|
||||
return onFile(item);
|
||||
}
|
||||
else if (stats.isSymbolicLink()) {
|
||||
// Symlinks don't really need to know about the mode.
|
||||
return onLink(source);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function onFile(file) {
|
||||
var target = file.name.replace(currentPath, targetPath);
|
||||
if(rename) {
|
||||
target = rename(target);
|
||||
}
|
||||
isWritable(target, function (writable) {
|
||||
if (writable) {
|
||||
return copyFile(file, target);
|
||||
} else if (clobber) {
|
||||
rmFile(target, function () {
|
||||
copyFile(file, target);
|
||||
});
|
||||
} else if (modified) {
|
||||
var stat = dereference ? fs.stat : fs.lstat;
|
||||
stat(target, function(err, stats) {
|
||||
//if souce modified time greater to target modified time copy file
|
||||
if (file.mtime.getTime()>stats.mtime.getTime())
|
||||
copyFile(file, target);
|
||||
else return cb();
|
||||
});
|
||||
} else {
|
||||
cb();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function copyFile(file, target) {
|
||||
var readStream = fs.createReadStream(file.name),
|
||||
writeStream = fs.createWriteStream(target, { mode: file.mode });
|
||||
|
||||
readStream.on('error', onError);
|
||||
writeStream.on('error', onError);
|
||||
|
||||
if(transform) {
|
||||
transform(readStream, writeStream, file);
|
||||
} else {
|
||||
writeStream.on('open', function() {
|
||||
readStream.pipe(writeStream);
|
||||
});
|
||||
}
|
||||
writeStream.once(eventName, function() {
|
||||
if (modified) {
|
||||
//target file modified date sync.
|
||||
fs.utimesSync(target, file.atime, file.mtime);
|
||||
cb();
|
||||
}
|
||||
else cb();
|
||||
});
|
||||
}
|
||||
|
||||
function rmFile(file, done) {
|
||||
fs.unlink(file, function (err) {
|
||||
if (err) {
|
||||
return onError(err);
|
||||
}
|
||||
return done();
|
||||
});
|
||||
}
|
||||
|
||||
function onDir(dir) {
|
||||
var target = dir.name.replace(currentPath, targetPath);
|
||||
isWritable(target, function (writable) {
|
||||
if (writable) {
|
||||
return mkDir(dir, target);
|
||||
}
|
||||
copyDir(dir.name);
|
||||
});
|
||||
}
|
||||
|
||||
function mkDir(dir, target) {
|
||||
fs.mkdir(target, dir.mode, function (err) {
|
||||
if (err) {
|
||||
return onError(err);
|
||||
}
|
||||
copyDir(dir.name);
|
||||
});
|
||||
}
|
||||
|
||||
function copyDir(dir) {
|
||||
fs.readdir(dir, function (err, items) {
|
||||
if (err) {
|
||||
return onError(err);
|
||||
}
|
||||
items.forEach(function (item) {
|
||||
startCopy(dir + '/' + item);
|
||||
});
|
||||
return cb();
|
||||
});
|
||||
}
|
||||
|
||||
function onLink(link) {
|
||||
var target = link.replace(currentPath, targetPath);
|
||||
fs.readlink(link, function (err, resolvedPath) {
|
||||
if (err) {
|
||||
return onError(err);
|
||||
}
|
||||
checkLink(resolvedPath, target);
|
||||
});
|
||||
}
|
||||
|
||||
function checkLink(resolvedPath, target) {
|
||||
if (dereference) {
|
||||
resolvedPath = path.resolve(basePath, resolvedPath);
|
||||
}
|
||||
isWritable(target, function (writable) {
|
||||
if (writable) {
|
||||
return makeLink(resolvedPath, target);
|
||||
}
|
||||
fs.readlink(target, function (err, targetDest) {
|
||||
if (err) {
|
||||
return onError(err);
|
||||
}
|
||||
if (dereference) {
|
||||
targetDest = path.resolve(basePath, targetDest);
|
||||
}
|
||||
if (targetDest === resolvedPath) {
|
||||
return cb();
|
||||
}
|
||||
return rmFile(target, function () {
|
||||
makeLink(resolvedPath, target);
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function makeLink(linkPath, target) {
|
||||
fs.symlink(linkPath, target, function (err) {
|
||||
if (err) {
|
||||
return onError(err);
|
||||
}
|
||||
return cb();
|
||||
});
|
||||
}
|
||||
|
||||
function isWritable(path, done) {
|
||||
fs.lstat(path, function (err) {
|
||||
var result = false;
|
||||
|
||||
if (err && err.code === 'ENOENT')
|
||||
result = true;
|
||||
|
||||
done(result);
|
||||
});
|
||||
}
|
||||
|
||||
function onError(err) {
|
||||
if (options.stopOnError) {
|
||||
return cback(err);
|
||||
}
|
||||
else if (!errs && options.errs) {
|
||||
errs = fs.createWriteStream(options.errs);
|
||||
}
|
||||
else if (!errs) {
|
||||
errs = [];
|
||||
}
|
||||
if (typeof errs.write === 'undefined') {
|
||||
errs.push(err);
|
||||
}
|
||||
else {
|
||||
errs.write(err.stack + '\n\n');
|
||||
}
|
||||
return cb();
|
||||
}
|
||||
|
||||
function cb(skipped) {
|
||||
if (!skipped) running--;
|
||||
finished++;
|
||||
if ((started === finished) && (running === 0)) {
|
||||
if (cback !== undefined ) {
|
||||
return errs ? cback(errs) : cback(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -11,7 +11,8 @@
|
|||
diffPatch = require(DIR + 'diff/diff-match-patch').diff_match_patch,
|
||||
diff = new (require(DIR + 'diff').DiffProto)(diffPatch),
|
||||
|
||||
flop = require(DIR_SERVER + 'flop'),
|
||||
tryRequire = require(DIR_SERVER + 'tryRequire'),
|
||||
flop = tryRequire('flop', {log: true, exit: true}),
|
||||
|
||||
ERROR_MSG = 'File is to big. ' +
|
||||
'Could not patch files ' +
|
||||
|
|
|
|||
|
|
@ -1,181 +0,0 @@
|
|||
(function() {
|
||||
'use strict';
|
||||
|
||||
var fs = require('fs'),
|
||||
|
||||
DIR = '../',
|
||||
DIR_SERVER = DIR + 'server/',
|
||||
|
||||
Util = require(DIR + 'util'),
|
||||
format = require(DIR + 'format'),
|
||||
tryRequire = require(DIR_SERVER + 'tryRequire'),
|
||||
nicki = tryRequire('nicki', {callback: true}),
|
||||
|
||||
funcEmpty = function() {},
|
||||
|
||||
WIN = process.platform === 'win32';
|
||||
|
||||
module.exports = function(path, callback) {
|
||||
Util.check(arguments, ['path', 'callback'])
|
||||
.type('path', path, 'string')
|
||||
.type('callback', callback, 'function');
|
||||
|
||||
fs.readdir(path, function(error, names) {
|
||||
if (error)
|
||||
callback(error);
|
||||
else
|
||||
getAllStats(path, names, callback);
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* @param path
|
||||
* @param names
|
||||
*/
|
||||
function getAllStats(path, names, callback) {
|
||||
var length = names.length,
|
||||
funcs = names.length ? {} : [],
|
||||
dir = format.addSlashToEnd(path);
|
||||
|
||||
if (!length)
|
||||
funcs.push(Util.exec);
|
||||
else
|
||||
names.forEach(function(name) {
|
||||
var path = dir + name;
|
||||
|
||||
funcs[name] = Util.exec.with(getStat, name, path);
|
||||
});
|
||||
|
||||
Util.exec.parallel(funcs, function(error, files) {
|
||||
fillJSON(dir, files || {}, callback);
|
||||
});
|
||||
}
|
||||
|
||||
function getStat(name, path, callback) {
|
||||
fs.stat(path, function(error, data) {
|
||||
callback(null, data || {
|
||||
'mode' : 0,
|
||||
'size' : 0,
|
||||
'isDirectory' : funcEmpty
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function parseStats(stats) {
|
||||
var files;
|
||||
|
||||
Util.check(arguments, ['stats']);
|
||||
|
||||
files = Object.keys(stats).map(function(name) {
|
||||
var file, isDir, size, mode, modeStr,
|
||||
stat = stats[name],
|
||||
owner = stat.uid;
|
||||
|
||||
if (stat) {
|
||||
/* Переводим права доступа в 8-ричную систему */
|
||||
modeStr = Number(stat.mode).toString(8);
|
||||
mode = Number(modeStr);
|
||||
isDir = stat.isDirectory();
|
||||
size = isDir ? 'dir' : stat.size;
|
||||
}
|
||||
|
||||
file = {
|
||||
'name' : name,
|
||||
'size' : format.size(size),
|
||||
'owner' : owner,
|
||||
'mode' : format.permissions.symbolic(mode)
|
||||
};
|
||||
|
||||
return file;
|
||||
});
|
||||
|
||||
return files;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function fill JSON by file stats
|
||||
*
|
||||
* @param params - { files, stats, path }
|
||||
*/
|
||||
function fillJSON(path, stats, callback) {
|
||||
var files,
|
||||
|
||||
json = {
|
||||
path : '',
|
||||
files : []
|
||||
};
|
||||
|
||||
Util.check(arguments, ['params']);
|
||||
|
||||
files = parseStats(stats);
|
||||
|
||||
/* sorting on Win and node v0.8.0 */
|
||||
files = sort(files);
|
||||
|
||||
json.files = changeOrder(files);
|
||||
json.path = format.addSlashToEnd(path);
|
||||
|
||||
changeUIDToName(json, function() {
|
||||
callback(null, json);
|
||||
});
|
||||
}
|
||||
|
||||
function changeUIDToName(json, callback) {
|
||||
if (WIN)
|
||||
callback();
|
||||
else
|
||||
nicki(function(error, names) {
|
||||
var files = json.files;
|
||||
|
||||
if (error)
|
||||
callback(error);
|
||||
else
|
||||
files.forEach(function(file) {
|
||||
var owner = file.owner;
|
||||
owner = names[owner];
|
||||
|
||||
if (owner)
|
||||
file.owner = owner;
|
||||
});
|
||||
|
||||
callback();
|
||||
});
|
||||
}
|
||||
|
||||
function sort(files) {
|
||||
var sorted = files;
|
||||
|
||||
sorted = files.sort(function(fileA, fileB) {
|
||||
var ret = 0,
|
||||
more = fileA.name > fileB.name,
|
||||
less = fileA.name < fileB.name;
|
||||
|
||||
if (more)
|
||||
ret = 1;
|
||||
else if (less)
|
||||
ret = -1;
|
||||
|
||||
return ret;
|
||||
});
|
||||
|
||||
return sorted;
|
||||
}
|
||||
|
||||
function changeOrder(json) {
|
||||
var files = [],
|
||||
dirs = [],
|
||||
sorted = [];
|
||||
|
||||
json.forEach(function(current) {
|
||||
if (current.size === 'dir')
|
||||
dirs.push(current);
|
||||
else
|
||||
files.push(current);
|
||||
});
|
||||
|
||||
sorted = dirs.concat(files);
|
||||
|
||||
return sorted;
|
||||
}
|
||||
|
||||
})();
|
||||
|
|
@ -22,13 +22,15 @@
|
|||
markdown = require(DIR + 'rest/markdown'),
|
||||
|
||||
github = require(DIR + 'github'),
|
||||
flop = require(DIR + 'flop'),
|
||||
packer = require(DIR + 'packer'),
|
||||
tryRequire = require('./tryRequire'),
|
||||
mellow = tryRequire('mellow', {log: true, exit: true}),
|
||||
ponse = require(DIR + 'ponse'),
|
||||
pipe = require(DIR + 'pipe'),
|
||||
|
||||
tryRequire = require('./tryRequire'),
|
||||
tryOptions = {log: true, exit: true},
|
||||
mellow = tryRequire('mellow', tryOptions),
|
||||
flop = tryRequire('flop', tryOptions),
|
||||
|
||||
isWin32 = process.platform === 'win32',
|
||||
|
||||
Fs = {};
|
||||
|
|
|
|||
|
|
@ -5,7 +5,8 @@
|
|||
DIR_SERVER = DIR + 'server/',
|
||||
|
||||
Util = require(DIR + 'util'),
|
||||
flop = require(DIR_SERVER + 'flop');
|
||||
tryRequire = require(DIR_SERVER + 'tryRequire'),
|
||||
flop = tryRequire(DIR + 'flop', {log: true, exit: true});
|
||||
|
||||
module.exports = function(query, name, files, callback) {
|
||||
var func = Util.exec.ret(callback),
|
||||
|
|
|
|||
|
|
@ -4,14 +4,18 @@
|
|||
var path = require('path'),
|
||||
DIR = path.resolve(__dirname + '/../../../') + '/',
|
||||
DIR_SERVER = DIR + 'server/',
|
||||
|
||||
Util = require(DIR + 'util'),
|
||||
|
||||
files = require(DIR_SERVER + 'files'),
|
||||
flop = require(DIR_SERVER + 'flop'),
|
||||
hash = require(DIR_SERVER + 'hash'),
|
||||
tryRequire = require(DIR_SERVER + 'tryRequire'),
|
||||
mellow = tryRequire('mellow', {log: true, exit: true}),
|
||||
beautify = require(DIR_SERVER + 'beautify'),
|
||||
minify = require(DIR_SERVER + 'minify'),
|
||||
Util = require(DIR + 'util');
|
||||
|
||||
tryRequire = require(DIR_SERVER + 'tryRequire'),
|
||||
tryOptions = {log: true, exit: true},
|
||||
mellow = tryRequire('mellow', tryOptions),
|
||||
flop = tryRequire('flop', tryOptions);
|
||||
|
||||
module.exports = function(query, name, callback) {
|
||||
var hashStream, error;
|
||||
|
|
|
|||
|
|
@ -10,9 +10,12 @@
|
|||
CloudFunc = require(DIR + 'cloudfunc'),
|
||||
Util = require(DIR + 'util'),
|
||||
|
||||
flop = require(DIR_SERVER + 'flop'),
|
||||
packer = require(DIR_SERVER + 'packer'),
|
||||
files = require(DIR_SERVER + 'files');
|
||||
files = require(DIR_SERVER + 'files'),
|
||||
tryRequire = require(DIR_SERVER + 'tryRequire'),
|
||||
|
||||
tryOptions = {log: true, exit: true},
|
||||
flop = tryRequire('flop', tryOptions);
|
||||
|
||||
module.exports = function(query, name, readStream, callback) {
|
||||
var baseName = path.basename(name),
|
||||
|
|
|
|||
|
|
@ -1,131 +0,0 @@
|
|||
/* inspired by http://procbits.com/2011/10/29/a-node-js-experiment-thinking-asynchronously-recursion-calculate-file-size-directory */
|
||||
(function(){
|
||||
'use strict';
|
||||
|
||||
var fs = require('fs'),
|
||||
path = require('path'),
|
||||
|
||||
DIR = '../',
|
||||
|
||||
format = require(DIR + 'format'),
|
||||
Util = require(DIR + 'util'),
|
||||
|
||||
EventEmitter= require('events').EventEmitter,
|
||||
|
||||
/* The lstat() function shall be equivalent to stat(),
|
||||
except when path refers to a symbolic link. In that case lstat()
|
||||
shall return information about the link, while stat() shall return
|
||||
information about the file the link references.
|
||||
*/
|
||||
stat = fs.lstat;
|
||||
|
||||
module.exports = function(dir, options, callback) {
|
||||
var type, stopOnError,
|
||||
emitter = new EventEmitter(),
|
||||
total = 0;
|
||||
|
||||
Util.check(arguments, ['dir', 'callback']);
|
||||
|
||||
if (!callback) {
|
||||
callback = options;
|
||||
options = {};
|
||||
} else {
|
||||
type = options.type;
|
||||
stopOnError = options.stopOnError;
|
||||
}
|
||||
|
||||
emitter.on('file', function(file, stat) {
|
||||
total += stat.size;
|
||||
});
|
||||
|
||||
emitter.on('error', function(error) {
|
||||
callback(error);
|
||||
});
|
||||
|
||||
emitter.on('end', function() {
|
||||
var result;
|
||||
|
||||
if (type !== 'raw')
|
||||
result = format.size(total);
|
||||
else
|
||||
result = total;
|
||||
|
||||
callback(null, result);
|
||||
});
|
||||
|
||||
processDir(dir, options, emitter);
|
||||
};
|
||||
|
||||
function processDir(dir, options, emitter) {
|
||||
var stopOnError = options.stopOnError,
|
||||
wasError = false,
|
||||
asyncRunning = 0,
|
||||
fileCounter = 1,
|
||||
|
||||
execCallBack = function () {
|
||||
var noErrors = !wasError || !stopOnError,
|
||||
yesAllDone = !fileCounter && !asyncRunning;
|
||||
|
||||
if (yesAllDone && noErrors)
|
||||
emitter.emit('end');
|
||||
},
|
||||
|
||||
getDirInfo = function(dir) {
|
||||
stat(dir, Util.exec.with(getStat, dir));
|
||||
};
|
||||
|
||||
getDirInfo(dir);
|
||||
|
||||
function getStat(dir, error, stat) {
|
||||
var isDir;
|
||||
|
||||
--fileCounter;
|
||||
|
||||
if (!wasError || !stopOnError) {
|
||||
if (error && stopOnError) {
|
||||
wasError = true;
|
||||
emitter.emmit('error', error);
|
||||
} else if (!error) {
|
||||
isDir = stat.isDirectory();
|
||||
|
||||
if (!isDir) {
|
||||
emitter.emit('file', dir, stat);
|
||||
} else {
|
||||
++asyncRunning;
|
||||
|
||||
fs.readdir(dir, function(error, files) {
|
||||
asyncRunning--;
|
||||
|
||||
if (!error) {
|
||||
onReaddir(dir, files);
|
||||
} else if (error && stopOnError) {
|
||||
wasError = true;
|
||||
emitter.emit('error', error);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
execCallBack();
|
||||
}
|
||||
}
|
||||
|
||||
function onReaddir(dir, files) {
|
||||
var n = files.length;
|
||||
|
||||
fileCounter += n;
|
||||
|
||||
if (!n)
|
||||
execCallBack();
|
||||
else
|
||||
files.forEach(function(file) {
|
||||
var dirPath = path.join(dir, file);
|
||||
|
||||
process.nextTick(function() {
|
||||
getDirInfo(dirPath);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
})();
|
||||
|
|
@ -1,31 +0,0 @@
|
|||
(function () {
|
||||
'use strict';
|
||||
|
||||
var fs = require('fs'),
|
||||
Util = require('../util');
|
||||
|
||||
module.exports = function(filename, option, callback) {
|
||||
var isRaw = option === 'raw';
|
||||
|
||||
if (!callback)
|
||||
callback = option;
|
||||
|
||||
Util.check(arguments, ['filename', 'callback']);
|
||||
|
||||
fs.stat(filename, function(error, stat) {
|
||||
var time, timeRet;
|
||||
|
||||
if (!error) {
|
||||
time = stat.mtime;
|
||||
|
||||
if (isRaw)
|
||||
timeRet = time.getTime();
|
||||
else
|
||||
timeRet = time;
|
||||
}
|
||||
|
||||
callback(error, timeRet);
|
||||
});
|
||||
};
|
||||
|
||||
})();
|
||||
|
|
@ -28,6 +28,7 @@
|
|||
"console-io": "~1.10.0",
|
||||
"dropbox": "0.10.x",
|
||||
"express": "~4.10.0",
|
||||
"flop": "~1.0.25",
|
||||
"fstream": "~1.0.2",
|
||||
"http-auth": "2.1.x",
|
||||
"js-beautify": "~1.5.4",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue