1917 if(sync_mkdir(dir, res, local_res) && sn->error != DAV_METHOD_NOT_ALLOWED) { |
1917 if(sync_mkdir(dir, res, local_res) && sn->error != DAV_METHOD_NOT_ALLOWED) { |
1918 print_resource_error(sn, res->path); |
1918 print_resource_error(sn, res->path); |
1919 ret = -1; |
1919 ret = -1; |
1920 sync_error++; |
1920 sync_error++; |
1921 error = 1; |
1921 error = 1; |
1922 abort = 1; |
1922 //abort = 1; |
|
1923 } else { |
|
1924 // success |
|
1925 if(local_res->metadata_updated) { |
|
1926 sync_update_metadata(dir, sn, res, local_res); |
|
1927 } |
|
1928 |
|
1929 // remove old db entry (if it exists) |
|
1930 // and add add new entry |
|
1931 LocalResource *dbres = ucx_map_cstr_remove(db->resources, local_res->path); |
|
1932 ucx_map_cstr_put(db->resources, local_res->path, local_res); |
1923 } |
1933 } |
1924 } else if(sn->error != DAV_OK) { |
1934 } else if(sn->error != DAV_OK) { |
1925 // dav_exists() failed |
1935 // dav_exists() failed |
1926 print_resource_error(sn, local_res->path); |
1936 print_resource_error(sn, local_res->path); |
1927 ret = -1; |
1937 ret = -1; |
1928 sync_error++; |
1938 sync_error++; |
1929 error = 1; |
1939 error = 1; |
1930 abort = 1; |
1940 //abort = 1; |
1931 } |
|
1932 |
|
1933 if(local_res->metadata_updated && !abort) { |
|
1934 sync_update_metadata(dir, sn, res, local_res); |
|
1935 } |
1941 } |
1936 |
1942 |
1937 dav_resource_free(res); |
1943 dav_resource_free(res); |
1938 |
|
1939 LocalResource *dbres = ucx_map_cstr_remove(db->resources, local_res->path); |
|
1940 ucx_map_cstr_put(db->resources, local_res->path, local_res); |
|
1941 } |
1944 } |
1942 |
1945 |
1943 // copy/move files |
1946 // copy/move files |
1944 DavBool copy = TRUE; |
1947 DavBool copy = TRUE; |
1945 if(!ls_copy) { |
1948 if(!ls_copy) { |
1986 if(err) { |
1989 if(err) { |
1987 sync_error++; |
1990 sync_error++; |
1988 print_resource_error(sn, res->path); |
1991 print_resource_error(sn, res->path); |
1989 ret = -1; |
1992 ret = -1; |
1990 error = 1; |
1993 error = 1; |
1991 } |
1994 } else { |
1992 |
1995 LocalResource *dbres = ucx_map_cstr_remove(db->resources, local->path); |
1993 LocalResource *dbres = ucx_map_cstr_remove(db->resources, local->path); |
1996 ucx_map_cstr_put(db->resources, local->path, local); |
1994 ucx_map_cstr_put(db->resources, local->path, local); |
1997 } |
1995 |
1998 |
1996 if(copy && !elm->next) { |
1999 if(copy && !elm->next) { |
1997 // finished copy, begin move |
2000 // finished copy, begin move |
1998 elm->next = ls_move; |
2001 elm->next = ls_move; |
1999 copy = FALSE; |
2002 copy = FALSE; |
2003 // upload changed files |
2006 // upload changed files |
2004 ls_modified = ucx_list_concat(ls_new, ls_modified); |
2007 ls_modified = ucx_list_concat(ls_new, ls_modified); |
2005 |
2008 |
2006 for(UcxList *elm=ls_modified;elm && !sync_shutdown;elm=elm->next) { |
2009 for(UcxList *elm=ls_modified;elm && !sync_shutdown;elm=elm->next) { |
2007 LocalResource *local_res = elm->data; |
2010 LocalResource *local_res = elm->data; |
|
2011 int err = 0; |
2008 |
2012 |
2009 DavResource *res = dav_resource_new(sn, local_res->path); |
2013 DavResource *res = dav_resource_new(sn, local_res->path); |
2010 if(!res) { |
2014 if(!res) { |
2011 print_resource_error(sn, local_res->path); |
2015 print_resource_error(sn, local_res->path); |
2012 ret = -1; |
2016 ret = -1; |
2013 sync_error++; |
2017 sync_error++; |
2014 } |
|
2015 |
|
2016 int changed = remote_resource_is_changed(sn, dir, db, res, local_res); |
|
2017 if(cdt && changed) { |
|
2018 printf("conflict: %s\n", local_res->path); |
|
2019 local_res->last_modified = 0; |
|
2020 nullfree(local_res->etag); |
|
2021 local_res->etag = NULL; |
|
2022 nullfree(local_res->hash); |
|
2023 local_res->hash = NULL; |
|
2024 local_res->skipped = TRUE; |
|
2025 sync_conflict++; |
|
2026 } else { |
2018 } else { |
2027 if(local_res->link_target) { |
2019 int changed = remote_resource_is_changed(sn, dir, db, res, local_res); |
2028 printf( |
2020 if(cdt && changed) { |
2029 "link: %s -> %s\n", |
2021 printf("conflict: %s\n", local_res->path); |
2030 local_res->path, |
2022 local_res->last_modified = 0; |
2031 local_res->link_target); |
2023 nullfree(local_res->etag); |
|
2024 local_res->etag = NULL; |
|
2025 nullfree(local_res->hash); |
|
2026 local_res->hash = NULL; |
|
2027 local_res->skipped = TRUE; |
|
2028 sync_conflict++; |
2032 } else { |
2029 } else { |
2033 printf("put: %s\n", local_res->path); |
2030 if(local_res->link_target) { |
2034 } |
2031 printf( |
2035 if(sync_put_resource(dir, res, local_res, &sync_success)) { |
2032 "link: %s -> %s\n", |
2036 sync_error++; |
2033 local_res->path, |
2037 print_resource_error(sn, res->path); |
2034 local_res->link_target); |
2038 ret = -1; |
2035 } else { |
2039 error = 1; |
2036 printf("put: %s\n", local_res->path); |
|
2037 } |
|
2038 if(sync_put_resource(dir, res, local_res, &sync_success)) { |
|
2039 sync_error++; |
|
2040 print_resource_error(sn, res->path); |
|
2041 ret = -1; |
|
2042 error = 1; |
|
2043 |
|
2044 err = 1; |
|
2045 } |
|
2046 } |
|
2047 |
|
2048 if(!err) { |
|
2049 LocalResource *dbres = ucx_map_cstr_remove(db->resources, local_res->path); |
|
2050 ucx_map_cstr_put(db->resources, local_res->path, local_res); |
2040 } |
2051 } |
2041 } |
2052 } |
2042 |
2053 |
2043 dav_resource_free(res); |
2054 dav_resource_free(res); |
2044 |
|
2045 LocalResource *dbres = ucx_map_cstr_remove(db->resources, local_res->path); |
|
2046 ucx_map_cstr_put(db->resources, local_res->path, local_res); |
|
2047 //if(dbres) local_resource_free(dbres); |
|
2048 } |
2055 } |
2049 |
2056 |
2050 // metadata updates |
2057 // metadata updates |
2051 for(UcxList *elm=ls_update;elm && !sync_shutdown;elm=elm->next) { |
2058 for(UcxList *elm=ls_update;elm && !sync_shutdown;elm=elm->next) { |
2052 LocalResource *local_res = elm->data; |
2059 LocalResource *local_res = elm->data; |