Subject: Re: [PATCH v10 32/36] t6046: testcases checking whether updates can be skipped in a merge

From: SZEDER Gábor <[email-masked]>
Date: Thu, 19 Apr 2018 22:26:41 +0200

Just a couple of minor things:

> +###########################################################################
> +# SECTION 1: Cases involving no renames (one side has subset of changes of
> +#            the other side)
> +###########################################################################
> +
> +# Testcase 1a, Changes on A, subset of changes on B
> +#   Commit O: b_1
> +#   Commit A: b_2
> +#   Commit B: b_3
> +#   Expected: b_2
> +
> +test_expect_success '1a-setup: Modify(A)/Modify(B), change on B subset of A' '
> +	test_create_repo 1a &&
> +	(
> +		cd 1a &&
> +
> +		test_write_lines 1 2 3 4 5 6 7 8 9 10 >b

Broken && chain.

<...>

> +###########################################################################
> +# SECTION 2: Cases involving basic renames
> +###########################################################################
> +
> +# Testcase 2a, Changes on A, rename on B
> +#   Commit O: b_1
> +#   Commit A: b_2
> +#   Commit B: c_1
> +#   Expected: c_2
> +
> +test_expect_success '2a-setup: Modify(A)/rename(B)' '
> +	test_create_repo 2a &&
> +	(
> +		cd 2a &&
> +
> +		test_seq 1 10 >b

Broken && chain.

> +		git add b &&
> +		test_tick &&
> +		git commit -m "O" &&
> +
> +		git branch O &&
> +		git branch A &&
> +		git branch B &&
> +
> +		git checkout A &&
> +		test_seq 1 11 > b &&

Nit: space between redirection operator and filename.

<...>

> +# Testcase 2b, Changed and renamed on A, subset of changes on B
> +#   Commit O: b_1
> +#   Commit A: c_2
> +#   Commit B: b_3
> +#   Expected: c_2
> +
> +test_expect_success '2b-setup: Rename+Mod(A)/Mod(B), B mods subset of A' '
> +	test_create_repo 2b &&
> +	(
> +		cd 2b &&
> +
> +		test_write_lines 1 2 3 4 5 6 7 8 9 10 >b

Broken && chain.

<...>

> +# Testcase 2c, Changes on A, rename on B
> +#   Commit O: b_1
> +#   Commit A: b_2, c_3
> +#   Commit B: c_1
> +#   Expected: rename/add conflict c_2 vs c_3
> +#
> +#   NOTE: Since A modified b_1->b_2, and B renamed b_1->c_1, the threeway
> +#         merge of those files should result in c_2.  We then should have a
> +#         rename/add conflict between c_2 and c_3.  However, if we note in
> +#         merge_content() that A had the right contents (b_2 has same
> +#         contents as c_2, just at a different name), and that A had the
> +#         right path present (c_3 existed) and thus decides that it can
> +#         skip the update, then we're in trouble.  This test verifies we do
> +#         not make that particular mistake.
> +
> +test_expect_success '2c-setup: Modify b & add c VS rename b->c' '
> +	test_create_repo 2c &&
> +	(
> +		cd 2c &&
> +
> +		test_seq 1 10 >b

Broken && chain.

<...>

> +###########################################################################
> +# SECTION 3: Cases involving directory renames
> +#
> +# NOTE:
> +#   Directory renames only apply when one side renames a directory, and the
> +#   other side adds or renames a path into that directory.  Applying the
> +#   directory rename to that new path creates a new pathname that didn't
> +#   exist on either side of history.  Thus, it is impossible for the
> +#   merge contents to already be at the right path, so all of these checks
> +#   exist just to make sure that updates are not skipped.
> +###########################################################################
> +
> +# Testcase 3a, Change + rename into dir foo on A, dir rename foo->bar on B
> +#   Commit O: bq_1, foo/whatever
> +#   Commit A: foo/{bq_2, whatever}
> +#   Commit B: bq_1, bar/whatever
> +#   Expected: bar/{bq_2, whatever}
> +
> +test_expect_success '3a-setup: bq_1->foo/bq_2 on A, foo/->bar/ on B' '
> +	test_create_repo 3a &&
> +	(
> +		cd 3a &&
> +
> +		mkdir foo &&
> +		test_seq 1 10 >bq &&
> +		test_write_lines a b c d e f g h i j k >foo/whatever &&
> +		git add bq foo/whatever &&
> +		test_tick &&
> +		git commit -m "O" &&
> +
> +		git branch O &&
> +		git branch A &&
> +		git branch B &&
> +
> +		git checkout A &&
> +		test_seq 1 11 > bq &&

Space between redirection operator and filename.

<...>

> +# Testcase 3b, rename into dir foo on A, dir rename foo->bar + change on B
> +#   Commit O: bq_1, foo/whatever
> +#   Commit A: foo/{bq_1, whatever}
> +#   Commit B: bq_2, bar/whatever
> +#   Expected: bar/{bq_2, whatever}
> +
> +test_expect_success '3b-setup: bq_1->foo/bq_2 on A, foo/->bar/ on B' '
> +	test_create_repo 3b &&
> +	(
> +		cd 3b &&
> +
> +		mkdir foo &&
> +		test_seq 1 10 >bq &&
> +		test_write_lines a b c d e f g h i j k >foo/whatever &&
> +		git add bq foo/whatever &&
> +		test_tick &&
> +		git commit -m "O" &&
> +
> +		git branch O &&
> +		git branch A &&
> +		git branch B &&
> +
> +		git checkout A &&
> +		git mv bq foo/ &&
> +		test_tick &&
> +		git commit -m "A" &&
> +
> +		git checkout B &&
> +		test_seq 1 11 > bq &&

Space between redirection operator and filename.

<...>

> +###########################################################################
> +# SECTION 4: Cases involving dirty changes
> +###########################################################################
> +
> +# Testcase 4a, Changed on A, subset of changes on B, locally modified
> +#   Commit O: b_1
> +#   Commit A: b_2
> +#   Commit B: b_3
> +#   Working copy: b_4
> +#   Expected: b_2 for merge, b_4 in working copy
> +
> +test_expect_success '4a-setup: Change on A, change on B subset of A, dirty mods present' '
> +	test_create_repo 4a &&
> +	(
> +		cd 4a &&
> +
> +		test_write_lines 1 2 3 4 5 6 7 8 9 10 >b

Broken && chain.

<...>

> +# Testcase 4b, Changed+renamed on A, subset of changes on B, locally modified
> +#   Commit O: b_1
> +#   Commit A: c_2
> +#   Commit B: b_3
> +#   Working copy: c_4
> +#   Expected: c_2
> +
> +test_expect_success '4b-setup: Rename+Mod(A)/Mod(B), change on B subset of A, dirty mods present' '
> +	test_create_repo 4b &&
> +	(
> +		cd 4b &&
> +
> +		test_write_lines 1 2 3 4 5 6 7 8 9 10 >b

Broken && chain.