# HG changeset patch # User Olaf Wintermann # Date 1537700855 -7200 # Node ID b4e3453e2b4975fa3b0eac98b6a67679d3478c76 # Parent 52e4171d42ce38169683c659eabe899b4487138b adds -V option to get, get-property and info commands diff -r 52e4171d42ce -r b4e3453e2b49 dav/main.c --- a/dav/main.c Sun Sep 23 12:51:41 2018 +0200 +++ b/dav/main.c Sun Sep 23 13:07:35 2018 +0200 @@ -207,7 +207,7 @@ static char *cmdusageinfo[] = { "list [-altdepcR] [-u ] ", - "get [-pcRK] [-o ] [-u ] ", + "get [-pcRK] [-o ] [-u ] [-V ] ", "put [-pcR] [-k ] [-L ] ", "mkdir [-pc] [-k ] [-L ] ", "remove [-pc] [-L ] ", @@ -215,12 +215,12 @@ "move [-pcO] [-L ] ", "export [-pc] [-o ] [-u ] ", "import [-pc] [-k ] [-L ] ", - "get-property [-pcx] [-n ] ", + "get-property [-pcx] [-V ] [-n ] ", "set-property [-pcx] [-L ] [-n ] [value]", "remove-property [-pc] [-n ] ", "lock [-pc] [-T timeout] ", "unlock [-pc] [-L ] ", - "info [-pc] ", + "info [-pc] [-V ] ", "date [url]", NULL }; @@ -910,6 +910,13 @@ } int recursive = cmd_getoption(a, "recursive") ? 1 : 0; + char *version = cmd_getoption(a, "version"); + + if(recursive && version) { + fprintf(stderr, "-V option can only be used without -R option\n"); + return -1; + } + DavResource *res; int depth = recursive ? -1 : 1; @@ -929,6 +936,16 @@ return -1; } + if(version) { + DavResource *vres = find_version(res, version); + if(!vres) { + fprintf(stderr, "Cannot find version '%s' for resource.\n", version); + return -1; + } + dav_resource_free_all(res); + res = vres; + } + /* * determine the output file * use stdout if the output file is - @@ -1616,6 +1633,8 @@ char *namespace = cmd_getoption(a, "namespace"); char *property = a->argv[1]; + char *version = cmd_getoption(a, "version"); + DavPropName propname; if(namespace) { propname.ns = namespace; @@ -1629,6 +1648,16 @@ } DavResource *res = dav_resource_new(sn, path); + if(version) { + DavResource *vres = find_version(res, version); + if(!vres) { + fprintf(stderr, "Cannot find version '%s' for resource.\n", version); + return -1; + } + dav_resource_free_all(res); + res = vres; + } + if(dav_load_prop(res, &propname, 1)) { print_resource_error(sn, res->path); return -1; @@ -1905,7 +1934,19 @@ return -1; } + char *version = cmd_getoption(a, "version"); + DavResource *res = dav_resource_new(sn, path); + if(version) { + DavResource *vres = find_version(res, version); + if(!vres) { + fprintf(stderr, "Cannot find version '%s' for resource.\n", version); + return -1; + } + dav_resource_free_all(res); + res = vres; + } + if(!dav_load(res)) { printf("name: %s\n", res->name); printf("path: %s\n", res->path); @@ -2128,6 +2169,25 @@ return ret; } +DavResource* find_version(DavResource *res, char *version) { + DavResource *list = dav_versiontree(res, NULL); + DavResource *ret = NULL; + while(list) { + DavResource *next = list->next; + if(!ret) { + char *vname = dav_get_string_property(list, "D:version-name"); + if(vname && !strcmp(vname, version)) { + ret = list; + } + } + if(list != ret) { + dav_resource_free(list); + } + list = next; + } + return ret; +} + char* stdin2str() { UcxBuffer *buf = ucx_buffer_new(NULL, 1024, UCX_BUFFER_AUTOEXTEND); diff -r 52e4171d42ce -r b4e3453e2b49 dav/main.h --- a/dav/main.h Sun Sep 23 12:51:41 2018 +0200 +++ b/dav/main.h Sun Sep 23 13:07:35 2018 +0200 @@ -100,6 +100,8 @@ int cmd_versioncontrol(CmdArgs *args); int cmd_list_versions(CmdArgs *args); +DavResource* find_version(DavResource *res, char *version); + char* stdin2str(); char* xml2str(DavXmlNode *node); void printxmldoc(FILE *out, char *root, char *rootns, DavXmlNode *content); diff -r 52e4171d42ce -r b4e3453e2b49 dav/optparser.c --- a/dav/optparser.c Sun Sep 23 12:51:41 2018 +0200 +++ b/dav/optparser.c Sun Sep 23 13:07:35 2018 +0200 @@ -165,6 +165,11 @@ optchar = 'F'; break; } + case 'V': { + option = "version"; + optchar = 'V'; + break; + } } } } else if(option) {