diff -r 017a4f09e6fa -r 52e4171d42ce dav/main.c --- 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] "); + 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] "); + 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] "); + 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] "); + 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] "); + 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);