# HG changeset patch # User Olaf Wintermann # Date 1686598831 -7200 # Node ID ae759e4be591b32dcee063ff77ac6b6aa4b31a93 # Parent a3e35cae098b8d9b24e5fbe3d00bea5dc5685f6a fix dav-sync push not deleting collections in the right order diff -r a3e35cae098b -r ae759e4be591 dav/sync.c --- a/dav/sync.c Mon Jun 12 21:17:37 2023 +0200 +++ b/dav/sync.c Mon Jun 12 21:40:31 2023 +0200 @@ -476,6 +476,14 @@ return ret; } +static int localres_cmp_path(LocalResource *a, LocalResource *b, void *n) { + return strcmp(a->path, b->path); +} + +static int localres_cmp_path_desc(LocalResource *a, LocalResource *b, void *n) { + return -strcmp(a->path, b->path); +} + static DavSession* create_session(CmdArgs *a, DavContext *ctx, Repository *repo, char *collection) { int flags = get_repository_flags(repo); DavBool find_collection = TRUE; @@ -2419,7 +2427,8 @@ // delete all removed files cxListSort(ls_delete); - CxList *cols = cxLinkedListCreateSimple(CX_STORE_POINTERS); + CxList *cols = cxLinkedListCreate(cxDefaultAllocator, (cx_compare_func)localres_cmp_path_desc, CX_STORE_POINTERS); + CxList *cols_del = cols; // remember pointer for cleanup CxList *col_list = cols; CxList *deletelist = ls_delete; for(int i=0;i<2;i++) { @@ -2445,9 +2454,12 @@ //local_resource_free(dbres); } } + cxListSort(cols); deletelist = cols; col_list = NULL; - } + } + + cxListDestroy(cols_del); // unlock repository if(locked) { @@ -2490,10 +2502,6 @@ return ret; } -static int localres_cmp_path(LocalResource *a, LocalResource *b, void *n) { - return strcmp(a->path, b->path); -} - int cmd_restore(CmdArgs *a) { char *syncdir = cmd_getoption(a, "syncdir");