diff --git a/lib/server/rest.js b/lib/server/rest.js index 3ca7e09e..323d7829 100644 --- a/lib/server/rest.js +++ b/lib/server/rest.js @@ -29,6 +29,7 @@ ponse = require('ponse'), rendy = require('rendy'), copymitter = require('copymitter'), + charm = require('charm'), Modules = require(DIR_JSON + 'modules'), @@ -230,15 +231,7 @@ msg = formatMsg('copy', files.names); - emitter = copymitter(files.from, files.to, files.names); - - emitter.on('end', function() { - if (!wasError) - callback(null, msg); - }); - - emitter.on('error', function(error) { - wasError = true; + copy(files.from, files.to, files.names, function(error) { callback(error, msg); }); } @@ -293,6 +286,39 @@ } } + function copy(from, to, names, fn) { + var error, + prev = '', + bar = charm(), + cp = copymitter(from, to, names); + + bar.pipe(process.stdout); + bar.cursor(false); + + cp.on('progress', function(percent) { + bar.left(prev.length); + + prev = rendy('copy {{ from }} -> {{ to }} {{ percent }}%', { + to: to, + from: from, + percent: percent + }); + + bar.write(prev); + }); + + cp.on('error', function(e) { + error = e; + cp.abort(); + }); + + cp.on('end', function() { + fn(error); + bar.write('\n'); + bar.cursor(true); + }); + } + function copyFiles(files, processFunc, callback) { var names = files.names, diff --git a/package.json b/package.json index d2f20165..dea2987a 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "subdomain": "cloudcmd", "dependencies": { "ashify": "~1.0.0", + "charm": "~1.0.0", "console-io": "~2.1.0", "copymitter": "~1.5.0", "edward": "~1.1.0",