From 44c11740e112bbbcc3cf3968870a91f6b345180c Mon Sep 17 00:00:00 2001 From: coderaiser Date: Wed, 20 Aug 2014 06:00:10 -0400 Subject: [PATCH] feature(ncp) add from npm v0.6.0 --- lib/server/flop.js | 7 +- lib/server/ncp.js | 240 --------------------------------------------- package.json | 1 + 3 files changed, 6 insertions(+), 242 deletions(-) delete mode 100644 lib/server/ncp.js diff --git a/lib/server/flop.js b/lib/server/flop.js index b609e5d8..50ed8386 100644 --- a/lib/server/flop.js +++ b/lib/server/flop.js @@ -14,8 +14,8 @@ readify = require(DIR + 'readify'), time = require(DIR + 'timem'), pipe = require(DIR + 'pipe'), - ncp = require(DIR + 'ncp'), + ncp = tryRequire('ncp'), rimraf = tryRequire('rimraf'), mkdir = tryRequire('mkdirp') || fs.mkdir; @@ -98,7 +98,10 @@ else if (isDir && ncp) ncp(from, to, { stopOnError: true - }, callback); + }, function(error) { + callback(error); + console.log(':', error) + }); else pipe.create(from, to, callback); }); diff --git a/lib/server/ncp.js b/lib/server/ncp.js deleted file mode 100644 index caa372be..00000000 --- a/lib/server/ncp.js +++ /dev/null @@ -1,240 +0,0 @@ -/* ncp 0.5.0 */ - -var fs = require('fs'), - path = require('path'); - -module.exports = ncp; -ncp.ncp = ncp; - -function ncp (source, dest, options, callback) { - 'use strict'; - - var cback = callback; - - if (!callback) { - cback = options; - options = {}; - } - - var stopedOnError = false, - basePath = process.cwd(), - currentPath = path.resolve(basePath, source), - targetPath = path.resolve(basePath, dest), - filter = options.filter, - transform = options.transform, - clobber = options.clobber !== false, - errs = null, - eventName = /^v0\.10\.\d+$/.test(process.version) ? 'finish' : 'close', - 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 defer(fn) { - if (typeof(setImmediate) === 'function') - return setImmediate(fn); - return process.nextTick(fn); - } - - function getStats(source) { - if (running >= limit) { - return defer(function () { - getStats(source); - }); - } - running++; - fs.lstat(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; - - 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); - isWritable(target, function (writable) { - if (writable) { - return copyFile(file, target); - } - if(clobber) { - rmFile(target, function () { - copyFile(file, target); - }); - } else { - return 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, 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) { - isWritable(target, function (writable) { - if (writable) { - return makeLink(resolvedPath, target); - } - fs.readlink(target, function (err, targetDest) { - if (err) { - return onError(err); - } - 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) { - if (err) { - if (err.code === 'ENOENT') return done(true); - return done(false); - } - return done(false); - }); - } - - function onError(err) { - if (!stopedOnError) { - 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); - } - } - } -} diff --git a/package.json b/package.json index fc7acae3..e30500cd 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "minify": "~0.8.0", "mkdirp": "~0.5.0", "morgan": "~1.2.x", + "ncp": "~0.6.0", "rimraf": "~2.2.6", "socket.io": "~1.0.0" },