diff -r 26998dc980f9 -r 10305c5b0a16 dav/sync.c --- a/dav/sync.c Wed May 30 16:06:03 2018 +0200 +++ b/dav/sync.c Wed May 30 16:25:57 2018 +0200 @@ -255,6 +255,19 @@ return 1; } +SyncTagFilter* parse_tagfilter_string(const char* filterstring) { + if (!filterstring) { + return NULL; + } + + SyncTagFilter* tagfilter = malloc(sizeof(SyncTagFilter)); + tagfilter->mode = DAV_SYNC_TAGFILTER_AND; + tagfilter->subfilter_count = 0; + tagfilter->tags = parse_csv_taglist(filterstring, strlen(filterstring)); + + return tagfilter; +} + static int matches_tags_and(UcxList *dav_tags, UcxList *tags, int ignorecase) { UCX_FOREACH(e, tags) { if (!ucx_list_contains(dav_tags, e->data, @@ -519,16 +532,8 @@ continue; } - // TODO: remove this fake and let the cmd parser store the filter - SyncTagFilter tagfilter; - tagfilter.mode = DAV_SYNC_TAGFILTER_AND; - tagfilter.subfilter_count = 0; - tagfilter.tags = NULL; - char *tags_str = cmd_getoption(a, "tags"); - if(tags_str) { - tagfilter.tags = parse_csv_taglist(tags_str, strlen(tags_str)); - } - if (!res_matches_tags(res, &tagfilter)) { + if (!res_matches_tags(res, + parse_tagfilter_string(cmd_getoption(a, "tags")))) { if(!cmd_getoption(a, "remove")) { localres_keep(db, res->path); }