diff -r 241db665477a -r ea50585ec9d9 dav/sync.c --- a/dav/sync.c Sun Jun 10 13:24:30 2018 +0200 +++ b/dav/sync.c Mon Jun 11 19:31:03 2018 +0200 @@ -259,6 +259,12 @@ } static int res_matches_tags(DavResource *res, SyncTagFilter *tagfilter) { + int scope = res->iscollection ? + DAV_SYNC_TAGFILTER_SCOPE_COLLECTION + : DAV_SYNC_TAGFILTER_SCOPE_RESOURCE; + if(tagfilter->scope & scope != scope) { + return 1; + } if(!tagfilter || tagfilter->mode == DAV_SYNC_TAGFILTER_OFF) { return 1; } @@ -279,6 +285,12 @@ LocalResource *res, SyncTagFilter *tagfilter) { + int scope = res->isdirectory ? + DAV_SYNC_TAGFILTER_SCOPE_COLLECTION + : DAV_SYNC_TAGFILTER_SCOPE_RESOURCE; + if(tagfilter->scope & scope != scope) { + return 1; + } if(!tagfilter || tagfilter->mode == DAV_SYNC_TAGFILTER_OFF) { return 1; } @@ -346,7 +358,8 @@ return -1; } // if there are syntax errors in the command line, fail asap. - SyncTagFilter* tagfilter = parse_tagfilter_string(cmd_getoption(a, "tags")); + SyncTagFilter* tagfilter = parse_tagfilter_string( + cmd_getoption(a, "tags"), DAV_SYNC_TAGFILTER_SCOPE_RESOURCE); if (!tagfilter) { fprintf(stderr, "Malformed tag filter\n"); return -1; @@ -917,7 +930,8 @@ } // if there are syntax errors in the command line, fail asap. - SyncTagFilter* tagfilter = parse_tagfilter_string(cmd_getoption(a, "tags")); + SyncTagFilter* tagfilter = parse_tagfilter_string( + cmd_getoption(a, "tags"), DAV_SYNC_TAGFILTER_SCOPE_RESOURCE); if (!tagfilter) { fprintf(stderr, "Malformed tag filter\n"); return -1;