fixes dav list -R output

Thu, 03 Aug 2017 12:31:17 +0200

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Thu, 03 Aug 2017 12:31:17 +0200
changeset 270
0edfb4c0e7f8
parent 269
c89633916e36
child 271
7b1ca53f3897

fixes dav list -R output

previously the full path was shown, now the path relative to the requested collection

dav/main.c file | annotate | diff | comparison | revisions
dav/main.h file | annotate | diff | comparison | revisions
--- a/dav/main.c	Thu Aug 03 11:43:04 2017 +0200
+++ b/dav/main.c	Thu Aug 03 12:31:17 2017 +0200
@@ -393,7 +393,7 @@
         }
         
         // parameters
-        void (*print_func)(DavResource*, CmdArgs *);
+        void (*print_func)(DavResource*, char *, CmdArgs *);
         if(cmd_getoption(a, "list") || cmd_getoption(a, "extended")) {
             print_func = ls_print_list_elm;
         } else {
@@ -402,7 +402,7 @@
         
         DavResource *child = ls->children;
         while(child) {
-            print_func(child, a);
+            print_func(child, path, a);
             child = child->next;
         }
         
@@ -506,7 +506,22 @@
     return str;
 }
 
-void ls_print_list_elm(DavResource *res, CmdArgs *a) {
+static char* ls_name(char *parent, char *path, int *len) {
+    if(parent) {
+        path += strlen(parent);
+    }
+    if(path[0] == '/') {
+        path++;
+    }
+    int pathlen = strlen(path);
+    if(path[pathlen-1] == '/') {
+        pathlen--;
+    }
+    *len = pathlen;
+    return path;
+}
+
+void ls_print_list_elm(DavResource *res, char *parent, CmdArgs *a) {
     int recursive = cmd_getoption(a, "recursive") ? 1 : 0;
     int show_all = cmd_getoption(a, "all") ? 1 : 0;
     if(res->name[0] == '.' && !show_all) {
@@ -556,13 +571,17 @@
     
     char *date = ls_date_str(res->lastmodified);
     char *size = ls_size_str(res);
-    char *name = recursive ? res->path+1 : res->name;
+    int namelen = strlen(res->name);
+    char *name = recursive ? ls_name(parent, res->path, &namelen) : res->name;
+    
+    //char *name = recursive ? res->path+1 : res->name;
     printf(
-            "%s %*s %10s  %12s  %s\n",
+            "%s %*s %10s  %12s  %.*s\n",
             flags,
             type_width, type,
             size,
             date,
+            namelen,
             name);
     free(date);
     free(size);
@@ -572,26 +591,27 @@
         while(child) {
             //ls_print_list_elm(child, a);
             if(child->name[0] != '.' || show_all) {
-                ls_print_list_elm(child, a);
+                ls_print_list_elm(child, parent, a);
             }
             child = child->next;
         }
     }
 }
 
-void ls_print_elm(DavResource *res, CmdArgs *a) {
+void ls_print_elm(DavResource *res, char *parent, CmdArgs *a) {
     int recursive = cmd_getoption(a, "recursive") ? 1 : 0;
     int show_all = cmd_getoption(a, "all") ? 1 : 0;
     if(res->name[0] == '.' && !show_all) {
         return;
     }
     
-    char *name = recursive ? res->path+1 : res->name;
-    printf("%s\n", name);
+    int namelen = strlen(res->name);
+    char *name = recursive ? ls_name(parent, res->path, &namelen) : res->name;
+    printf("%.*s\n", namelen, name);
     if(recursive) {
         DavResource *child = res->children;
         while(child) {
-            ls_print_elm(child, a);
+            ls_print_elm(child, parent, a);
             child = child->next;
         }
     }
--- a/dav/main.h	Thu Aug 03 11:43:04 2017 +0200
+++ b/dav/main.h	Thu Aug 03 12:31:17 2017 +0200
@@ -44,8 +44,8 @@
 int request_auth(Repository *repo, DavSession *sn, CmdArgs *args);
 
 int cmd_list(CmdArgs *args);
-void ls_print_list_elm(DavResource *res, CmdArgs *args);
-void ls_print_elm(DavResource *res, CmdArgs *args);
+void ls_print_list_elm(DavResource *res, char *parent, CmdArgs *args);
+void ls_print_elm(DavResource *res, char *parent, CmdArgs *args);
 
 int cmd_get(CmdArgs *args);
 int get_resource(Repository *repo, DavResource *res, CmdArgs *a, char *out);

mercurial