fetch-pack: test support excluding large blobs
authorJonathan Tan <jonathantanmy@google.com>
Fri, 8 Dec 2017 15:58:42 +0000 (15:58 +0000)
committerJunio C Hamano <gitster@pobox.com>
Fri, 8 Dec 2017 17:58:51 +0000 (09:58 -0800)
Created tests to verify fetch-pack and upload-pack support
for excluding large blobs using --filter=blobs:limit=<n>
parameter.

Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t5500-fetch-pack.sh
upload-pack.c
index 80a1a3239a64a4f551bc394ab88be500c9b5c44f..c57916b64ac670d2682e5e6654b5c770269d7460 100755 (executable)
@@ -755,4 +755,31 @@ test_expect_success 'fetching deepen' '
        )
 '
 
        )
 '
 
+test_expect_success 'filtering by size' '
+       rm -rf server client &&
+       test_create_repo server &&
+       test_commit -C server one &&
+       test_config -C server uploadpack.allowfilter 1 &&
+
+       test_create_repo client &&
+       git -C client fetch-pack --filter=blob:limit=0 ../server HEAD &&
+
+       # Ensure that object is not inadvertently fetched
+       test_must_fail git -C client cat-file -e $(git hash-object server/one.t)
+'
+
+test_expect_success 'filtering by size has no effect if support for it is not advertised' '
+       rm -rf server client &&
+       test_create_repo server &&
+       test_commit -C server one &&
+
+       test_create_repo client &&
+       git -C client fetch-pack --filter=blob:limit=0 ../server HEAD 2> err &&
+
+       # Ensure that object is fetched
+       git -C client cat-file -e $(git hash-object server/one.t) &&
+
+       test_i18ngrep "filtering not recognized by server" err
+'
+
 test_done
 test_done
index e6d38b9ca06797ab369b0f583a79ced3ecdbf128..15b66051ce9a03aabb1b57f3839235f2ad9bdfb3 100644 (file)
@@ -139,10 +139,15 @@ static void create_pack_file(void)
        if (use_include_tag)
                argv_array_push(&pack_objects.args, "--include-tag");
        if (filter_options.filter_spec) {
        if (use_include_tag)
                argv_array_push(&pack_objects.args, "--include-tag");
        if (filter_options.filter_spec) {
-               struct strbuf buf = STRBUF_INIT;
-               sq_quote_buf(&buf, filter_options.filter_spec);
-               argv_array_pushf(&pack_objects.args, "--filter=%s", buf.buf);
-               strbuf_release(&buf);
+               if (pack_objects.use_shell) {
+                       struct strbuf buf = STRBUF_INIT;
+                       sq_quote_buf(&buf, filter_options.filter_spec);
+                       argv_array_pushf(&pack_objects.args, "--filter=%s", buf.buf);
+                       strbuf_release(&buf);
+               } else {
+                       argv_array_pushf(&pack_objects.args, "--filter=%s",
+                                        filter_options.filter_spec);
+               }
        }
 
        pack_objects.in = -1;
        }
 
        pack_objects.in = -1;