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

Reply via email to