dav/sync.c

changeset 531
fa54e3a1250a
parent 530
29e660161b73
child 532
aeda47714978
equal deleted inserted replaced
530:29e660161b73 531:fa54e3a1250a
3031 } 3031 }
3032 } 3032 }
3033 return str; 3033 return str;
3034 } 3034 }
3035 3035
3036 void print_resource_version(DavResource *res, char *name) {
3037 time_t now = res->lastmodified;
3038 struct tm *date = gmtime(&now);
3039 char str[32];
3040 putenv("LC_TIME=C");
3041 size_t len = strftime(str, 32, "%a, %d %b %Y %H:%M:%S GMT", date);
3042
3043 printf("name: %s\n", name);
3044 printf("lastmodified: %s\n", str);
3045 char *server = util_url_base(res->session->base_url);
3046 char *url = util_concat_path(server, res->href);
3047 printf("url: %s\n", url);
3048 free(server);
3049 free(url);
3050 }
3051
3036 int cmd_list_versions(CmdArgs *a) { 3052 int cmd_list_versions(CmdArgs *a) {
3037 if(a->argc != 1) { 3053 if(a->argc != 1) {
3038 fprintf(stderr, "Too %s arguments\n", a->argc < 1 ? "few" : "many"); 3054 fprintf(stderr, "Too %s arguments\n", a->argc < 1 ? "few" : "many");
3039 return -1; 3055 return -1;
3040 } 3056 }
3112 children = ucx_list_sort(children, ucx_cmp_str, NULL); 3128 children = ucx_list_sort(children, ucx_cmp_str, NULL);
3113 3129
3114 DavBool first = 1; 3130 DavBool first = 1;
3115 UCX_FOREACH(elm, children) { 3131 UCX_FOREACH(elm, children) {
3116 DavResource *c = elm->data; 3132 DavResource *c = elm->data;
3117 time_t now = c->lastmodified;
3118 struct tm *date = gmtime(&now);
3119 char str[32];
3120 putenv("LC_TIME=C");
3121 size_t len = strftime(str, 32, "%a, %d %b %Y %H:%M:%S GMT", date);
3122
3123 if(!first) { 3133 if(!first) {
3124 putchar('\n'); 3134 putchar('\n');
3125 } 3135 }
3126 printf("name: %s\n", c->name); 3136 print_resource_version(c, c->name);
3127 printf("lastmodified: %s\n", str);
3128 char *server = util_url_base(sn->base_url);
3129 char *url = util_concat_path(server, c->href);
3130 printf("url: %s\n", url);
3131 free(server);
3132 free(url);
3133 first = 0; 3137 first = 0;
3134 } 3138 }
3135 ucx_list_free(children); 3139 ucx_list_free(children);
3136 } while(0); 3140 } while(0);
3141 } else if(dir->versioning->type == VERSIONING_DELTAV) {
3142 DavResource *versions = dav_versiontree(res, NULL);
3143 DavResource *v = versions;
3144 DavBool first = 1;
3145 while(v) {
3146 if(!first) {
3147 putchar('\n');
3148 }
3149 char *vname = dav_get_string_property(v, "D:version-name");
3150 print_resource_version(v, vname);
3151 first = 0;
3152 v = v->next;
3153 }
3137 } 3154 }
3138 3155
3139 free(file.path); 3156 free(file.path);
3140 dav_session_destroy(sn); 3157 dav_session_destroy(sn);
3141 3158
3415 } else { 3432 } else {
3416 fullpath = strdup(path); 3433 fullpath = strdup(path);
3417 } 3434 }
3418 3435
3419 // TODO: normalize path 3436 // TODO: normalize path
3420 3437 DavBool not_in_dir = 0;
3421 if(!sstrprefix(sstr((char*)fullpath), sstr(dir->path))) { 3438
3439 scstr_t fp = scstr(fullpath);
3440 scstr_t dp = scstr(dir->path);
3441 if(fp.length == dp.length) {
3442 if(sstrcmp(fp, dp)) {
3443 not_in_dir = 1;
3444 }
3445 } else if(fp.length < dp.length) {
3446 not_in_dir = 1;
3447 } else {
3448 if(!sstrprefix(fp, dp)) {
3449 not_in_dir = 1;
3450 } else {
3451 if(dp.ptr[dp.length-1] == '/') {
3452 dp.length--;
3453 }
3454 if(fp.ptr[dp.length] != '/') {
3455 not_in_dir = 1;
3456 }
3457 }
3458 }
3459
3460 if(not_in_dir) {
3422 free(fullpath); 3461 free(fullpath);
3423 return 0; 3462 return 0;
3424 } 3463 }
3425 3464
3426 // TODO: check filter 3465 // TODO: check filter
3481 void sync_print_get_file_err(const char *path, int err) { 3520 void sync_print_get_file_err(const char *path, int err) {
3482 switch(err) { 3521 switch(err) {
3483 case 1: fprintf(stderr, "File %s: not found\n", path); break; 3522 case 1: fprintf(stderr, "File %s: not found\n", path); break;
3484 case 2: fprintf(stderr, "File %s: permission denied\n"); break; 3523 case 2: fprintf(stderr, "File %s: permission denied\n"); break;
3485 case 3: fprintf(stderr, "File %s: stat failed: %s\n", path, strerror(errno)); break; 3524 case 3: fprintf(stderr, "File %s: stat failed: %s\n", path, strerror(errno)); break;
3486 case 4: fprintf(stderr, "File %s is not in any syncdir\n"); break; 3525 case 4: fprintf(stderr, "File %s is not in any syncdir\n", path); break;
3487 case 5: fprintf(stderr, "File %s is in multiple syncdirs\n"); break; 3526 case 5: fprintf(stderr, "File %s is in multiple syncdirs\n", path); break;
3488 case 6: fprintf(stderr, "Syncdir not found\n"); break; 3527 case 6: fprintf(stderr, "Syncdir not found\n"); break;
3489 } 3528 }
3490 } 3529 }
3491 3530
3492 3531

mercurial