# HG changeset patch # User Olaf Wintermann # Date 1527414469 -7200 # Node ID 222997d48ae143a2ba48ace1296f14ef2112cf47 # Parent 39fd327f81da16d2074cac55706794957f4d9b00 moving tar option from get/put to new export/import commands dav export creates an archive from a collection dav import uploads the content of an archive to a collection diff -r 39fd327f81da -r 222997d48ae1 dav/main.c --- a/dav/main.c Sat May 12 15:03:11 2018 +0200 +++ b/dav/main.c Sun May 27 11:47:49 2018 +0200 @@ -105,9 +105,9 @@ if(!strcasecmp(cmd, "list") || !strcasecmp(cmd, "ls")) { ret = cmd_list(args); } else if(!strcasecmp(cmd, "get")) { - ret = cmd_get(args); + ret = cmd_get(args, FALSE); } else if(!strcasecmp(cmd, "put")) { - ret = cmd_put(args); + ret = cmd_put(args, FALSE); } else if( !strcasecmp(cmd, "remove") || !strcasecmp(cmd, "rm") || @@ -120,6 +120,10 @@ ret = cmd_move(args, true); } else if(!strcasecmp(cmd, "move") || !strcasecmp(cmd, "mv")) { ret = cmd_move(args, false); + } else if(!strcasecmp(cmd, "export")) { + ret = cmd_get(args, TRUE); + } else if(!strcasecmp(cmd, "import")) { + ret = cmd_put(args, TRUE); } else if(!strcasecmp(cmd, "date")) { ret = cmd_date(args); } else if(!strcasecmp(cmd, "set-property")) { @@ -159,12 +163,14 @@ static char *cmdusageinfo[] = { "list [-altdepcR] [-u ] ", - "get [-pcRKA] [-o ] [-u ] ", - "put [-pcRA] [-k ] [-L ] ", + "get [-pcRK] [-o ] [-u ] ", + "put [-pcR] [-k ] [-L ] ", "mkdir [-pc] [-k ] [-L ] ", "remove [-pc] [-L ] ", "copy [-pcO] [-L ] ", "move [-pcO] [-L ] ", + "export [-pc] [-o ] [-u ] ", + "import [-pc] [-k ] [-L ] ", "get-property [-pcx] [-n ] ", "set-property [-pcx] [-L ] [-n ] [value]", "remove-property [-pc] [-n ] ", @@ -397,7 +403,7 @@ int newres = update_progress(res, total, now, p); time_t newts = time(NULL); - if(newres || (p->ts != newts)) { + if((p->ts != newts)) { fprintf(p->out, "[%s]: %" PRId64 "k/%" PRId64 "k total: %" PRId64 "M/%" PRId64 "M\n", res->name, now/1024, total/1024, p->cur/(1024*1024), p->total/(1024*1024)); fflush(p->out); } @@ -670,13 +676,16 @@ free(getres); } -int cmd_get(CmdArgs *a) { +int cmd_get(CmdArgs *a, DavBool export) { if(a->argc != 1) { // TODO: change this, when get supports retrieval of multiple files fprintf(stderr, "Too %s arguments\n", a->argc < 1 ? "few":"many"); fprintf(stderr, "Usage: dav %s\n", find_usage_str("get")); return -1; } + if(export) { + ucx_map_cstr_put(a->options, "recursive", ""); + } char *url = a->argv[0]; char *path = NULL; @@ -741,17 +750,16 @@ */ char *outfile = cmd_getoption(a, "output"); char *basepath = outfile; - char *tar = cmd_getoption(a, "tar"); if(!outfile) { if(res->iscollection) { basepath = ""; } else { basepath = res->name; } - if(tar) { + if(export) { outfile = "-"; } - } else if(tar) { + } else if(export) { basepath = ""; } else if(res->iscollection && !strcmp(outfile, "-")) { fprintf( @@ -815,7 +823,7 @@ int ret; getfunc get; TarOutputStream *tout = NULL; - if(tar) { + if(export) { get = (getfunc)resource2tar; FILE *tarfile = strcmp(outfile, "-") ? fopen(outfile, "wb") : stdout; if(!tarfile) { @@ -834,7 +842,7 @@ break; } } - if(tar) { + if(export) { // close tar stream if(tar_close(tout)) { fprintf(stderr, "tar stream broken\n"); @@ -937,13 +945,16 @@ return tar_end_file(tar); } -int cmd_put(CmdArgs *a) { +int cmd_put(CmdArgs *a, DavBool import) { if(a->argc != 2) { // TODO: change, when put supports multiple files (however it should do) fprintf(stderr, "Too %s arguments\n", a->argc < 2 ? "few":"many"); fprintf(stderr, "Usage: dav %s\n", find_usage_str("put")); return -1; } + if(import) { + ucx_map_cstr_put(a->options, "resursive", ""); + } char *url = a->argv[0]; char *file = a->argv[1]; @@ -977,10 +988,9 @@ return -1; } - char *tar = cmd_getoption(a, "tar"); int ret; - if(!tar) { + if(!import) { if(!strcmp(file, "-")) { FILE *in = stdin; ret = put_file(repo, a, sn, path, "stdin", in, 0); diff -r 39fd327f81da -r 222997d48ae1 dav/main.h --- a/dav/main.h Sat May 12 15:03:11 2018 +0200 +++ b/dav/main.h Sun May 27 11:47:49 2018 +0200 @@ -70,11 +70,11 @@ void ls_print_list_elm(DavResource *res, char *parent, CmdArgs *args); void ls_print_elm(DavResource *res, char *parent, CmdArgs *args); -int cmd_get(CmdArgs *args); +int cmd_get(CmdArgs *args, DavBool export); int get_resource(Repository *repo, GetResource *res, CmdArgs *a, void *unused); int resource2tar(Repository *repo, GetResource *res, CmdArgs *a, TarOutputStream *tar); -int cmd_put(CmdArgs *args); +int cmd_put(CmdArgs *args, DavBool import); int put_entry(Repository *repo, CmdArgs *a, DavSession *sn, char *path, char *file, DavBool root); int put_tar(Repository *repo, CmdArgs *a, DavSession *sn, char *tarfile, char *path); int put_file(Repository *repo, CmdArgs *a, DavSession *sn, char *path, char *name, FILE *in, off_t len); diff -r 39fd327f81da -r 222997d48ae1 dav/optparser.c --- a/dav/optparser.c Sat May 12 15:03:11 2018 +0200 +++ b/dav/optparser.c Sun May 27 11:47:49 2018 +0200 @@ -131,10 +131,6 @@ ucx_map_cstr_put(a->options, "structure", NOARG); break; } - case 'A': { - ucx_map_cstr_put(a->options, "tar", NOARG); - break; - } case 'K': { ucx_map_cstr_put(a->options, "keep", NOARG); break;