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 } |
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 } |