diff -r cd42cccee550 -r 05d11fbcaeb3 dav/main.c --- 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;iargc;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; -}