This implements combining of filters. In any command which accepts the --filter flag, this patch allows specifying multiple filter flags or using the "combine:..." filter-spec form. Combining filters means that only objects which are accepted by all filters get shown or included. Compared to the RFC version of this patch set, the following notable changes and additions were made: - Simplification of the logic to execute combined filters. - Addition of test cases for existing logic and new logic. - Allowing to specify multiple --filter flags rather than requiring the combine: filter-spec form. - Require escaping a large number of reserved characters in "combine:..." filter specs in case we decide to do anything interesting with the filter language later. Thank you, Matthew DeVore (5): list-objects-filter: refactor into a context struct list-objects-filter-options: error is localizeable list-objects-filter: implement composite filters list-objects-filter-options: move error check up list-objects-filter-options: allow mult. --filter Documentation/rev-list-options.txt | 14 ++ builtin/fetch-pack.c | 5 +- builtin/rev-list.c | 5 +- contrib/completion/git-completion.bash | 2 +- fetch-pack.c | 5 +- list-objects-filter-options.c | 252 +++++++++++++++++++++-- list-objects-filter-options.h | 17 +- list-objects-filter.c | 270 ++++++++++++++++--------- list-objects-filter.h | 31 ++- list-objects.c | 45 ++--- t/t5616-partial-clone.sh | 19 ++ t/t6112-rev-list-filters-objects.sh | 193 +++++++++++++++++- transport.c | 5 +- upload-pack.c | 10 +- 14 files changed, 708 insertions(+), 165 deletions(-) -- 2.21.0