dav/sync.c

changeset 331
9ca1e4706acc
parent 318
7e0694423838
child 347
b6ff6be7aa91
equal deleted inserted replaced
330:54819e984a19 331:9ca1e4706acc
374 if (res_matches_filter(dir, res->path)) { 374 if (res_matches_filter(dir, res->path)) {
375 res = res->next; 375 res = res->next;
376 continue; 376 continue;
377 } 377 }
378 378
379 char *status = dav_get_property(res, "idav:status"); 379 char *status = dav_get_string_property(res, "idav:status");
380 if(status && !strcmp(status, "broken")) { 380 if(status && !strcmp(status, "broken")) {
381 res = res->next; 381 res = res->next;
382 continue; 382 continue;
383 } 383 }
384 384
496 int cdt = cmd_getoption(a, "conflict") ? 0 : 1; // conflict detection 496 int cdt = cmd_getoption(a, "conflict") ? 0 : 1; // conflict detection
497 497
498 LocalResource *local = ucx_map_cstr_get(db->resources, res->path); 498 LocalResource *local = ucx_map_cstr_get(db->resources, res->path);
499 char *local_path = util_concat_path(dir->path, res->path); 499 char *local_path = util_concat_path(dir->path, res->path);
500 500
501 char *etag = dav_get_property(res, "D:getetag"); 501 char *etag = dav_get_string_property(res, "D:getetag");
502 struct stat s; 502 struct stat s;
503 memset(&s, 0, sizeof(struct stat)); 503 memset(&s, 0, sizeof(struct stat));
504 if(local && !res->iscollection) { 504 if(local && !res->iscollection) {
505 int exists = 1; 505 int exists = 1;
506 if(stat(local_path, &s)) { 506 if(stat(local_path, &s)) {
1178 LocalResource *res) 1178 LocalResource *res)
1179 { 1179 {
1180 DavResource *remote = dav_get(sn, res->path, "D:getetag"); 1180 DavResource *remote = dav_get(sn, res->path, "D:getetag");
1181 int ret = 0; 1181 int ret = 0;
1182 if(remote) { 1182 if(remote) {
1183 char *etag = dav_get_property(remote, "D:getetag"); 1183 char *etag = dav_get_string_property(remote, "D:getetag");
1184 if(!res->etag) { 1184 if(!res->etag) {
1185 // the resource is on the server and the client has no etag 1185 // the resource is on the server and the client has no etag
1186 ret = 1; 1186 ret = 1;
1187 } else if(etag) { 1187 } else if(etag) {
1188 sstr_t e = sstr(etag); 1188 sstr_t e = sstr(etag);
1272 ret = -1; 1272 ret = -1;
1273 // try to set the resource status to 'broken' 1273 // try to set the resource status to 'broken'
1274 sync_set_status(res, "broken"); 1274 sync_set_status(res, "broken");
1275 } else { 1275 } else {
1276 // everything seems fine, we can update the local resource 1276 // everything seems fine, we can update the local resource
1277 char *etag = dav_get_property(up_res, "D:getetag"); 1277 char *etag = dav_get_string_property(up_res, "D:getetag");
1278 if(etag) { 1278 if(etag) {
1279 if(strlen(etag) > 2 && etag[0] == 'W' && etag[1] == '/') { 1279 if(strlen(etag) > 2 && etag[0] == 'W' && etag[1] == '/') {
1280 etag = etag + 2; 1280 etag = etag + 2;
1281 } 1281 }
1282 } 1282 }
1289 local->etag = strdup(etag); 1289 local->etag = strdup(etag);
1290 } else { 1290 } else {
1291 local->etag = NULL; 1291 local->etag = NULL;
1292 } 1292 }
1293 1293
1294 if(dav_get_property(up_res, "idav:status")) { 1294 if(dav_get_string_property(up_res, "idav:status")) {
1295 sync_remove_status(up_res); 1295 sync_remove_status(up_res);
1296 } 1296 }
1297 1297
1298 dav_resource_free(up_res); 1298 dav_resource_free(up_res);
1299 } 1299 }
1338 if(dav_delete(res)) { 1338 if(dav_delete(res)) {
1339 ret = 1; 1339 ret = 1;
1340 fprintf(stderr, "Cannot delete resource %s\n", res->path); 1340 fprintf(stderr, "Cannot delete resource %s\n", res->path);
1341 } 1341 }
1342 } else { 1342 } else {
1343 char *etag = dav_get_property(res, "D:getetag"); 1343 char *etag = dav_get_string_property(res, "D:getetag");
1344 if(etag) { 1344 if(etag) {
1345 if(strlen(etag) > 2 && etag[0] == 'W' && etag[1] == '/') { 1345 if(strlen(etag) > 2 && etag[0] == 'W' && etag[1] == '/') {
1346 etag = etag + 2; 1346 etag = etag + 2;
1347 } 1347 }
1348 } 1348 }

mercurial