dav/sync.c

changeset 529
dc3f82b04733
parent 528
4c9c8c017d52
child 530
29e660161b73
equal deleted inserted replaced
528:4c9c8c017d52 529:dc3f82b04733
146 stop_sighandler(&mutex, tid); 146 stop_sighandler(&mutex, tid);
147 } else if(!strcmp(cmd, "resolve-conflicts")) { 147 } else if(!strcmp(cmd, "resolve-conflicts")) {
148 ret = cmd_resolve_conflicts(args); 148 ret = cmd_resolve_conflicts(args);
149 } else if(!strcmp(cmd, "delete-conflicts")) { 149 } else if(!strcmp(cmd, "delete-conflicts")) {
150 ret = cmd_delete_conflicts(args); 150 ret = cmd_delete_conflicts(args);
151 } else if(!strcmp(cmd, "list-versions")) {
152 ret = cmd_list_versions(args);
151 } else if(!strcmp(cmd, "trash-info")) { 153 } else if(!strcmp(cmd, "trash-info")) {
152 ret = cmd_trash_info(args); 154 ret = cmd_trash_info(args);
153 } else if(!strcmp(cmd, "empty-trash")) { 155 } else if(!strcmp(cmd, "empty-trash")) {
154 ret = cmd_empty_trash(args); 156 ret = cmd_empty_trash(args);
155 } else if(!strcmp(cmd, "add-tag")) { 157 } else if(!strcmp(cmd, "add-tag")) {
192 194
193 fprintf(stderr, "Commands:\n"); 195 fprintf(stderr, "Commands:\n");
194 fprintf(stderr, " pull [-cldr] [-t <tags>] <directory>\n"); 196 fprintf(stderr, " pull [-cldr] [-t <tags>] <directory>\n");
195 fprintf(stderr, " push [-cldrVRM] [-t <tags>] <directory>\n"); 197 fprintf(stderr, " push [-cldrVRM] [-t <tags>] <directory>\n");
196 fprintf(stderr, " archive [-cldVRM] [-t <tags>] <directory>\n"); 198 fprintf(stderr, " archive [-cldVRM] [-t <tags>] <directory>\n");
197 fprintf(stderr, " restore [-ld] [-s <directory>] [file...]\n"); 199 fprintf(stderr, " restore [-ldRM] [-s <directory>] [file...]\n");
198 fprintf(stderr, " resolve-conflicts <directory>\n"); 200 fprintf(stderr, " resolve-conflicts <directory>\n");
199 fprintf(stderr, " delete-conflicts <directory>\n"); 201 fprintf(stderr, " delete-conflicts <directory>\n");
200 fprintf(stderr, " trash-info <directory>\n"); 202 fprintf(stderr, " trash-info <directory>\n");
201 fprintf(stderr, " empty-trash <directory>\n"); 203 fprintf(stderr, " empty-trash <directory>\n");
202 fprintf(stderr, " add-tag [-s <syncdir>] <file> <tag>\n"); 204 fprintf(stderr, " add-tag [-s <syncdir>] <file> <tag>\n");
3029 } 3031 }
3030 } 3032 }
3031 return str; 3033 return str;
3032 } 3034 }
3033 3035
3036 int cmd_list_versions(CmdArgs *a) {
3037 if(a->argc != 1) {
3038 fprintf(stderr, "Too %s arguments\n", a->argc < 1 ? "few" : "many");
3039 return -1;
3040 }
3041
3042 SyncFile file;
3043 int ret = 0;
3044 char *path = a->argv[0];
3045
3046 int err = sync_get_file(a, path, &file, TRUE);
3047 if(err) {
3048 sync_print_get_file_err(path, err);
3049 return 1;
3050 }
3051 SyncDirectory *dir = file.dir;
3052
3053 if(!dir->versioning) {
3054 fprintf(stderr, "No versioning configured for syncdir %s\n", dir->name);
3055 }
3056
3057 Repository *repo = get_repository(sstr(dir->repository));
3058 if(!repo) {
3059 fprintf(stderr, "Unknown repository %s\n", dir->repository);
3060 return -1;
3061 }
3062
3063 SyncDatabase *db = load_db(dir->database);
3064 if(!db) {
3065 fprintf(stderr, "Cannot load database file: %s\n", dir->database);
3066 return -1;
3067 }
3068 remove_deleted_conflicts(dir, db);
3069
3070 DavSession *sn = create_session(ctx, repo, dir->collection);
3071 ucx_mempool_reg_destr(sn->mp, db, (ucx_destructor)destroy_db);
3072 if (cmd_getoption(a, "verbose")) {
3073 curl_easy_setopt(sn->handle, CURLOPT_VERBOSE, 1L);
3074 curl_easy_setopt(sn->handle, CURLOPT_STDERR, stderr);
3075 }
3076
3077 DavResource *res = dav_resource_new(sn, file.path);
3078 if(dir->versioning->type == VERSIONING_SIMPLE) {
3079 do {
3080 DavPropName p;
3081 p.ns = DAV_NS;
3082 p.name = VERSION_PATH_PROPERTY;
3083 if(dav_load_prop(res, &p, 1)) {
3084 print_resource_error(sn, file.path);
3085 ret = 1;
3086 break;
3087 }
3088 char *vcol_href = dav_get_string_property_ns(res, DAV_NS, VERSION_PATH_PROPERTY);
3089 if(!vcol_href) {
3090 ret = 1;
3091 break;
3092 }
3093
3094 DavResource *vcol = dav_resource_new_href(sn, vcol_href);
3095 if(!vcol) {
3096 ret = 1;
3097 break;
3098 }
3099
3100 if(dav_load_prop(vcol, NULL, 0)) {
3101 print_resource_error(sn, vcol->path);
3102 ret = 1;
3103 break;
3104 }
3105
3106 DavResource *child = vcol->children;
3107 while(child) {
3108 time_t now = child->lastmodified;
3109 struct tm *date = gmtime(&now);
3110 char str[32];
3111 putenv("LC_TIME=C");
3112 size_t len = strftime(str, 32, "%a, %d %b %Y %H:%M:%S GMT", date);
3113
3114 printf("%s%32s\n", str, child->name);
3115
3116 child = child->next;
3117 }
3118 } while(0);
3119 }
3120
3121 free(file.path);
3122 dav_session_destroy(sn);
3123
3124 return ret;
3125 }
3126
3127
3034 int cmd_trash_info(CmdArgs *a) { 3128 int cmd_trash_info(CmdArgs *a) {
3035 if(a->argc != 1) { 3129 if(a->argc != 1) {
3036 fprintf(stderr, "Too %s arguments\n", a->argc < 1 ? "few" : "many"); 3130 fprintf(stderr, "Too %s arguments\n", a->argc < 1 ? "few" : "many");
3037 return -1; 3131 return -1;
3038 } 3132 }

mercurial