From: Jeff Hostetler <jeffh...@microsoft.com> Signed-off-by: Jeff Hostetler <jeffh...@microsoft.com> --- builtin/fetch.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-)
diff --git a/builtin/fetch.c b/builtin/fetch.c index 5f2c2ab..306c165 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -16,6 +16,7 @@ #include "connected.h" #include "argv-array.h" #include "utf8.h" +#include "object-filter.h" static const char * const builtin_fetch_usage[] = { N_("git fetch [<options>] [<repository> [<refspec>...]]"), @@ -52,6 +53,7 @@ static const char *recurse_submodules_default; static int shown_url = 0; static int refmap_alloc, refmap_nr; static const char **refmap_array; +static struct object_filter_options filter_options; static int option_parse_recurse_submodules(const struct option *opt, const char *arg, int unset) @@ -141,6 +143,14 @@ static struct option builtin_fetch_options[] = { TRANSPORT_FAMILY_IPV4), OPT_SET_INT('6', "ipv6", &family, N_("use IPv6 addresses only"), TRANSPORT_FAMILY_IPV6), + + OPT_PARSE_FILTER_OMIT_ALL_BLOBS(&filter_options), + OPT_PARSE_FILTER_OMIT_LARGE_BLOBS(&filter_options), + OPT_PARSE_FILTER_USE_SPARSE(&filter_options), + + /* OPT_PARSE_FILTER_PRINT_MANIFEST(&filter_options), */ + /* OPT_PARSE_FILTER_RELAX(&filter_options), */ + OPT_END() }; @@ -733,6 +743,14 @@ static int store_updated_refs(const char *raw_url, const char *remote_name, const char *filename = dry_run ? "/dev/null" : git_path_fetch_head(); int want_status; int summary_width = transport_summary_width(ref_map); + struct check_connected_options opt = CHECK_CONNECTED_INIT; + + /* + * Relax consistency check to allow missing blobs (presumably + * because they are exactly the set that we requested be + * omitted. + */ + opt.filter_relax = object_filter_enabled(&filter_options); fp = fopen(filename, "a"); if (!fp) @@ -744,7 +762,7 @@ static int store_updated_refs(const char *raw_url, const char *remote_name, url = xstrdup("foreign"); rm = ref_map; - if (check_connected(iterate_ref_map, &rm, NULL)) { + if (check_connected(iterate_ref_map, &rm, &opt)) { rc = error(_("%s did not send all necessary objects\n"), url); goto abort; } @@ -885,6 +903,13 @@ static int quickfetch(struct ref *ref_map) struct check_connected_options opt = CHECK_CONNECTED_INIT; /* + * Relax consistency check to allow missing blobs (presumably + * because they are exactly the set that we requested be + * omitted. + */ + opt.filter_relax = object_filter_enabled(&filter_options); + + /* * If we are deepening a shallow clone we already have these * objects reachable. Running rev-list here will return with * a good (0) exit status and we'll bypass the fetch that we -- 2.9.3