Subject: Re: [PATCH v2] merge-recursive: restore accidentally dropped setting of path

From: SZEDER Gábor <[email-masked]>
Date: Tue, 4 Jun 2019 23:07:54 +0200

On Tue, Jun 04, 2019 at 01:27:50PM -0700, Elijah Newren wrote:
> Changes since v1:
>   * Minor tweaks suggested by SZEDER

> diff --git a/t/t6042-merge-rename-corner-cases.sh b/t/t6042-merge-rename-corner-cases.sh
> index 09dfa8bd92..3fe2cd91dc 100755
> --- a/t/t6042-merge-rename-corner-cases.sh
> +++ b/t/t6042-merge-rename-corner-cases.sh
> @@ -411,6 +411,124 @@ test_expect_success 'disappearing dir in rename/directory conflict handled' '
>  	)
>  '
>  
> +# Test for basic rename/add-dest conflict, with rename needing content merge:
> +#   Commit O: a
> +#   Commit A: rename a->b, modifying b too
> +#   Commit B: modify a, add different b
> +
> +test_expect_success 'setup rename-with-content-merge vs. add' '
> +	test_create_repo rename-with-content-merge-and-add &&
> +	(
> +		cd rename-with-content-merge-and-add &&
> +
> +		test_seq 1 5 >a &&
> +		git add a &&
> +		git commit -m O &&
> +		git tag O &&
> +
> +		git checkout -b A O &&
> +		git mv a b &&
> +		test_seq 0 5 >b &&
> +		git add b &&
> +		git commit -m A &&
> +
> +		git checkout -b B O &&
> +		echo 6 >>a &&
> +		echo hello world >b &&
> +		git add a b &&
> +		git commit -m B
> +	)
> +'
> +
> +test_expect_success 'handle rename-with-content-merge vs. add' '
> +	(
> +		cd rename-with-content-merge-and-add &&
> +
> +		git checkout A^0 &&
> +
> +		test_must_fail git merge -s recursive B^0 >out &&
> +		test_i18ngrep "CONFLICT (rename/add)" out &&
> +
> +		git ls-files -s >out &&
> +		test_line_count = 2 out &&
> +		git ls-files -u >out &&
> +		test_line_count = 2 out &&
> +		# Also, make sure both unmerged entries are for "b"
> +		git ls-files -u b >out &&
> +		test_line_count = 2 out &&
> +		git ls-files -o >out &&
> +		test_line_count = 1 out &&
> +
> +		test_path_is_missing a &&
> +		test_path_is_file b &&
> +
> +		test_seq 0 6 >tmp &&
> +		git hash-object tmp >expect &&
> +		git rev-parse B:b >>expect &&
> +		git rev-parse >actual  \
> +			:2:b    :3:b   &&
> +		test_cmp expect actual &&
> +
> +		# Test that the two-way merge in b is as expected
> +		git cat-file -p :2:b >>ours &&
> +		git cat-file -p :3:b >>theirs &&
> +		>empty &&
> +		test_must_fail git merge-file \
> +			-L "HEAD" \
> +			-L "" \
> +			-L "B^0" \
> +			ours empty theirs &&
> +		test_cmp ours b

This one is OK.

> +	)
> +'
> +
> +test_expect_success 'handle rename-with-content-merge vs. add, merge other way' '
> +	(
> +		cd rename-with-content-merge-and-add &&
> +
> +		git reset --hard &&
> +		git clean -fdx &&
> +
> +		git checkout B^0 &&
> +
> +		test_must_fail git merge -s recursive A^0 >out &&
> +		test_i18ngrep "CONFLICT (rename/add)" out &&
> +
> +		git ls-files -s >out &&
> +		test_line_count = 2 out &&
> +		git ls-files -u >out &&
> +		test_line_count = 2 out &&
> +		# Also, make sure both unmerged entries are for "b"
> +		git ls-files -u b >out &&
> +		test_line_count = 2 out &&
> +		git ls-files -o >out &&
> +		test_line_count = 1 out &&
> +
> +		test_path_is_missing a &&
> +		test_path_is_file b &&
> +
> +		test_seq 0 6 >tmp &&
> +		git rev-parse B:b >expect &&
> +		git hash-object tmp >>expect &&
> +		git rev-parse >actual  \
> +			:2:b    :3:b   &&
> +		test_cmp expect actual &&
> +
> +		# Test that the two-way merge in b is as expected
> +		git cat-file -p :2:b >>ours &&
> +		git cat-file -p :3:b >>theirs &&
> +		>empty &&
> +		test_must_fail git merge-file \
> +			-L "HEAD" \
> +			-L "" \
> +			-L "A^0" \
> +			ours empty theirs &&
> +		git hash-object b >actual &&
> +		git hash-object ours >expect &&
> +		test_cmp ours b

Here, however, you only changed what test_cmp looks at, but still kept
the two 'git hash-object' invocations, and their output will never be
looked at.

> +	)
> +'
> +
>  # Test for all kinds of things that can go wrong with rename/rename (2to1):
>  #   Commit A: new files: a & b
>  #   Commit B: rename a->c, modify b
> -- 
> 2.22.0.rc3.1.gd51cc00994
>