@@ -723,6 +723,132 @@ test_expect_success 'after fetching descendants of non-promisor commits, gc work
723723 git -C partial gc --prune=now
724724'
725725
726+ # Test clone.<url>.defaultObjectFilter config
727+
728+ test_expect_success ' setup for clone.defaultObjectFilter tests' '
729+ git init default-filter-src &&
730+ echo "small" >default-filter-src/small.txt &&
731+ git -C default-filter-src add . &&
732+ git -C default-filter-src commit -m "initial" &&
733+
734+ git clone --bare "file://$(pwd)/default-filter-src" default-filter-srv.bare &&
735+ git -C default-filter-srv.bare config --local uploadpack.allowfilter 1 &&
736+ git -C default-filter-srv.bare config --local uploadpack.allowanysha1inwant 1
737+ '
738+
739+ test_expect_success ' clone with clone.<url>.defaultObjectFilter applies filter' '
740+ test_when_finished "rm -r default-filter-clone" &&
741+ SERVER_URL="file://$(pwd)/default-filter-srv.bare" &&
742+ git -c "clone.$SERVER_URL.defaultObjectFilter=blob:limit=1k" clone \
743+ "$SERVER_URL" default-filter-clone &&
744+
745+ echo true >expect &&
746+ git -C default-filter-clone config --local remote.origin.promisor >actual &&
747+ test_cmp expect actual &&
748+
749+ echo "blob:limit=1024" >expect &&
750+ git -C default-filter-clone config --local remote.origin.partialclonefilter >actual &&
751+ test_cmp expect actual
752+ '
753+
754+ test_expect_success ' clone with --filter overrides clone.<url>.defaultObjectFilter' '
755+ test_when_finished "rm -r default-filter-override" &&
756+ SERVER_URL="file://$(pwd)/default-filter-srv.bare" &&
757+ git -c "clone.$SERVER_URL.defaultObjectFilter=blob:limit=1k" \
758+ clone --filter=blob:none "$SERVER_URL" default-filter-override &&
759+
760+ echo "blob:none" >expect &&
761+ git -C default-filter-override config --local remote.origin.partialclonefilter >actual &&
762+ test_cmp expect actual
763+ '
764+
765+ test_expect_success ' clone with clone.<url>.defaultObjectFilter=blob:none works' '
766+ test_when_finished "rm -r default-filter-blobnone" &&
767+ SERVER_URL="file://$(pwd)/default-filter-srv.bare" &&
768+ git -c "clone.$SERVER_URL.defaultObjectFilter=blob:none" clone \
769+ "$SERVER_URL" default-filter-blobnone &&
770+
771+ echo true >expect &&
772+ git -C default-filter-blobnone config --local remote.origin.promisor >actual &&
773+ test_cmp expect actual &&
774+
775+ echo "blob:none" >expect &&
776+ git -C default-filter-blobnone config --local remote.origin.partialclonefilter >actual &&
777+ test_cmp expect actual
778+ '
779+
780+ test_expect_success ' clone.<url>.defaultObjectFilter with tree:0 works' '
781+ test_when_finished "rm -r default-filter-tree0" &&
782+ SERVER_URL="file://$(pwd)/default-filter-srv.bare" &&
783+ git -c "clone.$SERVER_URL.defaultObjectFilter=tree:0" clone \
784+ "$SERVER_URL" default-filter-tree0 &&
785+
786+ echo true >expect &&
787+ git -C default-filter-tree0 config --local remote.origin.promisor >actual &&
788+ test_cmp expect actual &&
789+
790+ echo "tree:0" >expect &&
791+ git -C default-filter-tree0 config --local remote.origin.partialclonefilter >actual &&
792+ test_cmp expect actual
793+ '
794+
795+ test_expect_success ' most specific URL match wins for clone.defaultObjectFilter' '
796+ test_when_finished "rm -r default-filter-url-specific" &&
797+ SERVER_URL="file://$(pwd)/default-filter-srv.bare" &&
798+ git \
799+ -c "clone.file://.defaultObjectFilter=blob:limit=1k" \
800+ -c "clone.$SERVER_URL.defaultObjectFilter=blob:none" \
801+ clone "$SERVER_URL" default-filter-url-specific &&
802+
803+ echo "blob:none" >expect &&
804+ git -C default-filter-url-specific config --local remote.origin.partialclonefilter >actual &&
805+ test_cmp expect actual
806+ '
807+
808+ test_expect_success ' non-matching URL does not apply clone.defaultObjectFilter' '
809+ test_when_finished "rm -r default-filter-url-nomatch" &&
810+ git \
811+ -c "clone.https://other.example.com/.defaultObjectFilter=blob:none" \
812+ clone "file://$(pwd)/default-filter-srv.bare" default-filter-url-nomatch &&
813+
814+ test_must_fail git -C default-filter-url-nomatch config --local remote.origin.promisor
815+ '
816+
817+ test_expect_success ' bare clone.defaultObjectFilter applies to all clones' '
818+ test_when_finished "rm -r default-filter-bare-key" &&
819+ git -c clone.defaultObjectFilter=blob:none \
820+ clone "file://$(pwd)/default-filter-srv.bare" default-filter-bare-key &&
821+
822+ echo true >expect &&
823+ git -C default-filter-bare-key config --local remote.origin.promisor >actual &&
824+ test_cmp expect actual &&
825+
826+ echo "blob:none" >expect &&
827+ git -C default-filter-bare-key config --local remote.origin.partialclonefilter >actual &&
828+ test_cmp expect actual
829+ '
830+
831+ test_expect_success ' URL-specific clone.defaultObjectFilter overrides bare form' '
832+ test_when_finished "rm -r default-filter-url-over-bare" &&
833+ SERVER_URL="file://$(pwd)/default-filter-srv.bare" &&
834+ git \
835+ -c clone.defaultObjectFilter=blob:limit=1k \
836+ -c "clone.$SERVER_URL.defaultObjectFilter=blob:none" \
837+ clone "$SERVER_URL" default-filter-url-over-bare &&
838+
839+ echo "blob:none" >expect &&
840+ git -C default-filter-url-over-bare config --local remote.origin.partialclonefilter >actual &&
841+ test_cmp expect actual
842+ '
843+
844+ test_expect_success ' --no-filter defeats clone.defaultObjectFilter' '
845+ test_when_finished "rm -r default-filter-no-filter" &&
846+ SERVER_URL="file://$(pwd)/default-filter-srv.bare" &&
847+ git -c "clone.$SERVER_URL.defaultObjectFilter=blob:none" \
848+ clone --no-filter "$SERVER_URL" default-filter-no-filter &&
849+
850+ test_must_fail git -C default-filter-no-filter config --local remote.origin.promisor
851+ '
726852
727853. " $TEST_DIRECTORY " /lib-httpd.sh
728854start_httpd
0 commit comments