dav/main.c

changeset 186
05d11fbcaeb3
parent 185
cd42cccee550
child 187
38295f2fa231
--- a/dav/main.c	Mon Jan 25 10:48:58 2016 +0100
+++ b/dav/main.c	Mon Jan 25 11:39:46 2016 +0100
@@ -119,8 +119,6 @@
         ret = cmd_get_property(args);
     } else if(!strcasecmp(cmd, "info")) {
         ret = cmd_info(args);
-    } else if(!strcasecmp(cmd, "add-repository")) {
-        ret = cmd_add_repository(args);
     } else {
         print_usage(argv[0]);
     }
@@ -961,10 +959,37 @@
             return -1;
         }
     } else {
-        fprintf(stderr, "Copy or Move not supported for different hosts.\n");
-        return -1;
+        char *server1 = util_url_base(repo1->url);
+        char *server2 = util_url_base(repo2->url);     
+        if(!strcmp(server1, server2)) {
+            DavSession *sn2 = connect_to_repo(repo2);
+            if(set_session_config(sn2, a)) {
+                return -1;
+            }
+            DavResource *dest = dav_resource_new(sn2, path2);
+            char *desthref = dav_resource_get_href(dest);
+            char *desturl = util_get_url(sn2, desthref);
+            
+            DavResource *res = dav_resource_new(sn, path1);
+            int err = cp ? dav_copyto(res, desturl, override)
+                     : dav_moveto(res, desturl, override);
+            
+            free(desturl);
+            dav_session_destroy(sn2);
+            
+            if(err) {
+                print_resource_error(sn, res->path);
+                fprintf(stderr, "Cannot %s resource.\n", cp ? "copy" : "move");
+                return -1;
+            }
+        } else {
+            fprintf(stderr, "Copy or Move not supported for different hosts.\n");
+            return -1;
+        }
     }
     
+    dav_session_destroy(sn);
+    
     return 0;
 }
 
@@ -1251,50 +1276,3 @@
     
     return;
 }
-
-int cmd_add_repository(CmdArgs *a) {
-    char *interactive = cmd_getoption(a, "interactive");
-    
-    if(!interactive && a->argc < 2) {
-        fprintf(stderr, "Too few arguments\n");
-        fprintf(stderr, "Alternatively, use the interactive mode");
-        return -1;
-    }
-    
-    Repository *repo = repository_new();
-    // create repo object and fill config with cmd args
-    for(int i=0;i<a->argc;i++) {
-        char *key;
-        char *value;
-        if(!getkeyvalue(a->argv[i], &key, &value)) {
-            if(!strcmp(key, "password")) {
-                // passwords from command line args are plain text
-                // but the repository needs a base64 encoded password
-                char *pw = util_base64encode(value, strlen(value));
-                free(value);
-                value = pw;
-            }
-            
-            if(repo_add_config(repo, key, value)) {
-                fprintf(
-                        stderr,
-                        "Unkown repository config element: %s\n",
-                        key);
-            }
-            
-            free(key);
-            free(value);
-        } else {
-            fprintf(stderr, "´%s´ not in key=value format\n", a->argv[i]);
-            // TODO: cleanup
-            return -1;
-        }
-    }
-    
-    if(interactive) {
-        // start interactive assistent to adjust config
-        repository_assistent(repo, 0);
-    }
-    
-    return 0;
-}

mercurial