list-objects-filter-options: allow mult. --filter
authorMatthew DeVore <matvore@google.com>
Thu, 27 Jun 2019 22:54:12 +0000 (15:54 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 28 Jun 2019 15:41:53 +0000 (08:41 -0700)
commit489fc9ee718b7c8594f17b55f090ac5292c655e1
tree07a52471c29dea788f32700918402182c98f7c6c
parentc2694952e33764818983fa247dcee72113c6ac6a
list-objects-filter-options: allow mult. --filter

Allow combining of multiple filters by simply repeating the --filter
flag. Before this patch, the user had to combine them in a single flag
somewhat awkwardly (e.g. --filter=combine:FOO+BAR), including
URL-encoding the individual filters.

To make this work, in the --filter flag parsing callback, rather than
error out when we detect that the filter_options struct is already
populated, we modify it in-place to contain the added sub-filter. The
existing sub-filter becomes the lhs of the combined filter, and the
next sub-filter becomes the rhs. We also have to URL-encode the LHS and
RHS sub-filters.

We can simplify the operation if the LHS is already a combine: filter.
In that case, we just append the URL-encoded RHS sub-filter to the LHS
spec to get the new spec.

Helped-by: Emily Shaffer <emilyshaffer@google.com>
Helped-by: Jeff Hostetler <git@jeffhostetler.com>
Helped-by: Jeff King <peff@peff.net>
Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Matthew DeVore <matvore@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/rev-list-options.txt
list-objects-filter-options.c
list-objects-filter-options.h
t/t5616-partial-clone.sh
t/t6112-rev-list-filters-objects.sh
transport.c
upload-pack.c