dav/main.c

changeset 475
52e4171d42ce
parent 474
017a4f09e6fa
child 476
b4e3453e2b49
--- a/dav/main.c	Sun Sep 23 08:13:50 2018 +0200
+++ b/dav/main.c	Sun Sep 23 12:51:41 2018 +0200
@@ -140,6 +140,16 @@
             ret = cmd_unlock(args);
         }  else if(!strcasecmp(cmd, "info")) {
             ret = cmd_info(args);
+        } else if(!strcasecmp(cmd, "checkout")) {
+            ret = cmd_checkout(args);
+        } else if(!strcasecmp(cmd, "checkin")) {
+            ret = cmd_checkin(args);
+        } else if(!strcasecmp(cmd, "uncheckout")) {
+            ret = cmd_uncheckout(args);
+        } else if(!strcasecmp(cmd, "versioncontrol")) {
+            ret = cmd_versioncontrol(args);
+        } else if(!strcasecmp(cmd, "list-versions") || !strcasecmp(cmd, "lsv")) {
+            ret = cmd_list_versions(args);
         } else if(!strcasecmp(cmd, "add-repository")
                 || !strcasecmp(cmd, "add-repo")) {
             ret = cmd_add_repository(args);
@@ -241,8 +251,7 @@
             break;
         }
         fprintf(stderr, "        %s\n", str);
-    }
-    
+    }   
     fprintf(stderr, "\n");
     fprintf(stderr, "Options:\n");
     fprintf(stderr,
@@ -272,6 +281,8 @@
     fprintf(stderr, "        -i         disable cert verification (all commands)\n");
     fprintf(stderr, "        -v         verbose output (all commands)\n");
     fprintf(stderr, "\n");
+    fprintf(stderr, "Advanced commands:\n");
+    fprintf(stderr, "        versioncontrol, list-versions, checkout, checkin, uncheckout\n\n");
     fprintf(stderr, "Config commands:\n");
     fprintf(stderr, "        add-repository\n");
     fprintf(stderr, "        remove-repository\n");
@@ -1962,6 +1973,161 @@
     return -1;
 }
 
+int cmd_checkout(CmdArgs *a) {
+    if(a->argc < 1) {
+        fprintf(stderr, "Too few arguments\n");
+        fprintf(stderr, "Usage: dav %s\n", "checkout [-pc] <url>");
+        return -1;
+    }
+    
+    char *url = a->argv[0];
+    char *path = NULL;
+    Repository *repo = url2repo(url, &path);
+    DavSession *sn = connect_to_repo(repo, path, a);
+    
+    if(set_session_config(sn, a)) {
+        return -1;
+    }
+    set_session_lock(sn, a);
+    
+    int ret = 0;
+    DavResource *res = dav_resource_new(sn, path);
+    if(dav_checkout(res)) {
+        print_resource_error(sn, res->path);
+        ret = 1;
+    }
+    
+    return ret;
+}
+
+int cmd_checkin(CmdArgs *a) {
+    if(a->argc < 1) {
+        fprintf(stderr, "Too few arguments\n");
+        fprintf(stderr, "Usage: dav %s\n", "checkin [-pc] <url>");
+        return -1;
+    }
+    
+    char *url = a->argv[0];
+    char *path = NULL;
+    Repository *repo = url2repo(url, &path);
+    DavSession *sn = connect_to_repo(repo, path, a);
+    
+    if(set_session_config(sn, a)) {
+        return -1;
+    }
+    set_session_lock(sn, a);
+    
+    int ret = 0;
+    DavResource *res = dav_resource_new(sn, path);
+    if(dav_checkin(res)) {
+        print_resource_error(sn, res->path);
+        ret = 1;
+    }
+    
+    return ret;
+}
+
+int cmd_uncheckout(CmdArgs *a) {
+    if(a->argc < 1) {
+        fprintf(stderr, "Too few arguments\n");
+        fprintf(stderr, "Usage: dav %s\n", "uncheckout [-pc] <url>");
+        return -1;
+    }
+    
+    char *url = a->argv[0];
+    char *path = NULL;
+    Repository *repo = url2repo(url, &path);
+    DavSession *sn = connect_to_repo(repo, path, a);
+    
+    if(set_session_config(sn, a)) {
+        return -1;
+    }
+    set_session_lock(sn, a);
+    
+    int ret = 0;
+    DavResource *res = dav_resource_new(sn, path);
+    if(dav_uncheckout(res)) {
+        print_resource_error(sn, res->path);
+        ret = 1;
+    }
+    
+    return ret;
+}
+int cmd_versioncontrol(CmdArgs *a) {
+    if(a->argc < 1) {
+        fprintf(stderr, "Too few arguments\n");
+        fprintf(stderr, "Usage: dav %s\n", "versioncontrol [-pc] <url>");
+        return -1;
+    }
+    
+    char *url = a->argv[0];
+    char *path = NULL;
+    Repository *repo = url2repo(url, &path);
+    DavSession *sn = connect_to_repo(repo, path, a);
+    
+    if(set_session_config(sn, a)) {
+        return -1;
+    }
+    set_session_lock(sn, a); 
+    
+    int ret = 0;
+    DavResource *res = dav_resource_new(sn, path);
+    if(dav_versioncontrol(res)) {
+        print_resource_error(sn, res->path);
+        ret = 1;
+    }
+    
+    return ret;
+}
+
+int cmd_list_versions(CmdArgs *a) {
+    if(a->argc < 1) {
+        fprintf(stderr, "Too few arguments\n");
+        fprintf(stderr, "Usage: dav %s\n", "list-versions [-pc] <url>");
+        return -1;
+    }
+    
+    char *url = a->argv[0];
+    char *path = NULL;
+    Repository *repo = url2repo(url, &path);
+    DavSession *sn = connect_to_repo(repo, path, a);
+    
+    if(set_session_config(sn, a)) {
+        return -1;
+    }
+    
+    DavResource *res = dav_resource_new(sn, path);
+    
+    int ret = 0;
+    DavResource *list = dav_versiontree(res, NULL);
+    if(list) {
+        char* longlist = cmd_getoption(a, "list");
+        
+        DavResource *v = list;
+        int addnl = 0;
+        while(v) {
+            char *vname = dav_get_string_property(v, "D:version-name");
+            
+            if(longlist) {
+                if(addnl) {
+                    putchar('\n');
+                }
+                printf("name: %s\n", vname);
+                printf("href: %s\n", v->href);
+                addnl = 1;
+            } else {
+                printf("%s\n", vname);
+            }
+            v = v->next;
+        }
+    } else if(sn->error != DAV_OK) {
+        print_resource_error(sn, path);
+        ret = 1;
+    }
+    
+    return ret;
+}
+
 
 char* stdin2str() {
     UcxBuffer *buf = ucx_buffer_new(NULL, 1024, UCX_BUFFER_AUTOEXTEND);

mercurial