dav/main.c

changeset 376
222997d48ae1
parent 375
39fd327f81da
child 380
8a0c727aa409
--- a/dav/main.c	Sat May 12 15:03:11 2018 +0200
+++ b/dav/main.c	Sun May 27 11:47:49 2018 +0200
@@ -105,9 +105,9 @@
         if(!strcasecmp(cmd, "list") || !strcasecmp(cmd, "ls")) {
             ret = cmd_list(args);
         } else if(!strcasecmp(cmd, "get")) {
-            ret = cmd_get(args);
+            ret = cmd_get(args, FALSE);
         } else if(!strcasecmp(cmd, "put")) {
-            ret = cmd_put(args);
+            ret = cmd_put(args, FALSE);
         } else if(
                 !strcasecmp(cmd, "remove") ||
                 !strcasecmp(cmd, "rm") ||
@@ -120,6 +120,10 @@
             ret = cmd_move(args, true);
         } else if(!strcasecmp(cmd, "move") || !strcasecmp(cmd, "mv")) {
             ret = cmd_move(args, false);
+        } else if(!strcasecmp(cmd, "export")) {
+            ret = cmd_get(args, TRUE);
+        } else if(!strcasecmp(cmd, "import")) {
+            ret = cmd_put(args, TRUE);
         } else if(!strcasecmp(cmd, "date")) {
             ret = cmd_date(args);
         } else if(!strcasecmp(cmd, "set-property")) {
@@ -159,12 +163,14 @@
 
 static char *cmdusageinfo[] = {
     "list [-altdepcR] [-u <date>] <url>",
-    "get [-pcRKA] [-o <file>] [-u <date>] <url>",
-    "put [-pcRA] [-k <key>] [-L <lock>] <url> <file>",
+    "get [-pcRK] [-o <file>] [-u <date>] <url>",
+    "put [-pcR] [-k <key>] [-L <lock>] <url> <file>",
     "mkdir [-pc] [-k <key>] [-L <lock>] <url>",
     "remove [-pc] [-L <lock>] <url>",
     "copy [-pcO] [-L <lock>] <url> <url>",
     "move [-pcO] [-L <lock>] <url> <url>",
+    "export [-pc] [-o <file>] [-u <date>] <url>",
+    "import [-pc] [-k <key>] [-L <lock>] <url> <file>",
     "get-property [-pcx] [-n <uri>] <url> <property>",
     "set-property [-pcx] [-L <lock>] [-n <uri>] <url> <property> [value]",
     "remove-property [-pc] [-n <uri>] <url> <property>",
@@ -397,7 +403,7 @@
     int newres = update_progress(res, total, now, p);
     
     time_t newts = time(NULL);
-    if(newres || (p->ts != newts)) {
+    if((p->ts != newts)) {
         fprintf(p->out, "[%s]: %" PRId64 "k/%" PRId64 "k total: %" PRId64 "M/%" PRId64 "M\n", res->name, now/1024, total/1024, p->cur/(1024*1024), p->total/(1024*1024));
         fflush(p->out);
     }
@@ -670,13 +676,16 @@
     free(getres);
 }
 
-int cmd_get(CmdArgs *a) {
+int cmd_get(CmdArgs *a, DavBool export) {
     if(a->argc != 1) {
         // TODO: change this, when get supports retrieval of multiple files
         fprintf(stderr, "Too %s arguments\n", a->argc < 1 ? "few":"many");
         fprintf(stderr, "Usage: dav %s\n", find_usage_str("get"));
         return -1;
     }
+    if(export) {
+        ucx_map_cstr_put(a->options, "recursive", "");
+    }
     
     char *url = a->argv[0];
     char *path = NULL;
@@ -741,17 +750,16 @@
      */
     char *outfile = cmd_getoption(a, "output");
     char *basepath = outfile;
-    char *tar = cmd_getoption(a, "tar");
     if(!outfile) {
         if(res->iscollection) {
             basepath = "";
         } else {
             basepath = res->name;
         }
-        if(tar) {
+        if(export) {
             outfile = "-";
         }
-    } else if(tar) {
+    } else if(export) {
         basepath = "";
     } else if(res->iscollection && !strcmp(outfile, "-")) {
         fprintf(
@@ -815,7 +823,7 @@
     int ret;
     getfunc get;
     TarOutputStream *tout = NULL;
-    if(tar) {
+    if(export) {
         get = (getfunc)resource2tar;
         FILE *tarfile = strcmp(outfile, "-") ? fopen(outfile, "wb") : stdout;
         if(!tarfile) {
@@ -834,7 +842,7 @@
             break;
         }
     }
-    if(tar) {
+    if(export) {
         // close tar stream
         if(tar_close(tout)) {
             fprintf(stderr, "tar stream broken\n");
@@ -937,13 +945,16 @@
     return tar_end_file(tar);
 }
 
-int cmd_put(CmdArgs *a) {
+int cmd_put(CmdArgs *a, DavBool import) {
     if(a->argc != 2) {
         // TODO: change, when put supports multiple files (however it should do)
         fprintf(stderr, "Too %s arguments\n", a->argc < 2 ? "few":"many");
         fprintf(stderr, "Usage: dav %s\n", find_usage_str("put"));
         return -1;
     }
+    if(import) {
+        ucx_map_cstr_put(a->options, "resursive", "");
+    }
     
     char *url = a->argv[0];
     char *file = a->argv[1];
@@ -977,10 +988,9 @@
         return -1;
     }
     
-    char *tar = cmd_getoption(a, "tar");
     
     int ret;
-    if(!tar) {
+    if(!import) {
         if(!strcmp(file, "-")) {
             FILE *in = stdin;
             ret = put_file(repo, a, sn, path, "stdin", in, 0);

mercurial