#!/bin/sh

test_description="limiting blob downloads when merging with partial clones"
# Uses a methodology similar to
#   t6042: corner cases with renames but not criss-cross merges
#   t6036: corner cases with both renames and criss-cross merges
#   t6423: directory rename detection
#
# The setup for all of them, pictorially, is:
#
#      A
#      o
#     / \
#  O o   ?
#     \ /
#      o
#      B
#
# To help make it easier to follow the flow of tests, they have been
# divided into sections and each test will start with a quick explanation
# of what commits O, A, and B contain.
#
# Notation:
#    z/{b,c}   means  files z/b and z/c both exist
#    x/d_1     means  file x/d exists with content d1.  (Purpose of the
#                     underscore notation is to differentiate different
#                     files that might be renamed into each other's paths.)

. ./test-lib.sh
. "$TEST_DIRECTORY"/lib-merge.sh

test_setup_repo () {
	test -d server && return
	test_create_repo server &&
	(
		cd server &&

		git config uploadpack.allowfilter 1 &&
		git config uploadpack.allowanysha1inwant 1 &&

		mkdir -p general &&
		test_seq 2 9 >general/leap1 &&
		cp general/leap1 general/leap2 &&
		echo leap2 >>general/leap2 &&

		mkdir -p basename &&
		cp general/leap1 basename/numbers &&
		cp general/leap1 basename/sequence &&
		cp general/leap1 basename/values &&
		echo numbers >>basename/numbers &&
		echo sequence >>basename/sequence &&
		echo values >>basename/values &&

		mkdir -p dir/unchanged &&
		mkdir -p dir/subdir/tweaked &&
		echo a >dir/subdir/a &&
		echo b >dir/subdir/b &&
		echo c >dir/subdir/c &&
		echo d >dir/subdir/d &&
		echo e >dir/subdir/e &&
		cp general/leap1 dir/subdir/Makefile &&
		echo toplevel makefile >>dir/subdir/Makefile &&
		echo f >dir/subdir/tweaked/f &&
		echo g >dir/subdir/tweaked/g &&
		echo h >dir/subdir/tweaked/h &&
		echo subdirectory makefile >dir/subdir/tweaked/Makefile &&
		for i in $(test_seq 1 88)
		do
			echo content $i >dir/unchanged/file_$i
		done &&
		git add . &&
		git commit -m "O" &&

		git branch O &&
		git branch A &&
		git branch B-single &&
		git branch B-dir &&
		git branch B-many &&

		git switch A &&

		git rm general/leap* &&
		mkdir general/ &&
		test_seq 1 9 >general/jump1 &&
		cp general/jump1 general/jump2 &&
		echo leap2 >>general/jump2 &&

		rm basename/numbers basename/sequence basename/values &&
		mkdir -p basename/subdir/
		cp general/jump1 basename/subdir/numbers &&
		cp general/jump1 basename/subdir/sequence &&
		cp general/jump1 basename/subdir/values &&
		echo numbers >>basename/subdir/numbers &&
		echo sequence >>basename/subdir/sequence &&
		echo values >>basename/subdir/values &&

		git rm dir/subdir/tweaked/f &&
		echo more >>dir/subdir/e &&
		echo more >>dir/subdir/Makefile &&
		echo more >>dir/subdir/tweaked/Makefile &&
		mkdir dir/subdir/newsubdir &&
		echo rust code >dir/subdir/newsubdir/newfile.rs &&
		git mv dir/subdir/e dir/subdir/newsubdir/ &&
		git mv dir folder &&
		git add . &&
		git commit -m "A" &&

		git switch B-single &&
		echo new first line >dir/subdir/Makefile &&
		cat general/leap1 >>dir/subdir/Makefile &&
		echo toplevel makefile >>dir/subdir/Makefile &&
		echo perl code >general/newfile.pl &&
		git add . &&
		git commit -m "B-single" &&

		git switch B-dir &&
		echo java code >dir/subdir/newfile.java &&
		echo scala code >dir/subdir/newfile.scala &&
		echo groovy code >dir/subdir/newfile.groovy &&
		git add . &&
		git commit -m "B-dir" &&

		git switch B-many &&
		test_seq 2 10 >general/leap1 &&
		rm general/leap2 &&
		cp general/leap1 general/leap2 &&
		echo leap2 >>general/leap2 &&

		rm basename/numbers basename/sequence basename/values &&
		mkdir -p basename/subdir/
		cp general/leap1 basename/subdir/numbers &&
		cp general/leap1 basename/subdir/sequence &&
		cp general/leap1 basename/subdir/values &&
		echo numbers >>basename/subdir/numbers &&
		echo sequence >>basename/subdir/sequence &&
		echo values >>basename/subdir/values &&

		mkdir dir/subdir/newsubdir/ &&
		echo c code >dir/subdir/newfile.c &&
		echo python code >dir/subdir/newsubdir/newfile.py &&
		git add . &&
		git commit -m "B-many" &&

		git switch A
	)
}

# Testcase: Objects downloaded for single relevant rename
#   Commit O:
#              general/{leap1_O, leap2_O}
#              basename/{numbers_O, sequence_O, values_O}
#              dir/subdir/{a,b,c,d,e_O,Makefile_TOP_O}
#              dir/subdir/tweaked/{f,g,h,Makefile_SUB_O}
#              dir/unchanged/<LOTS OF FILES>
#   Commit A:
#     (Rename leap->jump, rename basename/ -> basename/subdir/, rename dir/
#      -> folder/, move e into newsubdir, add newfile.rs, remove f, modify
#      both both Makefiles and jumps)
#              general/{jump1_A, jump2_A}
#              basename/subdir/{numbers_A, sequence_A, values_A}
#              folder/subdir/{a,b,c,d,Makefile_TOP_A}
#              folder/subdir/newsubdir/{e_A,newfile.rs}
#              folder/subdir/tweaked/{g,h,Makefile_SUB_A}
#              folder/unchanged/<LOTS OF FILES>
#   Commit B(-single):
#     (add newfile.pl, tweak Makefile_TOP)
#              general/{leap1_O, leap2_O,newfile.pl}
#              basename/{numbers_O, sequence_O, values_O}
#              dir/{a,b,c,d,e_O,Makefile_TOP_B}
#              dir/tweaked/{f,g,h,Makefile_SUB_O}
#              dir/unchanged/<LOTS OF FILES>
#   Expected:
#              general/{jump1_A, jump2_A,newfile.pl}
#              basename/subdir/{numbers_A, sequence_A, values_A}
#              folder/subdir/{a,b,c,d,Makefile_TOP_Merged}
#              folder/subdir/newsubdir/{e_A,newfile.rs}
#              folder/subdir/tweaked/{g,h,Makefile_SUB_A}
#              folder/unchanged/<LOTS OF FILES>
#
# Objects that need to be fetched:
#   Rename detection:
#     Side1 (O->A):
#       Basename-matches rename detection only needs to fetch these objects:
#         Makefile_TOP_O, Makefile_TOP_A
#         (Despite many renames, all others are content irrelevant.  They
#          are also location irrelevant because newfile.rs was added on
#          the side doing the directory rename, and newfile.pl was added to
#          a directory that was not renamed on either side.)
#       General rename detection only needs to fetch these objects:
#         <None>
#          (Even though newfile.rs, jump[12], basename/subdir/*, and e
#          could all be used as destinations in rename detection, the
#          basename detection for Makefile matches up all relevant
#          sources, so these other files never end up needing to be
#          used)
#     Side2 (O->B):
#       Basename-matches rename detection only needs to fetch these objects:
#         <None>
#         (there are no deleted files, so no possible sources)
#       General rename detection only needs to fetch these objects:
#         <None>
#         (there are no deleted files, so no possible sources)
#   Merge:
#     3-way content merge needs to grab these objects:
#       Makefile_TOP_B
#   Nothing else needs to fetch objects
#
#   Summary: 2 fetches (1 for 2 objects, 1 for 1 object)
#
test_expect_merge_algorithm failure success 'Objects downloaded for single relevant rename' '
	test_setup_repo &&
	git clone --sparse --filter=blob:none "file://$(pwd)/server" objects-single &&
	(
		cd objects-single &&

		git rev-list --objects --all --missing=print |
			grep "^?" | sort >missing-objects-before &&

		git checkout -q origin/A &&

		GIT_TRACE2_PERF="$(pwd)/trace.output" git \
			-c merge.directoryRenames=true merge --no-stat \
			--no-progress origin/B-single &&

		# Check the number of objects we reported we would fetch
		cat >expect <<-EOF &&
		fetch_count:2
		fetch_count:1
		EOF
		grep fetch_count trace.output | cut -d "|" -f 9 | tr -d " ." >actual &&
		test_cmp expect actual &&

		# Check the number of fetch commands exec-ed
		grep d0.*fetch.negotiationAlgorithm trace.output >fetches &&
		test_line_count = 2 fetches &&

		git rev-list --objects --all --missing=print |
			grep "^?" | sort >missing-objects-after &&
		comm -2 -3 missing-objects-before missing-objects-after >old &&
		comm -1 -3 missing-objects-before missing-objects-after >new &&
		# No new missing objects
		test_must_be_empty new &&
		# Fetched 2 + 1 = 3 objects
		test_line_count = 3 old
	)
'

# Testcase: Objects downloaded for directory rename
#   Commit O:
#              general/{leap1_O, leap2_O}
#              basename/{numbers_O, sequence_O, values_O}
#              dir/subdir/{a,b,c,d,e_O,Makefile_TOP_O}
#              dir/subdir/tweaked/{f,g,h,Makefile_SUB_O}
#              dir/unchanged/<LOTS OF FILES>
#   Commit A:
#     (Rename leap->jump, rename basename/ -> basename/subdir/, rename dir/ ->
#      folder/, move e into newsubdir, add newfile.rs, remove f, modify
#      both Makefiles and jumps)
#              general/{jump1_A, jump2_A}
#              basename/subdir/{numbers_A, sequence_A, values_A}
#              folder/subdir/{a,b,c,d,Makefile_TOP_A}
#              folder/subdir/newsubdir/{e_A,newfile.rs}
#              folder/subdir/tweaked/{g,h,Makefile_SUB_A}
#              folder/unchanged/<LOTS OF FILES>
#   Commit B(-dir):
#     (add dir/subdir/newfile.{java,scala,groovy}
#              general/{leap1_O, leap2_O}
#              basename/{numbers_O, sequence_O, values_O}
#              dir/subdir/{a,b,c,d,e_O,Makefile_TOP_O,
#                          newfile.java,newfile.scala,newfile.groovy}
#              dir/subdir/tweaked/{f,g,h,Makefile_SUB_O}
#              dir/unchanged/<LOTS OF FILES>
#   Expected:
#              general/{jump1_A, jump2_A}
#              basename/subdir/{numbers_A, sequence_A, values_A}
#              folder/subdir/{a,b,c,d,Makefile_TOP_A,
#                             newfile.java,newfile.scala,newfile.groovy}
#              folder/subdir/newsubdir/{e_A,newfile.rs}
#              folder/subdir/tweaked/{g,h,Makefile_SUB_A}
#              folder/unchanged/<LOTS OF FILES>
#
# Objects that need to be fetched:
#   Makefile_TOP_O, Makefile_TOP_A
#   Makefile_SUB_O, Makefile_SUB_A
#   e_O, e_A
#   * Despite A's rename of jump->leap, those renames are irrelevant.
#   * Despite A's rename of basename/ -> basename/subdir/, those renames are
#     irrelevant.
#   * Because of A's rename of dir/ -> folder/ and B-dir's addition of
#     newfile.* into dir/subdir/, we need to determine directory renames.
#     (Technically, there are enough exact renames to determine directory
#      rename detection, but the current implementation always does
#      basename searching before directory rename detection.  Running it
#      also before basename searching would mean doing directory rename
#      detection twice, but it's a bit expensive to do that and cases like
#      this are not all that common.)
#   Summary: 1 fetches for 6 objects
#
test_expect_merge_algorithm failure success 'Objects downloaded when a directory rename triggered' '
	test_setup_repo &&
	git clone --sparse --filter=blob:none "file://$(pwd)/server" objects-dir &&
	(
		cd objects-dir &&

		git rev-list --objects --all --missing=print |
			grep "^?" | sort >missing-objects-before &&

		git checkout -q origin/A &&

		GIT_TRACE2_PERF="$(pwd)/trace.output" git \
			-c merge.directoryRenames=true merge --no-stat \
			--no-progress origin/B-dir &&

		# Check the number of objects we reported we would fetch
		cat >expect <<-EOF &&
		fetch_count:6
		EOF
		grep fetch_count trace.output | cut -d "|" -f 9 | tr -d " ." >actual &&
		test_cmp expect actual &&

		# Check the number of fetch commands exec-ed
		grep d0.*fetch.negotiationAlgorithm trace.output >fetches &&
		test_line_count = 1 fetches &&

		git rev-list --objects --all --missing=print |
			grep "^?" | sort >missing-objects-after &&
		comm -2 -3 missing-objects-before missing-objects-after >old &&
		comm -1 -3 missing-objects-before missing-objects-after >new &&
		# No new missing objects
		test_must_be_empty new &&
		# Fetched 6 objects
		test_line_count = 6 old
	)
'

# Testcase: Objects downloaded with lots of renames and modifications
#   Commit O:
#              general/{leap1_O, leap2_O}
#              basename/{numbers_O, sequence_O, values_O}
#              dir/subdir/{a,b,c,d,e_O,Makefile_TOP_O}
#              dir/subdir/tweaked/{f,g,h,Makefile_SUB_O}
#              dir/unchanged/<LOTS OF FILES>
#   Commit A:
#     (Rename leap->jump, rename basename/ -> basename/subdir/, rename dir/
#      -> folder/, move e into newsubdir, add newfile.rs, remove f, modify
#      both both Makefiles and jumps)
#              general/{jump1_A, jump2_A}
#              basename/subdir/{numbers_A, sequence_A, values_A}
#              folder/subdir/{a,b,c,d,Makefile_TOP_A}
#              folder/subdir/newsubdir/{e_A,newfile.rs}
#              folder/subdir/tweaked/{g,h,Makefile_SUB_A}
#              folder/unchanged/<LOTS OF FILES>
#   Commit B(-minimal):
#     (modify both leaps, rename basename/ -> basename/subdir/, add
#      newfile.{c,py})
#              general/{leap1_B, leap2_B}
#              basename/subdir/{numbers_B, sequence_B, values_B}
#              dir/{a,b,c,d,e_O,Makefile_TOP_O,newfile.c}
#              dir/tweaked/{f,g,h,Makefile_SUB_O,newfile.py}
#              dir/unchanged/<LOTS OF FILES>
#   Expected:
#              general/{jump1_Merged, jump2_Merged}
#              basename/subdir/{numbers_Merged, sequence_Merged, values_Merged}
#              folder/subdir/{a,b,c,d,Makefile_TOP_A,newfile.c}
#              folder/subdir/newsubdir/e_A
#              folder/subdir/tweaked/{g,h,Makefile_SUB_A,newfile.py}
#              folder/unchanged/<LOTS OF FILES>
#
# Objects that need to be fetched:
#   Rename detection:
#     Side1 (O->A):
#       Basename-matches rename detection only needs to fetch these objects:
#         numbers_O, numbers_A
#         sequence_O, sequence_A
#         values_O, values_A
#         Makefile_TOP_O, Makefile_TOP_A
#         Makefile_SUB_O, Makefile_SUB_A
#         e_O, e_A
#       General rename detection only needs to fetch these objects:
#         leap1_O, leap2_O
#         jump1_A, jump2_A, newfile.rs
#         (only need remaining relevant sources, but any relevant sources need
#          to be matched against all possible unpaired destinations)
#     Side2 (O->B):
#       Basename-matches rename detection only needs to fetch these objects:
#         numbers_B
#         sequence_B
#         values_B
#       (because numbers_O, sequence_O, and values_O already fetched above)
#       General rename detection only needs to fetch these objects:
#         <None>
#   Merge:
#     3-way content merge needs to grab these objects:
#       leap1_B
#       leap2_B
#   Nothing else needs to fetch objects
#
#   Summary: 4 fetches (1 for 6 objects, 1 for 8, 1 for 3, 1 for 2)
#
test_expect_merge_algorithm failure success 'Objects downloaded with lots of renames and modifications' '
	test_setup_repo &&
	git clone --sparse --filter=blob:none "file://$(pwd)/server" objects-many &&
	(
		cd objects-many &&

		git rev-list --objects --all --missing=print |
			grep "^?" | sort >missing-objects-before &&

		git checkout -q origin/A &&

		GIT_TRACE2_PERF="$(pwd)/trace.output" git \
			-c merge.directoryRenames=true merge --no-stat \
			--no-progress origin/B-many &&

		# Check the number of objects we reported we would fetch
		cat >expect <<-EOF &&
		fetch_count:12
		fetch_count:5
		fetch_count:3
		fetch_count:2
		EOF
		grep fetch_count trace.output | cut -d "|" -f 9 | tr -d " ." >actual &&
		test_cmp expect actual &&

		# Check the number of fetch commands exec-ed
		grep d0.*fetch.negotiationAlgorithm trace.output >fetches &&
		test_line_count = 4 fetches &&

		git rev-list --objects --all --missing=print |
			grep "^?" | sort >missing-objects-after &&
		comm -2 -3 missing-objects-before missing-objects-after >old &&
		comm -1 -3 missing-objects-before missing-objects-after >new &&
		# No new missing objects
		test_must_be_empty new &&
		# Fetched 12 + 5 + 3 + 2 = 22 objects
		test_line_count = 22 old
	)
'

test_done
