From: Jeff Hostetler <jeffhost@xxxxxxxxxxxxx> Signed-off-by: Jeff Hostetler <jeffhost@xxxxxxxxxxxxx> --- Documentation/gitremote-helpers.txt | 4 ++++ remote-curl.c | 11 +++++++++++ 2 files changed, 15 insertions(+) diff --git a/Documentation/gitremote-helpers.txt b/Documentation/gitremote-helpers.txt index 1ceab89..4bb11bf 100644 --- a/Documentation/gitremote-helpers.txt +++ b/Documentation/gitremote-helpers.txt @@ -472,6 +472,10 @@ set by Git if the remote helper has the 'option' capability. 'option no-haves' {'true'|'false'}:: Do not send "have" lines. +'option filter <filter-spec>':: + An object filter specification for partial clone or fetch + as described in rev-list. + SEE ALSO -------- linkgit:git-remote[1] diff --git a/remote-curl.c b/remote-curl.c index 34a81b8..c2f28ab 100644 --- a/remote-curl.c +++ b/remote-curl.c @@ -13,6 +13,7 @@ #include "credential.h" #include "sha1-array.h" #include "send-pack.h" +#include "list-objects-filter-options.h" static struct remote *remote; /* always ends with a trailing slash */ @@ -22,6 +23,7 @@ struct options { int verbosity; unsigned long depth; char *deepen_since; + char *partial_clone_filter; struct string_list deepen_not; struct string_list push_options; unsigned progress : 1, @@ -165,6 +167,9 @@ static int set_option(const char *name, const char *value) } else if (!strcmp(name, "no-haves")) { options.no_haves = 1; return 0; + } else if (!strcmp(name, "filter")) { + options.partial_clone_filter = xstrdup(value); + return 0; } else { return 1 /* unsupported */; } @@ -834,6 +839,12 @@ static int fetch_git(struct discovery *heads, argv_array_push(&args, "--from-promisor"); if (options.no_haves) argv_array_push(&args, "--no-haves"); + if (options.partial_clone_filter) { + struct list_objects_filter_options filter_options; + parse_list_objects_filter(&filter_options, + options.partial_clone_filter); + list_objects_filter_push_arg(&args, &filter_options); + } argv_array_push(&args, url.buf); for (i = 0; i < nr_heads; i++) { -- 2.9.3