fetch-pack: test support excluding large blobs

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>

Jonathan Tan committed Dec 8, 2017 at 15:58 UTC 0b6069fe0a1e694d632e54a43fc6e546e83edad6
2 files changed +36 -4
t/t5500-fetch-pack.sh
+27
@@ -755,4 +755,31 @@ test_expect_success 'fetching deepen' '
755 )
756 '
757
758 +test_expect_success 'filtering by size' '
759 + rm -rf server client &&
760 + test_create_repo server &&
761 + test_commit -C server one &&
762 + test_config -C server uploadpack.allowfilter 1 &&
763 +
764 + test_create_repo client &&
765 + git -C client fetch-pack --filter=blob:limit=0 ../server HEAD &&
766 +
767 + # Ensure that object is not inadvertently fetched
768 + test_must_fail git -C client cat-file -e $(git hash-object server/one.t)
769 +'
770 +
771 +test_expect_success 'filtering by size has no effect if support for it is not advertised' '
772 + rm -rf server client &&
773 + test_create_repo server &&
774 + test_commit -C server one &&
775 +
776 + test_create_repo client &&
777 + git -C client fetch-pack --filter=blob:limit=0 ../server HEAD 2> err &&
778 +
779 + # Ensure that object is fetched
780 + git -C client cat-file -e $(git hash-object server/one.t) &&
781 +
782 + test_i18ngrep "filtering not recognized by server" err
783 +'
784 +
785 test_done
upload-pack.c
+9 -4
@@ -139,10 +139,15 @@ static void create_pack_file(void)
139 if (use_include_tag)
140 argv_array_push(&pack_objects.args, "--include-tag");
141 if (filter_options.filter_spec) {
142 - struct strbuf buf = STRBUF_INIT;
143 - sq_quote_buf(&buf, filter_options.filter_spec);
144 - argv_array_pushf(&pack_objects.args, "--filter=%s", buf.buf);
145 - strbuf_release(&buf);
142 + if (pack_objects.use_shell) {
143 + struct strbuf buf = STRBUF_INIT;
144 + sq_quote_buf(&buf, filter_options.filter_spec);
145 + argv_array_pushf(&pack_objects.args, "--filter=%s", buf.buf);
146 + strbuf_release(&buf);
147 + } else {
148 + argv_array_pushf(&pack_objects.args, "--filter=%s",
149 + filter_options.filter_spec);
150 + }
151 }
152
153 pack_objects.in = -1;