dav/sync.c

changeset 618
4b34d12cf211
parent 617
1c995e93bf40
child 619
1d20a6cab2e5
--- a/dav/sync.c	Sat Aug 10 19:54:37 2019 +0200
+++ b/dav/sync.c	Sat Aug 10 21:32:07 2019 +0200
@@ -459,7 +459,18 @@
     if(local) {
         local->keep = TRUE;
     }
-    
+}
+
+static int xattr_filter(const char *name, SyncDirectory *dir) {
+    // exclude tag xattr
+    if(
+        dir->tagconfig &&
+        dir->tagconfig->store == TAG_STORE_XATTR &&
+        !strcmp(dir->tagconfig->xattr_name, name))
+    {
+        return 0;
+    }
+    return 1;
 }
 
 void res2map(DavResource *root, UcxMap *map) {
@@ -2731,7 +2742,7 @@
         
         if((dir->metadata & FINFO_XATTR) == FINFO_XATTR) {
             char *path = create_local_path(dir, local_resource_path(db_res));
-            XAttributes *xattr = file_get_attributes(path);
+            XAttributes *xattr = file_get_attributes(path, (xattr_filter_func)xattr_filter, dir);
             // test if xattr are added, removed or changed
             if((db_res->xattr_hash && !xattr) ||
                (!db_res->xattr_hash && xattr) ||
@@ -2825,7 +2836,7 @@
     // currently only xattr needed
     if((dir->metadata & FINFO_XATTR) == FINFO_XATTR) {
         char *path = create_local_path(dir, local_resource_path(res));
-        XAttributes *xattr = file_get_attributes(path);
+        XAttributes *xattr = file_get_attributes(path, (xattr_filter_func)xattr_filter, dir);
         res->xattr = xattr;
         free(path);
     }
@@ -3184,7 +3195,7 @@
         }
     }
     
-    if(!ret) {
+    if(!ret && local) {
         local->tags_updated = 0;
     }
     
@@ -3247,7 +3258,7 @@
             } else {
                 if(changed) *changed = TRUE;
             }
-            if(!newhash) {
+            if(newhash) {
                 *newhash = new_hash;
             } else {
                 free(newhash);

mercurial