]> git.immae.eu Git - perso/Immae/Projets/Nodejs/Surfer.git/commitdiff
Support last argument as destination
authorJohannes Zellner <johannes@nebulon.de>
Tue, 1 Mar 2016 11:34:15 +0000 (12:34 +0100)
committerJohannes Zellner <johannes@nebulon.de>
Tue, 1 Mar 2016 11:34:15 +0000 (12:34 +0100)
cli/actions.js
cli/surfer.js

index b49ce5900e63196147e1dbff4dd0db28645aaa05..7a361b7fda3b050005bf65157556d4320bd32778 100644 (file)
@@ -8,6 +8,7 @@ exports.del = del;
 var superagent = require('superagent'),
     config = require('./config.js'),
     readlineSync = require('readline-sync'),
+    safe = require('safetydance'),
     async = require('async'),
     fs = require('fs'),
     request = require('request'),
@@ -28,7 +29,7 @@ function checkConfig() {
 
     gQuery = { username: config.username(), password: config.password() };
 
-    console.error('Using server %s', config.server().yellow);
+    console.error('Using server %s', config.server().cyan);
 }
 
 function collectFiles(filesOrFolders, options) {
@@ -93,6 +94,14 @@ function login(uri) {
 function put(filePath, otherFilePaths, options) {
     checkConfig();
 
+    var destination = '';
+
+    // take the last argument as destination
+    if (otherFilePaths.length > 0) {
+        destination = otherFilePaths.pop();
+        if (otherFilePaths.length > 0 && destination[destination.length-1] !== '/') destination += '/';
+    }
+
     var files = collectFiles([ filePath ].concat(otherFilePaths), options);
 
     async.eachSeries(files, function (file, callback) {
@@ -106,7 +115,7 @@ function put(filePath, otherFilePaths, options) {
             relativeFilePath = path.basename(file);
         }
 
-        var destinationPath = (options.destination ? '/' + options.destination : '') + '/' + relativeFilePath;
+        var destinationPath = (destination ? '/' + destination : '') + '/' + relativeFilePath;
         console.log('Uploading file %s -> %s', relativeFilePath.cyan, destinationPath.cyan);
 
         superagent.put(config.server() + API + destinationPath).query(gQuery).attach('file', file).end(function (error, result) {
@@ -136,14 +145,19 @@ function get(filePath) {
     request.get(config.server() + API + filePath, { qs: gQuery }, function (error, result, body) {
         if (error) return console.error(error);
         if (result.statusCode === 401) return console.log('Login failed');
-        if (result.statusCode === 404) return console.log('No such file or directory');
+        if (result.statusCode === 404) return console.log('No such file or directory %s', filePath.yellow);
 
         // 222 indicates directory listing
         if (result.statusCode === 222) {
-            console.log('Files:');
-            JSON.parse(body).entries.forEach(function (entry) {
-                console.log('\t %s', entry);
-            });
+            var files = safe.JSON.parse(body);
+            if (!files || files.entries.length === 0) {
+                console.log('No files on the server. Use %s to upload some.', 'surfer put <file>'.yellow);
+            } else {
+                console.log('Files:');
+                files.entries.forEach(function (entry) {
+                    console.log('\t %s', entry);
+                });
+            }
         } else {
             process.stdout.write(body);
         }
index 8920641896cafd986fb0e1880ee72e50154f091e..b311658ca275d7010ccc60a41a5e6946a1a3db1c 100755 (executable)
@@ -15,9 +15,8 @@ program.command('login <url>')
     .action(actions.login);
 
 program.command('put <file> [files...]')
-    .option('-d --destination <folder>', 'Destination folder. This is prepended to the relative <file> path')
     .option('-a --all', 'Also include hidden files and folders.', false)
-    .description('Put a file')
+    .description('Put a file, last argument is destination if provided')
     .action(actions.put);
 
 program.command('get [file]')