git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* [PATCH 0/5] Modernize some testcases for merge-recursive corner cases
@ 2018-05-24  7:04 Elijah Newren
  2018-05-24  7:04 ` [PATCH 1/5] t6036, t6042: use test_create_repo to keep tests independent Elijah Newren
                   ` (4 more replies)
  0 siblings, 5 replies; 11+ messages in thread
From: Elijah Newren @ 2018-05-24  7:04 UTC (permalink / raw)
  To: git; +Cc: gitster, Elijah Newren

I have about a dozen more testcases I want to add to the testsuite, in
order to document additional situations that merge-recursive handles
suboptimally.  To avoid sending an excessively long series, I am splitting
this up.  This series just aims to modernize a pair of testfiles in which
several of the new tests would most naturally belong.  This modernization
serves two purposes: (1) it makes the existing tests easier to understand,
and (2) it simplifies adding more tests to these test files.

Elijah Newren (5):
  t6036, t6042: use test_create_repo to keep tests independent
  t6036, t6042: use test_line_count instead of wc -l
  t6036, t6042: prefer test_path_is_file, test_path_is_missing
  t6036, t6042: prefer test_cmp to sequences of test
  t6036: prefer test_when_finished to manual cleanup in following test

 t/t6036-recursive-corner-cases.sh    | 991 +++++++++++++++------------
 t/t6042-merge-rename-corner-cases.sh | 968 ++++++++++++++------------
 2 files changed, 1098 insertions(+), 861 deletions(-)

-- 
2.17.0.1.gda85003413


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH 1/5] t6036, t6042: use test_create_repo to keep tests independent
  2018-05-24  7:04 [PATCH 0/5] Modernize some testcases for merge-recursive corner cases Elijah Newren
@ 2018-05-24  7:04 ` Elijah Newren
  2018-05-24  7:04 ` [PATCH 2/5] t6036, t6042: use test_line_count instead of wc -l Elijah Newren
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 11+ messages in thread
From: Elijah Newren @ 2018-05-24  7:04 UTC (permalink / raw)
  To: git; +Cc: gitster, Elijah Newren

These tests used pretty strong measures to get a clean slate:
        git rm -rf . &&
        git clean -fdqx &&
        rm -rf .git &&
        git init &&
It's easier, safer (what if a previous test has a bug and accidentally
changes into a directory outside the test path?), and allows re-inspecting
test setup later if we instead just use test_create_repo to put different
tests into separate sub-repositories.

Signed-off-by: Elijah Newren <newren@gmail.com>
---
Best viewed with `git diff -w`...

 t/t6036-recursive-corner-cases.sh    | 854 ++++++++++++++------------
 t/t6042-merge-rename-corner-cases.sh | 887 ++++++++++++++-------------
 2 files changed, 926 insertions(+), 815 deletions(-)

diff --git a/t/t6036-recursive-corner-cases.sh b/t/t6036-recursive-corner-cases.sh
index 18aa88b5c0..cfe6a99771 100755
--- a/t/t6036-recursive-corner-cases.sh
+++ b/t/t6036-recursive-corner-cases.sh
@@ -21,51 +21,60 @@ get_clean_checkout () {
 #
 
 test_expect_success 'setup basic criss-cross + rename with no modifications' '
-	ten="0 1 2 3 4 5 6 7 8 9" &&
-	for i in $ten
-	do
-		echo line $i in a sample file
-	done >one &&
-	for i in $ten
-	do
-		echo line $i in another sample file
-	done >two &&
-	git add one two &&
-	test_tick && git commit -m initial &&
-
-	git branch L1 &&
-	git checkout -b R1 &&
-	git mv one three &&
-	test_tick && git commit -m R1 &&
-
-	git checkout L1 &&
-	git mv two three &&
-	test_tick && git commit -m L1 &&
-
-	git checkout L1^0 &&
-	test_tick && git merge -s ours R1 &&
-	git tag L2 &&
-
-	git checkout R1^0 &&
-	test_tick && git merge -s ours L1 &&
-	git tag R2
+	test_create_repo basic-rename &&
+	(
+		cd basic-rename &&
+
+		ten="0 1 2 3 4 5 6 7 8 9" &&
+		for i in $ten
+		do
+			echo line $i in a sample file
+		done >one &&
+		for i in $ten
+		do
+			echo line $i in another sample file
+		done >two &&
+		git add one two &&
+		test_tick && git commit -m initial &&
+
+		git branch L1 &&
+		git checkout -b R1 &&
+		git mv one three &&
+		test_tick && git commit -m R1 &&
+
+		git checkout L1 &&
+		git mv two three &&
+		test_tick && git commit -m L1 &&
+
+		git checkout L1^0 &&
+		test_tick && git merge -s ours R1 &&
+		git tag L2 &&
+
+		git checkout R1^0 &&
+		test_tick && git merge -s ours L1 &&
+		git tag R2
+	)
 '
 
 test_expect_success 'merge simple rename+criss-cross with no modifications' '
-	git reset --hard &&
-	git checkout L2^0 &&
+	(
+		cd basic-rename &&
+
+		git reset --hard &&
+		git checkout L2^0 &&
 
-	test_must_fail git merge -s recursive R2^0 &&
+		test_must_fail git merge -s recursive R2^0 &&
 
-	test 2 = $(git ls-files -s | wc -l) &&
-	test 2 = $(git ls-files -u | wc -l) &&
-	test 2 = $(git ls-files -o | wc -l) &&
+		test 2 = $(git ls-files -s | wc -l) &&
+		test 2 = $(git ls-files -u | wc -l) &&
+		test 2 = $(git ls-files -o | wc -l) &&
 
-	test $(git rev-parse :2:three) = $(git rev-parse L2:three) &&
-	test $(git rev-parse :3:three) = $(git rev-parse R2:three) &&
+		test $(git rev-parse :2:three) = $(git rev-parse L2:three) &&
+		test $(git rev-parse :3:three) = $(git rev-parse R2:three) &&
 
-	test $(git rev-parse L2:three) = $(git hash-object three~HEAD) &&
-	test $(git rev-parse R2:three) = $(git hash-object three~R2^0)
+		test $(git rev-parse L2:three) = $(git hash-object three~HEAD) &&
+		test $(git rev-parse R2:three) = $(git hash-object three~R2^0)
+	)
 '
 
 #
@@ -81,58 +90,61 @@ test_expect_success 'merge simple rename+criss-cross with no modifications' '
 #
 
 test_expect_success 'setup criss-cross + rename merges with basic modification' '
-	git rm -rf . &&
-	git clean -fdqx &&
-	rm -rf .git &&
-	git init &&
-
-	ten="0 1 2 3 4 5 6 7 8 9" &&
-	for i in $ten
-	do
-		echo line $i in a sample file
-	done >one &&
-	for i in $ten
-	do
-		echo line $i in another sample file
-	done >two &&
-	git add one two &&
-	test_tick && git commit -m initial &&
-
-	git branch L1 &&
-	git checkout -b R1 &&
-	git mv one three &&
-	echo more >>two &&
-	git add two &&
-	test_tick && git commit -m R1 &&
-
-	git checkout L1 &&
-	git mv two three &&
-	test_tick && git commit -m L1 &&
-
-	git checkout L1^0 &&
-	test_tick && git merge -s ours R1 &&
-	git tag L2 &&
-
-	git checkout R1^0 &&
-	test_tick && git merge -s ours L1 &&
-	git tag R2
+	test_create_repo rename-modify &&
+	(
+		cd rename-modify &&
+
+		ten="0 1 2 3 4 5 6 7 8 9" &&
+		for i in $ten
+		do
+			echo line $i in a sample file
+		done >one &&
+		for i in $ten
+		do
+			echo line $i in another sample file
+		done >two &&
+		git add one two &&
+		test_tick && git commit -m initial &&
+
+		git branch L1 &&
+		git checkout -b R1 &&
+		git mv one three &&
+		echo more >>two &&
+		git add two &&
+		test_tick && git commit -m R1 &&
+
+		git checkout L1 &&
+		git mv two three &&
+		test_tick && git commit -m L1 &&
+
+		git checkout L1^0 &&
+		test_tick && git merge -s ours R1 &&
+		git tag L2 &&
+
+		git checkout R1^0 &&
+		test_tick && git merge -s ours L1 &&
+		git tag R2
+	)
 '
 
 test_expect_success 'merge criss-cross + rename merges with basic modification' '
-	git reset --hard &&
-	git checkout L2^0 &&
+	(
+		cd rename-modify &&
+
+		git checkout L2^0 &&
 
-	test_must_fail git merge -s recursive R2^0 &&
+		test_must_fail git merge -s recursive R2^0 &&
 
-	test 2 = $(git ls-files -s | wc -l) &&
-	test 2 = $(git ls-files -u | wc -l) &&
-	test 2 = $(git ls-files -o | wc -l) &&
+		test 2 = $(git ls-files -s | wc -l) &&
+		test 2 = $(git ls-files -u | wc -l) &&
+		test 2 = $(git ls-files -o | wc -l) &&
 
-	test $(git rev-parse :2:three) = $(git rev-parse L2:three) &&
-	test $(git rev-parse :3:three) = $(git rev-parse R2:three) &&
+		test $(git rev-parse :2:three) = $(git rev-parse L2:three) &&
+		test $(git rev-parse :3:three) = $(git rev-parse R2:three) &&
 
-	test $(git rev-parse L2:three) = $(git hash-object three~HEAD) &&
-	test $(git rev-parse R2:three) = $(git hash-object three~R2^0)
+		test $(git rev-parse L2:three) = $(git hash-object three~HEAD) &&
+		test $(git rev-parse R2:three) = $(git hash-object three~R2^0)
+	)
 '
 
 #
@@ -156,64 +168,67 @@ test_expect_success 'merge criss-cross + rename merges with basic modification'
 #
 
 test_expect_success 'setup differently handled merges of rename/add conflict' '
-	git rm -rf . &&
-	git clean -fdqx &&
-	rm -rf .git &&
-	git init &&
-
-	printf "0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n" >a &&
-	git add a &&
-	test_tick && git commit -m A &&
-
-	git branch B &&
-	git checkout -b C &&
-	echo 10 >>a &&
-	echo "other content" >>new_a &&
-	git add a new_a &&
-	test_tick && git commit -m C &&
-
-	git checkout B &&
-	git mv a new_a &&
-	test_tick && git commit -m B &&
-
-	git checkout B^0 &&
-	test_must_fail git merge C &&
-	git clean -f &&
-	test_tick && git commit -m D &&
-	git tag D &&
-
-	git checkout C^0 &&
-	test_must_fail git merge B &&
-	rm new_a~HEAD new_a &&
-	printf "Incorrectly merged content" >>new_a &&
-	git add -u &&
-	test_tick && git commit -m E &&
-	git tag E
+	test_create_repo rename-add &&
+	(
+		cd rename-add &&
+
+		printf "0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n" >a &&
+		git add a &&
+		test_tick && git commit -m A &&
+
+		git branch B &&
+		git checkout -b C &&
+		echo 10 >>a &&
+		echo "other content" >>new_a &&
+		git add a new_a &&
+		test_tick && git commit -m C &&
+
+		git checkout B &&
+		git mv a new_a &&
+		test_tick && git commit -m B &&
+
+		git checkout B^0 &&
+		test_must_fail git merge C &&
+		git clean -f &&
+		test_tick && git commit -m D &&
+		git tag D &&
+
+		git checkout C^0 &&
+		test_must_fail git merge B &&
+		rm new_a~HEAD new_a &&
+		printf "Incorrectly merged content" >>new_a &&
+		git add -u &&
+		test_tick && git commit -m E &&
+		git tag E
+	)
 '
 
 test_expect_success 'git detects differently handled merges conflict' '
-	git reset --hard &&
-	git checkout D^0 &&
-
-	test_must_fail git merge -s recursive E^0 &&
-
-	test 3 = $(git ls-files -s | wc -l) &&
-	test 3 = $(git ls-files -u | wc -l) &&
-	test 0 = $(git ls-files -o | wc -l) &&
-
-	test $(git rev-parse :2:new_a) = $(git rev-parse D:new_a) &&
-	test $(git rev-parse :3:new_a) = $(git rev-parse E:new_a) &&
-
-	git cat-file -p B:new_a >>merged &&
-	git cat-file -p C:new_a >>merge-me &&
-	>empty &&
-	test_must_fail git merge-file \
-		-L "Temporary merge branch 2" \
-		-L "" \
-		-L "Temporary merge branch 1" \
-		merged empty merge-me &&
-	sed -e "s/^\([<=>]\)/\1\1\1/" merged >merged-internal &&
-	test $(git rev-parse :1:new_a) = $(git hash-object merged-internal)
+	(
+		cd rename-add &&
+
+		git checkout D^0 &&
+
+		test_must_fail git merge -s recursive E^0 &&
+
+		test 3 = $(git ls-files -s | wc -l) &&
+		test 3 = $(git ls-files -u | wc -l) &&
+		test 0 = $(git ls-files -o | wc -l) &&
+
+		test $(git rev-parse :2:new_a) = $(git rev-parse D:new_a) &&
+		test $(git rev-parse :3:new_a) = $(git rev-parse E:new_a) &&
+
+		git cat-file -p B:new_a >>merged &&
+		git cat-file -p C:new_a >>merge-me &&
+		>empty &&
+		test_must_fail git merge-file \
+			-L "Temporary merge branch 2" \
+			-L "" \
+			-L "Temporary merge branch 1" \
+			merged empty merge-me &&
+		sed -e "s/^\([<=>]\)/\1\1\1/" merged >merged-internal &&
+		test $(git rev-parse :1:new_a) = $(git hash-object merged-internal)
+	)
 '
 
 #
@@ -236,67 +251,75 @@ test_expect_success 'git detects differently handled merges conflict' '
 # Merging commits D & E should result in modify/delete conflict.
 
 test_expect_success 'setup criss-cross + modify/delete resolved differently' '
-	git rm -rf . &&
-	git clean -fdqx &&
-	rm -rf .git &&
-	git init &&
-
-	echo A >file &&
-	git add file &&
-	test_tick &&
-	git commit -m A &&
-
-	git branch B &&
-	git checkout -b C &&
-	git rm file &&
-	test_tick &&
-	git commit -m C &&
-
-	git checkout B &&
-	echo B >file &&
-	git add file &&
-	test_tick &&
-	git commit -m B &&
-
-	git checkout B^0 &&
-	test_must_fail git merge C &&
-	echo B >file &&
-	git add file &&
-	test_tick &&
-	git commit -m D &&
-	git tag D &&
-
-	git checkout C^0 &&
-	test_must_fail git merge B &&
-	git rm file &&
-	test_tick &&
-	git commit -m E &&
-	git tag E
+	test_create_repo modify-delete &&
+	(
+		cd modify-delete &&
+
+		echo A >file &&
+		git add file &&
+		test_tick &&
+		git commit -m A &&
+
+		git branch B &&
+		git checkout -b C &&
+		git rm file &&
+		test_tick &&
+		git commit -m C &&
+
+		git checkout B &&
+		echo B >file &&
+		git add file &&
+		test_tick &&
+		git commit -m B &&
+
+		git checkout B^0 &&
+		test_must_fail git merge C &&
+		echo B >file &&
+		git add file &&
+		test_tick &&
+		git commit -m D &&
+		git tag D &&
+
+		git checkout C^0 &&
+		test_must_fail git merge B &&
+		git rm file &&
+		test_tick &&
+		git commit -m E &&
+		git tag E
+	)
 '
 
 test_expect_success 'git detects conflict merging criss-cross+modify/delete' '
-	git checkout D^0 &&
+	(
+		cd modify-delete &&
+
+		git checkout D^0 &&
 
-	test_must_fail git merge -s recursive E^0 &&
+		test_must_fail git merge -s recursive E^0 &&
 
-	test 2 -eq $(git ls-files -s | wc -l) &&
-	test 2 -eq $(git ls-files -u | wc -l) &&
+		test 2 -eq $(git ls-files -s | wc -l) &&
+		test 2 -eq $(git ls-files -u | wc -l) &&
 
-	test $(git rev-parse :1:file) = $(git rev-parse master:file) &&
-	test $(git rev-parse :2:file) = $(git rev-parse B:file)
+		test $(git rev-parse :1:file) = $(git rev-parse master:file) &&
+		test $(git rev-parse :2:file) = $(git rev-parse B:file)
+	)
 '
 
 test_expect_success 'git detects conflict merging criss-cross+modify/delete, reverse direction' '
-	git reset --hard &&
-	git checkout E^0 &&
+	(
+		cd modify-delete &&
+
+		git reset --hard &&
+		git checkout E^0 &&
 
-	test_must_fail git merge -s recursive D^0 &&
+		test_must_fail git merge -s recursive D^0 &&
 
-	test 2 -eq $(git ls-files -s | wc -l) &&
-	test 2 -eq $(git ls-files -u | wc -l) &&
+		test 2 -eq $(git ls-files -s | wc -l) &&
+		test 2 -eq $(git ls-files -u | wc -l) &&
 
-	test $(git rev-parse :1:file) = $(git rev-parse master:file) &&
-	test $(git rev-parse :3:file) = $(git rev-parse B:file)
+		test $(git rev-parse :1:file) = $(git rev-parse master:file) &&
+		test $(git rev-parse :3:file) = $(git rev-parse B:file)
+	)
 '
 
 #
@@ -336,120 +359,136 @@ test_expect_success 'git detects conflict merging criss-cross+modify/delete, rev
 #
 
 test_expect_success 'setup differently handled merges of directory/file conflict' '
-	git rm -rf . &&
-	git clean -fdqx &&
-	rm -rf .git &&
-	git init &&
-
-	>ignore-me &&
-	git add ignore-me &&
-	test_tick &&
-	git commit -m A &&
-	git tag A &&
-
-	git branch B &&
-	git checkout -b C &&
-	mkdir a &&
-	echo 10 >a/file &&
-	git add a/file &&
-	test_tick &&
-	git commit -m C &&
-
-	git checkout B &&
-	echo 5 >a &&
-	git add a &&
-	test_tick &&
-	git commit -m B &&
-
-	git checkout B^0 &&
-	test_must_fail git merge C &&
-	git clean -f &&
-	rm -rf a/ &&
-	echo 5 >a &&
-	git add a &&
-	test_tick &&
-	git commit -m D &&
-	git tag D &&
-
-	git checkout C^0 &&
-	test_must_fail git merge B &&
-	git clean -f &&
-	git rm --cached a &&
-	echo 10 >a/file &&
-	git add a/file &&
-	test_tick &&
-	git commit -m E1 &&
-	git tag E1 &&
-
-	git checkout C^0 &&
-	test_must_fail git merge B &&
-	git clean -f &&
-	git rm --cached a &&
-	printf "10\n11\n" >a/file &&
-	git add a/file &&
-	test_tick &&
-	git commit -m E2 &&
-	git tag E2
+	test_create_repo directory-file &&
+	(
+		cd directory-file &&
+
+		>ignore-me &&
+		git add ignore-me &&
+		test_tick &&
+		git commit -m A &&
+		git tag A &&
+
+		git branch B &&
+		git checkout -b C &&
+		mkdir a &&
+		echo 10 >a/file &&
+		git add a/file &&
+		test_tick &&
+		git commit -m C &&
+
+		git checkout B &&
+		echo 5 >a &&
+		git add a &&
+		test_tick &&
+		git commit -m B &&
+
+		git checkout B^0 &&
+		test_must_fail git merge C &&
+		git clean -f &&
+		rm -rf a/ &&
+		echo 5 >a &&
+		git add a &&
+		test_tick &&
+		git commit -m D &&
+		git tag D &&
+
+		git checkout C^0 &&
+		test_must_fail git merge B &&
+		git clean -f &&
+		git rm --cached a &&
+		echo 10 >a/file &&
+		git add a/file &&
+		test_tick &&
+		git commit -m E1 &&
+		git tag E1 &&
+
+		git checkout C^0 &&
+		test_must_fail git merge B &&
+		git clean -f &&
+		git rm --cached a &&
+		printf "10\n11\n" >a/file &&
+		git add a/file &&
+		test_tick &&
+		git commit -m E2 &&
+		git tag E2
+	)
 '
 
 test_expect_success 'merge of D & E1 fails but has appropriate contents' '
-	get_clean_checkout D^0 &&
+	(
+		cd directory-file &&
 
-	test_must_fail git merge -s recursive E1^0 &&
+		get_clean_checkout D^0 &&
 
-	test 2 -eq $(git ls-files -s | wc -l) &&
-	test 1 -eq $(git ls-files -u | wc -l) &&
-	test 0 -eq $(git ls-files -o | wc -l) &&
+		test_must_fail git merge -s recursive E1^0 &&
 
-	test $(git rev-parse :0:ignore-me) = $(git rev-parse A:ignore-me) &&
-	test $(git rev-parse :2:a) = $(git rev-parse B:a)
+		test 2 -eq $(git ls-files -s | wc -l) &&
+		test 1 -eq $(git ls-files -u | wc -l) &&
+		test 0 -eq $(git ls-files -o | wc -l) &&
+
+		test $(git rev-parse :0:ignore-me) = $(git rev-parse A:ignore-me) &&
+		test $(git rev-parse :2:a) = $(git rev-parse B:a)
+	)
 '
 
 test_expect_success 'merge of E1 & D fails but has appropriate contents' '
-	get_clean_checkout E1^0 &&
+	(
+		cd directory-file &&
+
+		get_clean_checkout E1^0 &&
 
-	test_must_fail git merge -s recursive D^0 &&
+		test_must_fail git merge -s recursive D^0 &&
 
-	test 2 -eq $(git ls-files -s | wc -l) &&
-	test 1 -eq $(git ls-files -u | wc -l) &&
-	test 0 -eq $(git ls-files -o | wc -l) &&
+		test 2 -eq $(git ls-files -s | wc -l) &&
+		test 1 -eq $(git ls-files -u | wc -l) &&
+		test 0 -eq $(git ls-files -o | wc -l) &&
 
-	test $(git rev-parse :0:ignore-me) = $(git rev-parse A:ignore-me) &&
-	test $(git rev-parse :3:a) = $(git rev-parse B:a)
+		test $(git rev-parse :0:ignore-me) = $(git rev-parse A:ignore-me) &&
+		test $(git rev-parse :3:a) = $(git rev-parse B:a)
+	)
 '
 
 test_expect_success 'merge of D & E2 fails but has appropriate contents' '
-	get_clean_checkout D^0 &&
+	(
+		cd directory-file &&
+
+		get_clean_checkout D^0 &&
 
-	test_must_fail git merge -s recursive E2^0 &&
+		test_must_fail git merge -s recursive E2^0 &&
 
-	test 4 -eq $(git ls-files -s | wc -l) &&
-	test 3 -eq $(git ls-files -u | wc -l) &&
-	test 1 -eq $(git ls-files -o | wc -l) &&
+		test 4 -eq $(git ls-files -s | wc -l) &&
+		test 3 -eq $(git ls-files -u | wc -l) &&
+		test 1 -eq $(git ls-files -o | wc -l) &&
 
-	test $(git rev-parse :2:a) = $(git rev-parse B:a) &&
-	test $(git rev-parse :3:a/file) = $(git rev-parse E2:a/file) &&
-	test $(git rev-parse :1:a/file) = $(git rev-parse C:a/file) &&
-	test $(git rev-parse :0:ignore-me) = $(git rev-parse A:ignore-me) &&
+		test $(git rev-parse :2:a) = $(git rev-parse B:a) &&
+		test $(git rev-parse :3:a/file) = $(git rev-parse E2:a/file) &&
+		test $(git rev-parse :1:a/file) = $(git rev-parse C:a/file) &&
+		test $(git rev-parse :0:ignore-me) = $(git rev-parse A:ignore-me) &&
 
-	test -f a~HEAD
+		test -f a~HEAD
+	)
 '
 
 test_expect_success 'merge of E2 & D fails but has appropriate contents' '
-	get_clean_checkout E2^0 &&
+	(
+		cd directory-file &&
 
-	test_must_fail git merge -s recursive D^0 &&
+		get_clean_checkout E2^0 &&
 
-	test 4 -eq $(git ls-files -s | wc -l) &&
-	test 3 -eq $(git ls-files -u | wc -l) &&
-	test 1 -eq $(git ls-files -o | wc -l) &&
+		test_must_fail git merge -s recursive D^0 &&
 
-	test $(git rev-parse :3:a) = $(git rev-parse B:a) &&
-	test $(git rev-parse :2:a/file) = $(git rev-parse E2:a/file) &&
-	test $(git rev-parse :1:a/file) = $(git rev-parse C:a/file) &&
-	test $(git rev-parse :0:ignore-me) = $(git rev-parse A:ignore-me) &&
+		test 4 -eq $(git ls-files -s | wc -l) &&
+		test 3 -eq $(git ls-files -u | wc -l) &&
+		test 1 -eq $(git ls-files -o | wc -l) &&
 
-	test -f a~D^0
+		test $(git rev-parse :3:a) = $(git rev-parse B:a) &&
+		test $(git rev-parse :2:a/file) = $(git rev-parse E2:a/file) &&
+		test $(git rev-parse :1:a/file) = $(git rev-parse C:a/file) &&
+		test $(git rev-parse :0:ignore-me) = $(git rev-parse A:ignore-me) &&
+
+		test -f a~D^0
+	)
 '
 
 #
@@ -492,52 +531,55 @@ test_expect_success 'merge of E2 & D fails but has appropriate contents' '
 # but that may cancel out at the final merge stage".
 
 test_expect_success 'setup rename/rename(1to2)/modify followed by what looks like rename/rename(2to1)/modify' '
-	git reset --hard &&
-	git rm -rf . &&
-	git clean -fdqx &&
-	rm -rf .git &&
-	git init &&
-
-	printf "1\n2\n3\n4\n5\n6\n" >a &&
-	git add a &&
-	git commit -m A &&
-	git tag A &&
-
-	git checkout -b B A &&
-	git mv a b &&
-	echo 7 >>b &&
-	git add -u &&
-	git commit -m B &&
-
-	git checkout -b C A &&
-	git mv a c &&
-	git commit -m C &&
-
-	git checkout -q B^0 &&
-	git merge --no-commit -s ours C^0 &&
-	git mv b newname &&
-	git commit -m "Merge commit C^0 into HEAD" &&
-	git tag D &&
-
-	git checkout -q C^0 &&
-	git merge --no-commit -s ours B^0 &&
-	git mv c newname &&
-	printf "7\n8\n" >>newname &&
-	git add -u &&
-	git commit -m "Merge commit B^0 into HEAD" &&
-	git tag E
+	test_create_repo rename-squared-squared &&
+	(
+		cd rename-squared-squared &&
+
+		printf "1\n2\n3\n4\n5\n6\n" >a &&
+		git add a &&
+		git commit -m A &&
+		git tag A &&
+
+		git checkout -b B A &&
+		git mv a b &&
+		echo 7 >>b &&
+		git add -u &&
+		git commit -m B &&
+
+		git checkout -b C A &&
+		git mv a c &&
+		git commit -m C &&
+
+		git checkout -q B^0 &&
+		git merge --no-commit -s ours C^0 &&
+		git mv b newname &&
+		git commit -m "Merge commit C^0 into HEAD" &&
+		git tag D &&
+
+		git checkout -q C^0 &&
+		git merge --no-commit -s ours B^0 &&
+		git mv c newname &&
+		printf "7\n8\n" >>newname &&
+		git add -u &&
+		git commit -m "Merge commit B^0 into HEAD" &&
+		git tag E
+	)
 '
 
 test_expect_success 'handle rename/rename(1to2)/modify followed by what looks like rename/rename(2to1)/modify' '
-	git checkout D^0 &&
+	(
+		cd rename-squared-squared &&
 
-	git merge -s recursive E^0 &&
+		git checkout D^0 &&
 
-	test 1 -eq $(git ls-files -s | wc -l) &&
-	test 0 -eq $(git ls-files -u | wc -l) &&
-	test 0 -eq $(git ls-files -o | wc -l) &&
+		git merge -s recursive E^0 &&
 
-	test $(git rev-parse HEAD:newname) = $(git rev-parse E:newname)
+		test 1 -eq $(git ls-files -s | wc -l) &&
+		test 0 -eq $(git ls-files -u | wc -l) &&
+		test 0 -eq $(git ls-files -o | wc -l) &&
+
+		test $(git rev-parse HEAD:newname) = $(git rev-parse E:newname)
+	)
 '
 
 #
@@ -562,59 +604,63 @@ test_expect_success 'handle rename/rename(1to2)/modify followed by what looks li
 # renaming carefully (both in the virtual merge base and later), and getting
 # content merge handled.
 
-test_expect_success 'setup criss-cross + rename/rename/add + modify/modify' '
-	git rm -rf . &&
-	git clean -fdqx &&
-	rm -rf .git &&
-	git init &&
-
-	printf "lots\nof\nwords\nand\ncontent\n" >a &&
-	git add a &&
-	git commit -m A &&
-	git tag A &&
-
-	git checkout -b B A &&
-	git mv a b &&
-	git commit -m B &&
-
-	git checkout -b C A &&
-	git mv a c &&
-	printf "2\n3\n4\n5\n6\n7\n" >a &&
-	git add a &&
-	git commit -m C &&
-
-	git checkout B^0 &&
-	git merge --no-commit -s ours C^0 &&
-	git checkout C -- a c &&
-	mv a old_a &&
-	echo 1 >a &&
-	cat old_a >>a &&
-	rm old_a &&
-	git add -u &&
-	git commit -m "Merge commit C^0 into HEAD" &&
-	git tag D &&
-
-	git checkout C^0 &&
-	git merge --no-commit -s ours B^0 &&
-	git checkout B -- b &&
-	echo 8 >>a &&
-	git add -u &&
-	git commit -m "Merge commit B^0 into HEAD" &&
-	git tag E
+test_expect_success 'setup criss-cross + rename/rename/add-source + modify/modify' '
+	test_create_repo rename-rename-add-source &&
+	(
+		cd rename-rename-add-source &&
+
+		printf "lots\nof\nwords\nand\ncontent\n" >a &&
+		git add a &&
+		git commit -m A &&
+		git tag A &&
+
+		git checkout -b B A &&
+		git mv a b &&
+		git commit -m B &&
+
+		git checkout -b C A &&
+		git mv a c &&
+		printf "2\n3\n4\n5\n6\n7\n" >a &&
+		git add a &&
+		git commit -m C &&
+
+		git checkout B^0 &&
+		git merge --no-commit -s ours C^0 &&
+		git checkout C -- a c &&
+		mv a old_a &&
+		echo 1 >a &&
+		cat old_a >>a &&
+		rm old_a &&
+		git add -u &&
+		git commit -m "Merge commit C^0 into HEAD" &&
+		git tag D &&
+
+		git checkout C^0 &&
+		git merge --no-commit -s ours B^0 &&
+		git checkout B -- b &&
+		echo 8 >>a &&
+		git add -u &&
+		git commit -m "Merge commit B^0 into HEAD" &&
+		git tag E
+	)
 '
 
 test_expect_failure 'detect rename/rename/add-source for virtual merge-base' '
-	git checkout D^0 &&
+	(
+		cd rename-rename-add-source &&
+
+		git checkout D^0 &&
 
-	git merge -s recursive E^0 &&
+		git merge -s recursive E^0 &&
 
-	test 3 -eq $(git ls-files -s | wc -l) &&
-	test 0 -eq $(git ls-files -u | wc -l) &&
-	test 0 -eq $(git ls-files -o | wc -l) &&
+		test 3 -eq $(git ls-files -s | wc -l) &&
+		test 0 -eq $(git ls-files -u | wc -l) &&
+		test 0 -eq $(git ls-files -o | wc -l) &&
 
-	test $(git rev-parse HEAD:b) = $(git rev-parse A:a) &&
-	test $(git rev-parse HEAD:c) = $(git rev-parse A:a) &&
-	test "$(cat a)" = "$(printf "1\n2\n3\n4\n5\n6\n7\n8\n")"
+		test $(git rev-parse HEAD:b) = $(git rev-parse A:a) &&
+		test $(git rev-parse HEAD:c) = $(git rev-parse A:a) &&
+		test "$(cat a)" = "$(printf "1\n2\n3\n4\n5\n6\n7\n8\n")"
+	)
 '
 
 #
@@ -638,52 +684,56 @@ test_expect_failure 'detect rename/rename/add-source for virtual merge-base' '
 # base of B & C needs to not delete B:c for that to work, though...
 
 test_expect_success 'setup criss-cross+rename/rename/add-dest + simple modify' '
-	git rm -rf . &&
-	git clean -fdqx &&
-	rm -rf .git &&
-	git init &&
-
-	>a &&
-	git add a &&
-	git commit -m A &&
-	git tag A &&
-
-	git checkout -b B A &&
-	git mv a b &&
-	printf "1\n2\n3\n4\n5\n6\n7\n" >c &&
-	git add c &&
-	git commit -m B &&
-
-	git checkout -b C A &&
-	git mv a c &&
-	git commit -m C &&
-
-	git checkout B^0 &&
-	git merge --no-commit -s ours C^0 &&
-	git mv b a &&
-	git commit -m "D is like B but renames b back to a" &&
-	git tag D &&
-
-	git checkout B^0 &&
-	git merge --no-commit -s ours C^0 &&
-	git mv b a &&
-	echo 8 >>c &&
-	git add c &&
-	git commit -m "E like D but has mod in c" &&
-	git tag E
+	test_create_repo rename-rename-add-dest &&
+	(
+		cd rename-rename-add-dest &&
+
+		>a &&
+		git add a &&
+		git commit -m A &&
+		git tag A &&
+
+		git checkout -b B A &&
+		git mv a b &&
+		printf "1\n2\n3\n4\n5\n6\n7\n" >c &&
+		git add c &&
+		git commit -m B &&
+
+		git checkout -b C A &&
+		git mv a c &&
+		git commit -m C &&
+
+		git checkout B^0 &&
+		git merge --no-commit -s ours C^0 &&
+		git mv b a &&
+		git commit -m "D is like B but renames b back to a" &&
+		git tag D &&
+
+		git checkout B^0 &&
+		git merge --no-commit -s ours C^0 &&
+		git mv b a &&
+		echo 8 >>c &&
+		git add c &&
+		git commit -m "E like D but has mod in c" &&
+		git tag E
+	)
 '
 
 test_expect_success 'virtual merge base handles rename/rename(1to2)/add-dest' '
-	git checkout D^0 &&
+	(
+		cd rename-rename-add-dest &&
+
+		git checkout D^0 &&
 
-	git merge -s recursive E^0 &&
+		git merge -s recursive E^0 &&
 
-	test 2 -eq $(git ls-files -s | wc -l) &&
-	test 0 -eq $(git ls-files -u | wc -l) &&
-	test 0 -eq $(git ls-files -o | wc -l) &&
+		test 2 -eq $(git ls-files -s | wc -l) &&
+		test 0 -eq $(git ls-files -u | wc -l) &&
+		test 0 -eq $(git ls-files -o | wc -l) &&
 
-	test $(git rev-parse HEAD:a) = $(git rev-parse A:a) &&
-	test $(git rev-parse HEAD:c) = $(git rev-parse E:c)
+		test $(git rev-parse HEAD:a) = $(git rev-parse A:a) &&
+		test $(git rev-parse HEAD:c) = $(git rev-parse E:c)
+	)
 '
 
 test_done
diff --git a/t/t6042-merge-rename-corner-cases.sh b/t/t6042-merge-rename-corner-cases.sh
index 411550d2b6..bec0192c3b 100755
--- a/t/t6042-merge-rename-corner-cases.sh
+++ b/t/t6042-merge-rename-corner-cases.sh
@@ -6,31 +6,40 @@ test_description="recursive merge corner cases w/ renames but not criss-crosses"
 . ./test-lib.sh
 
 test_expect_success 'setup rename/delete + untracked file' '
-	echo "A pretty inscription" >ring &&
-	git add ring &&
-	test_tick &&
-	git commit -m beginning &&
-
-	git branch people &&
-	git checkout -b rename-the-ring &&
-	git mv ring one-ring-to-rule-them-all &&
-	test_tick &&
-	git commit -m fullname &&
-
-	git checkout people &&
-	git rm ring &&
-	echo gollum >owner &&
-	git add owner &&
-	test_tick &&
-	git commit -m track-people-instead-of-objects &&
-	echo "Myyy PRECIOUSSS" >ring
+	test_create_repo rename-delete-untracked &&
+	(
+		cd rename-delete-untracked &&
+
+		echo "A pretty inscription" >ring &&
+		git add ring &&
+		test_tick &&
+		git commit -m beginning &&
+
+		git branch people &&
+		git checkout -b rename-the-ring &&
+		git mv ring one-ring-to-rule-them-all &&
+		test_tick &&
+		git commit -m fullname &&
+
+		git checkout people &&
+		git rm ring &&
+		echo gollum >owner &&
+		git add owner &&
+		test_tick &&
+		git commit -m track-people-instead-of-objects &&
+		echo "Myyy PRECIOUSSS" >ring
+	)
 '
 
 test_expect_success "Does git preserve Gollum's precious artifact?" '
-	test_must_fail git merge -s recursive rename-the-ring &&
+	(
+		cd rename-delete-untracked &&
 
-	# Make sure git did not delete an untracked file
-	test -f ring
+		test_must_fail git merge -s recursive rename-the-ring &&
+
+		# Make sure git did not delete an untracked file
+		test -f ring
+	)
 '
 
 # Testcase setup for rename/modify/add-source:
@@ -41,96 +50,116 @@ test_expect_success "Does git preserve Gollum's precious artifact?" '
 # We should be able to merge B & C cleanly
 
 test_expect_success 'setup rename/modify/add-source conflict' '
-	git rm -rf . &&
-	git clean -fdqx &&
-	rm -rf .git &&
-	git init &&
-
-	printf "1\n2\n3\n4\n5\n6\n7\n" >a &&
-	git add a &&
-	git commit -m A &&
-	git tag A &&
-
-	git checkout -b B A &&
-	echo 8 >>a &&
-	git add a &&
-	git commit -m B &&
-
-	git checkout -b C A &&
-	git mv a b &&
-	echo something completely different >a &&
-	git add a &&
-	git commit -m C
+	test_create_repo rename-modify-add-source &&
+	(
+		cd rename-modify-add-source &&
+
+		printf "1\n2\n3\n4\n5\n6\n7\n" >a &&
+		git add a &&
+		git commit -m A &&
+		git tag A &&
+
+		git checkout -b B A &&
+		echo 8 >>a &&
+		git add a &&
+		git commit -m B &&
+
+		git checkout -b C A &&
+		git mv a b &&
+		echo something completely different >a &&
+		git add a &&
+		git commit -m C
+	)
 '
 
 test_expect_failure 'rename/modify/add-source conflict resolvable' '
-	git checkout B^0 &&
+	(
+		cd rename-modify-add-source &&
+
+		git checkout B^0 &&
 
-	git merge -s recursive C^0 &&
+		git merge -s recursive C^0 &&
 
-	test $(git rev-parse B:a) = $(git rev-parse b) &&
-	test $(git rev-parse C:a) = $(git rev-parse a)
+		test $(git rev-parse B:a) = $(git rev-parse b) &&
+		test $(git rev-parse C:a) = $(git rev-parse a)
+	)
 '
 
 test_expect_success 'setup resolvable conflict missed if rename missed' '
-	git rm -rf . &&
-	git clean -fdqx &&
-	rm -rf .git &&
-	git init &&
-
-	printf "1\n2\n3\n4\n5\n" >a &&
-	echo foo >b &&
-	git add a b &&
-	git commit -m A &&
-	git tag A &&
-
-	git checkout -b B A &&
-	git mv a c &&
-	echo "Completely different content" >a &&
-	git add a &&
-	git commit -m B &&
-
-	git checkout -b C A &&
-	echo 6 >>a &&
-	git add a &&
-	git commit -m C
+	test_create_repo break-detection-1 &&
+	(
+		cd break-detection-1 &&
+
+		printf "1\n2\n3\n4\n5\n" >a &&
+		echo foo >b &&
+		git add a b &&
+		git commit -m A &&
+		git tag A &&
+
+		git checkout -b B A &&
+		git mv a c &&
+		echo "Completely different content" >a &&
+		git add a &&
+		git commit -m B &&
+
+		git checkout -b C A &&
+		echo 6 >>a &&
+		git add a &&
+		git commit -m C
+	)
 '
 
 test_expect_failure 'conflict caused if rename not detected' '
-	git checkout -q C^0 &&
-	git merge -s recursive B^0 &&
+	(
+		cd break-detection-1 &&
+
+		git checkout -q C^0 &&
+		git merge -s recursive B^0 &&
 
-	test 3 -eq $(git ls-files -s | wc -l) &&
-	test 0 -eq $(git ls-files -u | wc -l) &&
-	test 0 -eq $(git ls-files -o | wc -l) &&
+		test 3 -eq $(git ls-files -s | wc -l) &&
+		test 0 -eq $(git ls-files -u | wc -l) &&
+		test 0 -eq $(git ls-files -o | wc -l) &&
 
-	test_line_count = 6 c &&
-	test $(git rev-parse HEAD:a) = $(git rev-parse B:a) &&
-	test $(git rev-parse HEAD:b) = $(git rev-parse A:b)
+		test_line_count = 6 c &&
+		test $(git rev-parse HEAD:a) = $(git rev-parse B:a) &&
+		test $(git rev-parse HEAD:b) = $(git rev-parse A:b)
+	)
 '
 
 test_expect_success 'setup conflict resolved wrong if rename missed' '
-	git reset --hard &&
-	git clean -f &&
-
-	git checkout -b D A &&
-	echo 7 >>a &&
-	git add a &&
-	git mv a c &&
-	echo "Completely different content" >a &&
-	git add a &&
-	git commit -m D &&
-
-	git checkout -b E A &&
-	git rm a &&
-	echo "Completely different content" >>a &&
-	git add a &&
-	git commit -m E
+	test_create_repo break-detection-2 &&
+	(
+		cd break-detection-2 &&
+
+		printf "1\n2\n3\n4\n5\n" >a &&
+		echo foo >b &&
+		git add a b &&
+		git commit -m A &&
+		git tag A &&
+
+		git checkout -b D A &&
+		echo 7 >>a &&
+		git add a &&
+		git mv a c &&
+		echo "Completely different content" >a &&
+		git add a &&
+		git commit -m D &&
+
+		git checkout -b E A &&
+		git rm a &&
+		echo "Completely different content" >>a &&
+		git add a &&
+		git commit -m E
+	)
 '
 
 test_expect_failure 'missed conflict if rename not detected' '
-	git checkout -q E^0 &&
-	test_must_fail git merge -s recursive D^0
+	(
+		cd break-detection-2 &&
+
+		git checkout -q E^0 &&
+		test_must_fail git merge -s recursive D^0
+	)
 '
 
 # Tests for undetected rename/add-source causing a file to erroneously be
@@ -145,198 +174,210 @@ test_expect_failure 'missed conflict if rename not detected' '
 #   Commit C: rename a->b, add unrelated a
 
 test_expect_success 'setup undetected rename/add-source causes data loss' '
-	git rm -rf . &&
-	git clean -fdqx &&
-	rm -rf .git &&
-	git init &&
-
-	printf "1\n2\n3\n4\n5\n" >a &&
-	git add a &&
-	git commit -m A &&
-	git tag A &&
-
-	git checkout -b B A &&
-	git mv a b &&
-	git commit -m B &&
-
-	git checkout -b C A &&
-	git mv a b &&
-	echo foobar >a &&
-	git add a &&
-	git commit -m C
+	test_create_repo break-detection-3 &&
+	(
+		cd break-detection-3 &&
+
+		printf "1\n2\n3\n4\n5\n" >a &&
+		git add a &&
+		git commit -m A &&
+		git tag A &&
+
+		git checkout -b B A &&
+		git mv a b &&
+		git commit -m B &&
+
+		git checkout -b C A &&
+		git mv a b &&
+		echo foobar >a &&
+		git add a &&
+		git commit -m C
+	)
 '
 
 test_expect_failure 'detect rename/add-source and preserve all data' '
-	git checkout B^0 &&
+	(
+		cd break-detection-3 &&
+
+		git checkout B^0 &&
 
-	git merge -s recursive C^0 &&
+		git merge -s recursive C^0 &&
 
-	test 2 -eq $(git ls-files -s | wc -l) &&
-	test 2 -eq $(git ls-files -u | wc -l) &&
-	test 0 -eq $(git ls-files -o | wc -l) &&
+		test 2 -eq $(git ls-files -s | wc -l) &&
+		test 2 -eq $(git ls-files -u | wc -l) &&
+		test 0 -eq $(git ls-files -o | wc -l) &&
 
-	test -f a &&
-	test -f b &&
+		test -f a &&
+		test -f b &&
 
-	test $(git rev-parse HEAD:b) = $(git rev-parse A:a) &&
-	test $(git rev-parse HEAD:a) = $(git rev-parse C:a)
+		test $(git rev-parse HEAD:b) = $(git rev-parse A:a) &&
+		test $(git rev-parse HEAD:a) = $(git rev-parse C:a)
+	)
 '
 
 test_expect_failure 'detect rename/add-source and preserve all data, merge other way' '
-	git checkout C^0 &&
+	(
+		cd break-detection-3 &&
 
-	git merge -s recursive B^0 &&
+		git checkout C^0 &&
 
-	test 2 -eq $(git ls-files -s | wc -l) &&
-	test 2 -eq $(git ls-files -u | wc -l) &&
-	test 0 -eq $(git ls-files -o | wc -l) &&
+		git merge -s recursive B^0 &&
 
-	test -f a &&
-	test -f b &&
+		test 2 -eq $(git ls-files -s | wc -l) &&
+		test 2 -eq $(git ls-files -u | wc -l) &&
+		test 0 -eq $(git ls-files -o | wc -l) &&
 
-	test $(git rev-parse HEAD:b) = $(git rev-parse A:a) &&
-	test $(git rev-parse HEAD:a) = $(git rev-parse C:a)
+		test -f a &&
+		test -f b &&
+
+		test $(git rev-parse HEAD:b) = $(git rev-parse A:a) &&
+		test $(git rev-parse HEAD:a) = $(git rev-parse C:a)
+	)
 '
 
 test_expect_success 'setup content merge + rename/directory conflict' '
-	git rm -rf . &&
-	git clean -fdqx &&
-	rm -rf .git &&
-	git init &&
-
-	printf "1\n2\n3\n4\n5\n6\n" >file &&
-	git add file &&
-	test_tick &&
-	git commit -m base &&
-	git tag base &&
-
-	git checkout -b right &&
-	echo 7 >>file &&
-	mkdir newfile &&
-	echo junk >newfile/realfile &&
-	git add file newfile/realfile &&
-	test_tick &&
-	git commit -m right &&
-
-	git checkout -b left-conflict base &&
-	echo 8 >>file &&
-	git add file &&
-	git mv file newfile &&
-	test_tick &&
-	git commit -m left &&
-
-	git checkout -b left-clean base &&
-	echo 0 >newfile &&
-	cat file >>newfile &&
-	git add newfile &&
-	git rm file &&
-	test_tick &&
-	git commit -m left
+	test_create_repo rename-directory-1 &&
+	(
+		cd rename-directory-1 &&
+
+		printf "1\n2\n3\n4\n5\n6\n" >file &&
+		git add file &&
+		test_tick &&
+		git commit -m base &&
+		git tag base &&
+
+		git checkout -b right &&
+		echo 7 >>file &&
+		mkdir newfile &&
+		echo junk >newfile/realfile &&
+		git add file newfile/realfile &&
+		test_tick &&
+		git commit -m right &&
+
+		git checkout -b left-conflict base &&
+		echo 8 >>file &&
+		git add file &&
+		git mv file newfile &&
+		test_tick &&
+		git commit -m left &&
+
+		git checkout -b left-clean base &&
+		echo 0 >newfile &&
+		cat file >>newfile &&
+		git add newfile &&
+		git rm file &&
+		test_tick &&
+		git commit -m left
+	)
 '
 
 test_expect_success 'rename/directory conflict + clean content merge' '
-	git reset --hard &&
-	git reset --hard &&
-	git clean -fdqx &&
+	(
+		cd rename-directory-1 &&
 
-	git checkout left-clean^0 &&
+		git checkout left-clean^0 &&
 
-	test_must_fail git merge -s recursive right^0 &&
+		test_must_fail git merge -s recursive right^0 &&
 
-	test 2 -eq $(git ls-files -s | wc -l) &&
-	test 1 -eq $(git ls-files -u | wc -l) &&
-	test 1 -eq $(git ls-files -o | wc -l) &&
+		test 2 -eq $(git ls-files -s | wc -l) &&
+		test 1 -eq $(git ls-files -u | wc -l) &&
+		test 1 -eq $(git ls-files -o | wc -l) &&
 
-	echo 0 >expect &&
-	git cat-file -p base:file >>expect &&
-	echo 7 >>expect &&
-	test_cmp expect newfile~HEAD &&
+		echo 0 >expect &&
+		git cat-file -p base:file >>expect &&
+		echo 7 >>expect &&
+		test_cmp expect newfile~HEAD &&
 
-	test $(git rev-parse :2:newfile) = $(git hash-object expect) &&
+		test $(git rev-parse :2:newfile) = $(git hash-object expect) &&
 
-	test -f newfile/realfile &&
-	test -f newfile~HEAD
+		test -f newfile/realfile &&
+		test -f newfile~HEAD
+	)
 '
 
 test_expect_success 'rename/directory conflict + content merge conflict' '
-	git reset --hard &&
-	git reset --hard &&
-	git clean -fdqx &&
-
-	git checkout left-conflict^0 &&
-
-	test_must_fail git merge -s recursive right^0 &&
-
-	test 4 -eq $(git ls-files -s | wc -l) &&
-	test 3 -eq $(git ls-files -u | wc -l) &&
-	test 1 -eq $(git ls-files -o | wc -l) &&
-
-	git cat-file -p left-conflict:newfile >left &&
-	git cat-file -p base:file    >base &&
-	git cat-file -p right:file   >right &&
-	test_must_fail git merge-file \
-		-L "HEAD:newfile" \
-		-L "" \
-		-L "right^0:file" \
-		left base right &&
-	test_cmp left newfile~HEAD &&
-
-	test $(git rev-parse :1:newfile) = $(git rev-parse base:file) &&
-	test $(git rev-parse :2:newfile) = $(git rev-parse left-conflict:newfile) &&
-	test $(git rev-parse :3:newfile) = $(git rev-parse right:file) &&
-
-	test -f newfile/realfile &&
-	test -f newfile~HEAD
+	(
+		cd rename-directory-1 &&
+
+		git reset --hard &&
+		git reset --hard &&
+		git clean -fdqx &&
+
+		git checkout left-conflict^0 &&
+
+		test_must_fail git merge -s recursive right^0 &&
+
+		test 4 -eq $(git ls-files -s | wc -l) &&
+		test 3 -eq $(git ls-files -u | wc -l) &&
+		test 1 -eq $(git ls-files -o | wc -l) &&
+
+		git cat-file -p left-conflict:newfile >left &&
+		git cat-file -p base:file    >base &&
+		git cat-file -p right:file   >right &&
+		test_must_fail git merge-file \
+			-L "HEAD:newfile" \
+			-L "" \
+			-L "right^0:file" \
+			left base right &&
+		test_cmp left newfile~HEAD &&
+
+		test $(git rev-parse :1:newfile) = $(git rev-parse base:file) &&
+		test $(git rev-parse :2:newfile) = $(git rev-parse left-conflict:newfile) &&
+		test $(git rev-parse :3:newfile) = $(git rev-parse right:file) &&
+
+		test -f newfile/realfile &&
+		test -f newfile~HEAD
+	)
 '
 
 test_expect_success 'setup content merge + rename/directory conflict w/ disappearing dir' '
-	git reset --hard &&
-	git rm -rf . &&
-	git clean -fdqx &&
-	rm -rf .git &&
-	git init &&
-
-	mkdir sub &&
-	printf "1\n2\n3\n4\n5\n6\n" >sub/file &&
-	git add sub/file &&
-	test_tick &&
-	git commit -m base &&
-	git tag base &&
-
-	git checkout -b right &&
-	echo 7 >>sub/file &&
-	git add sub/file &&
-	test_tick &&
-	git commit -m right &&
-
-	git checkout -b left base &&
-	echo 0 >newfile &&
-	cat sub/file >>newfile &&
-	git rm sub/file &&
-	mv newfile sub &&
-	git add sub &&
-	test_tick &&
-	git commit -m left
+	test_create_repo rename-directory-2 &&
+	(
+		cd rename-directory-2 &&
+
+		mkdir sub &&
+		printf "1\n2\n3\n4\n5\n6\n" >sub/file &&
+		git add sub/file &&
+		test_tick &&
+		git commit -m base &&
+		git tag base &&
+
+		git checkout -b right &&
+		echo 7 >>sub/file &&
+		git add sub/file &&
+		test_tick &&
+		git commit -m right &&
+
+		git checkout -b left base &&
+		echo 0 >newfile &&
+		cat sub/file >>newfile &&
+		git rm sub/file &&
+		mv newfile sub &&
+		git add sub &&
+		test_tick &&
+		git commit -m left
+	)
 '
 
 test_expect_success 'disappearing dir in rename/directory conflict handled' '
-	git reset --hard &&
-	git clean -fdqx &&
+	(
+		cd rename-directory-2 &&
 
-	git checkout left^0 &&
+		git checkout left^0 &&
 
-	git merge -s recursive right^0 &&
+		git merge -s recursive right^0 &&
 
-	test 1 -eq $(git ls-files -s | wc -l) &&
-	test 0 -eq $(git ls-files -u | wc -l) &&
-	test 0 -eq $(git ls-files -o | wc -l) &&
+		test 1 -eq $(git ls-files -s | wc -l) &&
+		test 0 -eq $(git ls-files -u | wc -l) &&
+		test 0 -eq $(git ls-files -o | wc -l) &&
 
-	echo 0 >expect &&
-	git cat-file -p base:sub/file >>expect &&
-	echo 7 >>expect &&
-	test_cmp expect sub &&
+		echo 0 >expect &&
+		git cat-file -p base:sub/file >>expect &&
+		echo 7 >>expect &&
+		test_cmp expect sub &&
 
-	test -f sub
+		test -f sub
+	)
 '
 
 # Test for all kinds of things that can go wrong with rename/rename (2to1):
@@ -352,48 +393,52 @@ test_expect_success 'disappearing dir in rename/directory conflict handled' '
 #   * Nothing else should be present.  Is anything?
 
 test_expect_success 'setup rename/rename (2to1) + modify/modify' '
-	git rm -rf . &&
-	git clean -fdqx &&
-	rm -rf .git &&
-	git init &&
-
-	printf "1\n2\n3\n4\n5\n" >a &&
-	printf "5\n4\n3\n2\n1\n" >b &&
-	git add a b &&
-	git commit -m A &&
-	git tag A &&
-
-	git checkout -b B A &&
-	git mv a c &&
-	echo 0 >>b &&
-	git add b &&
-	git commit -m B &&
-
-	git checkout -b C A &&
-	git mv b c &&
-	echo 6 >>a &&
-	git add a &&
-	git commit -m C
+	test_create_repo rename-rename-2to1 &&
+	(
+		cd rename-rename-2to1 &&
+
+		printf "1\n2\n3\n4\n5\n" >a &&
+		printf "5\n4\n3\n2\n1\n" >b &&
+		git add a b &&
+		git commit -m A &&
+		git tag A &&
+
+		git checkout -b B A &&
+		git mv a c &&
+		echo 0 >>b &&
+		git add b &&
+		git commit -m B &&
+
+		git checkout -b C A &&
+		git mv b c &&
+		echo 6 >>a &&
+		git add a &&
+		git commit -m C
+	)
 '
 
 test_expect_success 'handle rename/rename (2to1) conflict correctly' '
-	git checkout B^0 &&
+	(
+		cd rename-rename-2to1 &&
+
+		git checkout B^0 &&
 
-	test_must_fail git merge -s recursive C^0 >out &&
-	test_i18ngrep "CONFLICT (rename/rename)" out &&
+		test_must_fail git merge -s recursive C^0 >out &&
+		test_i18ngrep "CONFLICT (rename/rename)" out &&
 
-	test 2 -eq $(git ls-files -s | wc -l) &&
-	test 2 -eq $(git ls-files -u | wc -l) &&
-	test 2 -eq $(git ls-files -u c | wc -l) &&
-	test 3 -eq $(git ls-files -o | wc -l) &&
+		test 2 -eq $(git ls-files -s | wc -l) &&
+		test 2 -eq $(git ls-files -u | wc -l) &&
+		test 2 -eq $(git ls-files -u c | wc -l) &&
+		test 3 -eq $(git ls-files -o | wc -l) &&
 
-	test ! -f a &&
-	test ! -f b &&
-	test -f c~HEAD &&
-	test -f c~C^0 &&
+		test ! -f a &&
+		test ! -f b &&
+		test -f c~HEAD &&
+		test -f c~C^0 &&
 
-	test $(git hash-object c~HEAD) = $(git rev-parse C:a) &&
-	test $(git hash-object c~C^0) = $(git rev-parse B:b)
+		test $(git hash-object c~HEAD) = $(git rev-parse C:a) &&
+		test $(git hash-object c~C^0) = $(git rev-parse B:b)
+	)
 '
 
 # Testcase setup for simple rename/rename (1to2) conflict:
@@ -401,44 +446,48 @@ test_expect_success 'handle rename/rename (2to1) conflict correctly' '
 #   Commit B: rename a->b
 #   Commit C: rename a->c
 test_expect_success 'setup simple rename/rename (1to2) conflict' '
-	git rm -rf . &&
-	git clean -fdqx &&
-	rm -rf .git &&
-	git init &&
-
-	echo stuff >a &&
-	git add a &&
-	test_tick &&
-	git commit -m A &&
-	git tag A &&
-
-	git checkout -b B A &&
-	git mv a b &&
-	test_tick &&
-	git commit -m B &&
-
-	git checkout -b C A &&
-	git mv a c &&
-	test_tick &&
-	git commit -m C
+	test_create_repo rename-rename-1to2 &&
+	(
+		cd rename-rename-1to2 &&
+
+		echo stuff >a &&
+		git add a &&
+		test_tick &&
+		git commit -m A &&
+		git tag A &&
+
+		git checkout -b B A &&
+		git mv a b &&
+		test_tick &&
+		git commit -m B &&
+
+		git checkout -b C A &&
+		git mv a c &&
+		test_tick &&
+		git commit -m C
+	)
 '
 
 test_expect_success 'merge has correct working tree contents' '
-	git checkout C^0 &&
+	(
+		cd rename-rename-1to2 &&
+
+		git checkout C^0 &&
 
-	test_must_fail git merge -s recursive B^0 &&
+		test_must_fail git merge -s recursive B^0 &&
 
-	test 3 -eq $(git ls-files -s | wc -l) &&
-	test 3 -eq $(git ls-files -u | wc -l) &&
-	test 0 -eq $(git ls-files -o | wc -l) &&
+		test 3 -eq $(git ls-files -s | wc -l) &&
+		test 3 -eq $(git ls-files -u | wc -l) &&
+		test 0 -eq $(git ls-files -o | wc -l) &&
 
-	test $(git rev-parse :1:a) = $(git rev-parse A:a) &&
-	test $(git rev-parse :3:b) = $(git rev-parse A:a) &&
-	test $(git rev-parse :2:c) = $(git rev-parse A:a) &&
+		test $(git rev-parse :1:a) = $(git rev-parse A:a) &&
+		test $(git rev-parse :3:b) = $(git rev-parse A:a) &&
+		test $(git rev-parse :2:c) = $(git rev-parse A:a) &&
 
-	test ! -f a &&
-	test $(git hash-object b) = $(git rev-parse A:a) &&
-	test $(git hash-object c) = $(git rev-parse A:a)
+		test ! -f a &&
+		test $(git hash-object b) = $(git rev-parse A:a) &&
+		test $(git hash-object c) = $(git rev-parse A:a)
+	)
 '
 
 # Testcase setup for rename/rename(1to2)/add-source conflict:
@@ -449,130 +498,142 @@ test_expect_success 'merge has correct working tree contents' '
 # Merging of B & C should NOT be clean; there's a rename/rename conflict
 
 test_expect_success 'setup rename/rename(1to2)/add-source conflict' '
-	git rm -rf . &&
-	git clean -fdqx &&
-	rm -rf .git &&
-	git init &&
-
-	printf "1\n2\n3\n4\n5\n6\n7\n" >a &&
-	git add a &&
-	git commit -m A &&
-	git tag A &&
-
-	git checkout -b B A &&
-	git mv a b &&
-	git commit -m B &&
-
-	git checkout -b C A &&
-	git mv a c &&
-	echo something completely different >a &&
-	git add a &&
-	git commit -m C
+	test_create_repo rename-rename-1to2-add-source-1 &&
+	(
+		cd rename-rename-1to2-add-source-1 &&
+
+		printf "1\n2\n3\n4\n5\n6\n7\n" >a &&
+		git add a &&
+		git commit -m A &&
+		git tag A &&
+
+		git checkout -b B A &&
+		git mv a b &&
+		git commit -m B &&
+
+		git checkout -b C A &&
+		git mv a c &&
+		echo something completely different >a &&
+		git add a &&
+		git commit -m C
+	)
 '
 
 test_expect_failure 'detect conflict with rename/rename(1to2)/add-source merge' '
-	git checkout B^0 &&
+	(
+		cd rename-rename-1to2-add-source-1 &&
 
-	test_must_fail git merge -s recursive C^0 &&
+		git checkout B^0 &&
 
-	test 4 -eq $(git ls-files -s | wc -l) &&
-	test 0 -eq $(git ls-files -o | wc -l) &&
+		test_must_fail git merge -s recursive C^0 &&
 
-	test $(git rev-parse 3:a) = $(git rev-parse C:a) &&
-	test $(git rev-parse 1:a) = $(git rev-parse A:a) &&
-	test $(git rev-parse 2:b) = $(git rev-parse B:b) &&
-	test $(git rev-parse 3:c) = $(git rev-parse C:c) &&
+		test 4 -eq $(git ls-files -s | wc -l) &&
+		test 0 -eq $(git ls-files -o | wc -l) &&
 
-	test -f a &&
-	test -f b &&
-	test -f c
+		test $(git rev-parse 3:a) = $(git rev-parse C:a) &&
+		test $(git rev-parse 1:a) = $(git rev-parse A:a) &&
+		test $(git rev-parse 2:b) = $(git rev-parse B:b) &&
+		test $(git rev-parse 3:c) = $(git rev-parse C:c) &&
+
+		test -f a &&
+		test -f b &&
+		test -f c
+	)
 '
 
 test_expect_success 'setup rename/rename(1to2)/add-source resolvable conflict' '
-	git rm -rf . &&
-	git clean -fdqx &&
-	rm -rf .git &&
-	git init &&
-
-	>a &&
-	git add a &&
-	test_tick &&
-	git commit -m base &&
-	git tag A &&
-
-	git checkout -b B A &&
-	git mv a b &&
-	test_tick &&
-	git commit -m one &&
-
-	git checkout -b C A &&
-	git mv a b &&
-	echo important-info >a &&
-	git add a &&
-	test_tick &&
-	git commit -m two
+	test_create_repo rename-rename-1to2-add-source-2 &&
+	(
+		cd rename-rename-1to2-add-source-2 &&
+
+		>a &&
+		git add a &&
+		test_tick &&
+		git commit -m base &&
+		git tag A &&
+
+		git checkout -b B A &&
+		git mv a b &&
+		test_tick &&
+		git commit -m one &&
+
+		git checkout -b C A &&
+		git mv a b &&
+		echo important-info >a &&
+		git add a &&
+		test_tick &&
+		git commit -m two
+	)
 '
 
 test_expect_failure 'rename/rename/add-source still tracks new a file' '
-	git checkout C^0 &&
-	git merge -s recursive B^0 &&
+	(
+		cd rename-rename-1to2-add-source-2 &&
+
+		git checkout C^0 &&
+		git merge -s recursive B^0 &&
 
-	test 2 -eq $(git ls-files -s | wc -l) &&
-	test 0 -eq $(git ls-files -o | wc -l) &&
+		test 2 -eq $(git ls-files -s | wc -l) &&
+		test 0 -eq $(git ls-files -o | wc -l) &&
 
-	test $(git rev-parse HEAD:a) = $(git rev-parse C:a) &&
-	test $(git rev-parse HEAD:b) = $(git rev-parse A:a)
+		test $(git rev-parse HEAD:a) = $(git rev-parse C:a) &&
+		test $(git rev-parse HEAD:b) = $(git rev-parse A:a)
+	)
 '
 
 test_expect_success 'setup rename/rename(1to2)/add-dest conflict' '
-	git rm -rf . &&
-	git clean -fdqx &&
-	rm -rf .git &&
-	git init &&
-
-	echo stuff >a &&
-	git add a &&
-	test_tick &&
-	git commit -m base &&
-	git tag A &&
-
-	git checkout -b B A &&
-	git mv a b &&
-	echo precious-data >c &&
-	git add c &&
-	test_tick &&
-	git commit -m one &&
-
-	git checkout -b C A &&
-	git mv a c &&
-	echo important-info >b &&
-	git add b &&
-	test_tick &&
-	git commit -m two
+	test_create_repo rename-rename-1to2-add-dest &&
+	(
+		cd rename-rename-1to2-add-dest &&
+
+		echo stuff >a &&
+		git add a &&
+		test_tick &&
+		git commit -m base &&
+		git tag A &&
+
+		git checkout -b B A &&
+		git mv a b &&
+		echo precious-data >c &&
+		git add c &&
+		test_tick &&
+		git commit -m one &&
+
+		git checkout -b C A &&
+		git mv a c &&
+		echo important-info >b &&
+		git add b &&
+		test_tick &&
+		git commit -m two
+	)
 '
 
 test_expect_success 'rename/rename/add-dest merge still knows about conflicting file versions' '
-	git checkout C^0 &&
-	test_must_fail git merge -s recursive B^0 &&
-
-	test 5 -eq $(git ls-files -s | wc -l) &&
-	test 2 -eq $(git ls-files -u b | wc -l) &&
-	test 2 -eq $(git ls-files -u c | wc -l) &&
-	test 4 -eq $(git ls-files -o | wc -l) &&
-
-	test $(git rev-parse :1:a) = $(git rev-parse A:a) &&
-	test $(git rev-parse :2:b) = $(git rev-parse C:b) &&
-	test $(git rev-parse :3:b) = $(git rev-parse B:b) &&
-	test $(git rev-parse :2:c) = $(git rev-parse C:c) &&
-	test $(git rev-parse :3:c) = $(git rev-parse B:c) &&
-
-	test $(git hash-object c~HEAD) = $(git rev-parse C:c) &&
-	test $(git hash-object c~B\^0) = $(git rev-parse B:c) &&
-	test $(git hash-object b~HEAD) = $(git rev-parse C:b) &&
-	test $(git hash-object b~B\^0) = $(git rev-parse B:b) &&
-
-	test ! -f b &&
-	test ! -f c
+	(
+		cd rename-rename-1to2-add-dest &&
+
+		git checkout C^0 &&
+		test_must_fail git merge -s recursive B^0 &&
+
+		test 5 -eq $(git ls-files -s | wc -l) &&
+		test 2 -eq $(git ls-files -u b | wc -l) &&
+		test 2 -eq $(git ls-files -u c | wc -l) &&
+		test 4 -eq $(git ls-files -o | wc -l) &&
+
+		test $(git rev-parse :1:a) = $(git rev-parse A:a) &&
+		test $(git rev-parse :2:b) = $(git rev-parse C:b) &&
+		test $(git rev-parse :3:b) = $(git rev-parse B:b) &&
+		test $(git rev-parse :2:c) = $(git rev-parse C:c) &&
+		test $(git rev-parse :3:c) = $(git rev-parse B:c) &&
+
+		test $(git hash-object c~HEAD) = $(git rev-parse C:c) &&
+		test $(git hash-object c~B\^0) = $(git rev-parse B:c) &&
+		test $(git hash-object b~HEAD) = $(git rev-parse C:b) &&
+		test $(git hash-object b~B\^0) = $(git rev-parse B:b) &&
+
+		test ! -f b &&
+		test ! -f c
+	)
 '
 
 test_done
-- 
2.17.0.1.gda85003413


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 2/5] t6036, t6042: use test_line_count instead of wc -l
  2018-05-24  7:04 [PATCH 0/5] Modernize some testcases for merge-recursive corner cases Elijah Newren
  2018-05-24  7:04 ` [PATCH 1/5] t6036, t6042: use test_create_repo to keep tests independent Elijah Newren
@ 2018-05-24  7:04 ` Elijah Newren
  2018-05-24 10:05   ` SZEDER Gábor
  2018-05-24  7:04 ` [PATCH 3/5] t6036, t6042: prefer test_path_is_file, test_path_is_missing Elijah Newren
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 11+ messages in thread
From: Elijah Newren @ 2018-05-24  7:04 UTC (permalink / raw)
  To: git; +Cc: gitster, Elijah Newren

Signed-off-by: Elijah Newren <newren@gmail.com>
---
 t/t6036-recursive-corner-cases.sh    | 102 ++++++++++++++++++---------
 t/t6042-merge-rename-corner-cases.sh |  99 +++++++++++++++++---------
 2 files changed, 134 insertions(+), 67 deletions(-)

diff --git a/t/t6036-recursive-corner-cases.sh b/t/t6036-recursive-corner-cases.sh
index cfe6a99771..3e659cff28 100755
--- a/t/t6036-recursive-corner-cases.sh
+++ b/t/t6036-recursive-corner-cases.sh
@@ -65,9 +65,12 @@ test_expect_success 'merge simple rename+criss-cross with no modifications' '
 
 		test_must_fail git merge -s recursive R2^0 &&
 
-		test 2 = $(git ls-files -s | wc -l) &&
-		test 2 = $(git ls-files -u | wc -l) &&
-		test 2 = $(git ls-files -o | wc -l) &&
+		git ls-files -s >out &&
+		test_line_count = 2 out &&
+		git ls-files -u >out &&
+		test_line_count = 2 out &&
+		git ls-files -o >out &&
+		test_line_count = 3 out &&
 
 		test $(git rev-parse :2:three) = $(git rev-parse L2:three) &&
 		test $(git rev-parse :3:three) = $(git rev-parse R2:three) &&
@@ -135,9 +138,12 @@ test_expect_success 'merge criss-cross + rename merges with basic modification'
 
 		test_must_fail git merge -s recursive R2^0 &&
 
-		test 2 = $(git ls-files -s | wc -l) &&
-		test 2 = $(git ls-files -u | wc -l) &&
-		test 2 = $(git ls-files -o | wc -l) &&
+		git ls-files -s >out &&
+		test_line_count = 2 out &&
+		git ls-files -u >out &&
+		test_line_count = 2 out &&
+		git ls-files -o >out &&
+		test_line_count = 3 out &&
 
 		test $(git rev-parse :2:three) = $(git rev-parse L2:three) &&
 		test $(git rev-parse :3:three) = $(git rev-parse R2:three) &&
@@ -211,9 +217,12 @@ test_expect_success 'git detects differently handled merges conflict' '
 
 		test_must_fail git merge -s recursive E^0 &&
 
-		test 3 = $(git ls-files -s | wc -l) &&
-		test 3 = $(git ls-files -u | wc -l) &&
-		test 0 = $(git ls-files -o | wc -l) &&
+		git ls-files -s >out &&
+		test_line_count = 3 out &&
+		git ls-files -u >out &&
+		test_line_count = 3 out &&
+		git ls-files -o >out &&
+		test_line_count = 1 out &&
 
 		test $(git rev-parse :2:new_a) = $(git rev-parse D:new_a) &&
 		test $(git rev-parse :3:new_a) = $(git rev-parse E:new_a) &&
@@ -297,8 +306,10 @@ test_expect_success 'git detects conflict merging criss-cross+modify/delete' '
 
 		test_must_fail git merge -s recursive E^0 &&
 
-		test 2 -eq $(git ls-files -s | wc -l) &&
-		test 2 -eq $(git ls-files -u | wc -l) &&
+		git ls-files -s >out &&
+		test_line_count = 2 out &&
+		git ls-files -u >out &&
+		test_line_count = 2 out &&
 
 		test $(git rev-parse :1:file) = $(git rev-parse master:file) &&
 		test $(git rev-parse :2:file) = $(git rev-parse B:file)
@@ -314,8 +325,10 @@ test_expect_success 'git detects conflict merging criss-cross+modify/delete, rev
 
 		test_must_fail git merge -s recursive D^0 &&
 
-		test 2 -eq $(git ls-files -s | wc -l) &&
-		test 2 -eq $(git ls-files -u | wc -l) &&
+		git ls-files -s >out &&
+		test_line_count = 2 out &&
+		git ls-files -u >out &&
+		test_line_count = 2 out &&
 
 		test $(git rev-parse :1:file) = $(git rev-parse master:file) &&
 		test $(git rev-parse :3:file) = $(git rev-parse B:file)
@@ -423,9 +436,12 @@ test_expect_success 'merge of D & E1 fails but has appropriate contents' '
 
 		test_must_fail git merge -s recursive E1^0 &&
 
-		test 2 -eq $(git ls-files -s | wc -l) &&
-		test 1 -eq $(git ls-files -u | wc -l) &&
-		test 0 -eq $(git ls-files -o | wc -l) &&
+		git ls-files -s >out &&
+		test_line_count = 2 out &&
+		git ls-files -u >out &&
+		test_line_count = 1 out &&
+		git ls-files -o >out &&
+		test_line_count = 1 out &&
 
 		test $(git rev-parse :0:ignore-me) = $(git rev-parse A:ignore-me) &&
 		test $(git rev-parse :2:a) = $(git rev-parse B:a)
@@ -440,9 +456,12 @@ test_expect_success 'merge of E1 & D fails but has appropriate contents' '
 
 		test_must_fail git merge -s recursive D^0 &&
 
-		test 2 -eq $(git ls-files -s | wc -l) &&
-		test 1 -eq $(git ls-files -u | wc -l) &&
-		test 0 -eq $(git ls-files -o | wc -l) &&
+		git ls-files -s >out &&
+		test_line_count = 2 out &&
+		git ls-files -u >out &&
+		test_line_count = 1 out &&
+		git ls-files -o >out &&
+		test_line_count = 1 out &&
 
 		test $(git rev-parse :0:ignore-me) = $(git rev-parse A:ignore-me) &&
 		test $(git rev-parse :3:a) = $(git rev-parse B:a)
@@ -457,9 +476,12 @@ test_expect_success 'merge of D & E2 fails but has appropriate contents' '
 
 		test_must_fail git merge -s recursive E2^0 &&
 
-		test 4 -eq $(git ls-files -s | wc -l) &&
-		test 3 -eq $(git ls-files -u | wc -l) &&
-		test 1 -eq $(git ls-files -o | wc -l) &&
+		git ls-files -s >out &&
+		test_line_count = 4 out &&
+		git ls-files -u >out &&
+		test_line_count = 3 out &&
+		git ls-files -o >out &&
+		test_line_count = 2 out &&
 
 		test $(git rev-parse :2:a) = $(git rev-parse B:a) &&
 		test $(git rev-parse :3:a/file) = $(git rev-parse E2:a/file) &&
@@ -478,9 +500,12 @@ test_expect_success 'merge of E2 & D fails but has appropriate contents' '
 
 		test_must_fail git merge -s recursive D^0 &&
 
-		test 4 -eq $(git ls-files -s | wc -l) &&
-		test 3 -eq $(git ls-files -u | wc -l) &&
-		test 1 -eq $(git ls-files -o | wc -l) &&
+		git ls-files -s >out &&
+		test_line_count = 4 out &&
+		git ls-files -u >out &&
+		test_line_count = 3 out &&
+		git ls-files -o >out &&
+		test_line_count = 2 out &&
 
 		test $(git rev-parse :3:a) = $(git rev-parse B:a) &&
 		test $(git rev-parse :2:a/file) = $(git rev-parse E2:a/file) &&
@@ -574,9 +599,12 @@ test_expect_success 'handle rename/rename(1to2)/modify followed by what looks li
 
 		git merge -s recursive E^0 &&
 
-		test 1 -eq $(git ls-files -s | wc -l) &&
-		test 0 -eq $(git ls-files -u | wc -l) &&
-		test 0 -eq $(git ls-files -o | wc -l) &&
+		git ls-files -s >out &&
+		test_line_count = 1 out &&
+		git ls-files -u >out &&
+		test_line_count = 0 out &&
+		git ls-files -o >out &&
+		test_line_count = 1 out &&
 
 		test $(git rev-parse HEAD:newname) = $(git rev-parse E:newname)
 	)
@@ -653,9 +681,12 @@ test_expect_failure 'detect rename/rename/add-source for virtual merge-base' '
 
 		git merge -s recursive E^0 &&
 
-		test 3 -eq $(git ls-files -s | wc -l) &&
-		test 0 -eq $(git ls-files -u | wc -l) &&
-		test 0 -eq $(git ls-files -o | wc -l) &&
+		git ls-files -s >out &&
+		test_line_count = 3 out &&
+		git ls-files -u >out &&
+		test_line_count = 0 out &&
+		git ls-files -o >out &&
+		test_line_count = 1 out &&
 
 		test $(git rev-parse HEAD:b) = $(git rev-parse A:a) &&
 		test $(git rev-parse HEAD:c) = $(git rev-parse A:a) &&
@@ -727,9 +758,12 @@ test_expect_success 'virtual merge base handles rename/rename(1to2)/add-dest' '
 
 		git merge -s recursive E^0 &&
 
-		test 2 -eq $(git ls-files -s | wc -l) &&
-		test 0 -eq $(git ls-files -u | wc -l) &&
-		test 0 -eq $(git ls-files -o | wc -l) &&
+		git ls-files -s >out &&
+		test_line_count = 2 out &&
+		git ls-files -u >out &&
+		test_line_count = 0 out &&
+		git ls-files -o >out &&
+		test_line_count = 1 out &&
 
 		test $(git rev-parse HEAD:a) = $(git rev-parse A:a) &&
 		test $(git rev-parse HEAD:c) = $(git rev-parse E:c)
diff --git a/t/t6042-merge-rename-corner-cases.sh b/t/t6042-merge-rename-corner-cases.sh
index bec0192c3b..b76da8fcdf 100755
--- a/t/t6042-merge-rename-corner-cases.sh
+++ b/t/t6042-merge-rename-corner-cases.sh
@@ -116,9 +116,12 @@ test_expect_failure 'conflict caused if rename not detected' '
 		git checkout -q C^0 &&
 		git merge -s recursive B^0 &&
 
-		test 3 -eq $(git ls-files -s | wc -l) &&
-		test 0 -eq $(git ls-files -u | wc -l) &&
-		test 0 -eq $(git ls-files -o | wc -l) &&
+		git ls-files -s >out &&
+		test_line_count = 3 out &&
+		git ls-files -u >out &&
+		test_line_count = 0 out &&
+		git ls-files -o >out &&
+		test_line_count = 1 out &&
 
 		test_line_count = 6 c &&
 		test $(git rev-parse HEAD:a) = $(git rev-parse B:a) &&
@@ -203,9 +206,12 @@ test_expect_failure 'detect rename/add-source and preserve all data' '
 
 		git merge -s recursive C^0 &&
 
-		test 2 -eq $(git ls-files -s | wc -l) &&
-		test 2 -eq $(git ls-files -u | wc -l) &&
-		test 0 -eq $(git ls-files -o | wc -l) &&
+		git ls-files -s >out &&
+		test_line_count = 2 out &&
+		git ls-files -u >out &&
+		test_line_count = 2 out &&
+		git ls-files -o >out &&
+		test_line_count = 1 out &&
 
 		test -f a &&
 		test -f b &&
@@ -223,9 +229,12 @@ test_expect_failure 'detect rename/add-source and preserve all data, merge other
 
 		git merge -s recursive B^0 &&
 
-		test 2 -eq $(git ls-files -s | wc -l) &&
-		test 2 -eq $(git ls-files -u | wc -l) &&
-		test 0 -eq $(git ls-files -o | wc -l) &&
+		git ls-files -s >out &&
+		test_line_count = 2 out &&
+		git ls-files -u >out &&
+		test_line_count = 2 out &&
+		git ls-files -o >out &&
+		test_line_count = 1 out &&
 
 		test -f a &&
 		test -f b &&
@@ -279,9 +288,12 @@ test_expect_success 'rename/directory conflict + clean content merge' '
 
 		test_must_fail git merge -s recursive right^0 &&
 
-		test 2 -eq $(git ls-files -s | wc -l) &&
-		test 1 -eq $(git ls-files -u | wc -l) &&
-		test 1 -eq $(git ls-files -o | wc -l) &&
+		git ls-files -s >out &&
+		test_line_count = 2 out &&
+		git ls-files -u >out &&
+		test_line_count = 1 out &&
+		git ls-files -o >out &&
+		test_line_count = 2 out &&
 
 		echo 0 >expect &&
 		git cat-file -p base:file >>expect &&
@@ -307,9 +319,12 @@ test_expect_success 'rename/directory conflict + content merge conflict' '
 
 		test_must_fail git merge -s recursive right^0 &&
 
-		test 4 -eq $(git ls-files -s | wc -l) &&
-		test 3 -eq $(git ls-files -u | wc -l) &&
-		test 1 -eq $(git ls-files -o | wc -l) &&
+		git ls-files -s >out &&
+		test_line_count = 4 out &&
+		git ls-files -u >out &&
+		test_line_count = 3 out &&
+		git ls-files -o >out &&
+		test_line_count = 2 out &&
 
 		git cat-file -p left-conflict:newfile >left &&
 		git cat-file -p base:file    >base &&
@@ -367,9 +382,12 @@ test_expect_success 'disappearing dir in rename/directory conflict handled' '
 
 		git merge -s recursive right^0 &&
 
-		test 1 -eq $(git ls-files -s | wc -l) &&
-		test 0 -eq $(git ls-files -u | wc -l) &&
-		test 0 -eq $(git ls-files -o | wc -l) &&
+		git ls-files -s >out &&
+		test_line_count = 1 out &&
+		git ls-files -u >out &&
+		test_line_count = 0 out &&
+		git ls-files -o >out &&
+		test_line_count = 1 out &&
 
 		echo 0 >expect &&
 		git cat-file -p base:sub/file >>expect &&
@@ -426,10 +444,14 @@ test_expect_success 'handle rename/rename (2to1) conflict correctly' '
 		test_must_fail git merge -s recursive C^0 >out &&
 		test_i18ngrep "CONFLICT (rename/rename)" out &&
 
-		test 2 -eq $(git ls-files -s | wc -l) &&
-		test 2 -eq $(git ls-files -u | wc -l) &&
-		test 2 -eq $(git ls-files -u c | wc -l) &&
-		test 3 -eq $(git ls-files -o | wc -l) &&
+		git ls-files -s >out &&
+		test_line_count = 2 out &&
+		git ls-files -u >out &&
+		test_line_count = 2 out &&
+		git ls-files -u c >out &&
+		test_line_count = 2 out &&
+		git ls-files -o >out &&
+		test_line_count = 3 out &&
 
 		test ! -f a &&
 		test ! -f b &&
@@ -476,9 +498,12 @@ test_expect_success 'merge has correct working tree contents' '
 
 		test_must_fail git merge -s recursive B^0 &&
 
-		test 3 -eq $(git ls-files -s | wc -l) &&
-		test 3 -eq $(git ls-files -u | wc -l) &&
-		test 0 -eq $(git ls-files -o | wc -l) &&
+		git ls-files -s >out &&
+		test_line_count = 3 out &&
+		git ls-files -u >out &&
+		test_line_count = 3 out &&
+		git ls-files -o >out &&
+		test_line_count = 1 out &&
 
 		test $(git rev-parse :1:a) = $(git rev-parse A:a) &&
 		test $(git rev-parse :3:b) = $(git rev-parse A:a) &&
@@ -527,8 +552,10 @@ test_expect_failure 'detect conflict with rename/rename(1to2)/add-source merge'
 
 		test_must_fail git merge -s recursive C^0 &&
 
-		test 4 -eq $(git ls-files -s | wc -l) &&
-		test 0 -eq $(git ls-files -o | wc -l) &&
+		git ls-files -s >out &&
+		test_line_count = 4 out &&
+		git ls-files -o >out &&
+		test_line_count = 1 out &&
 
 		test $(git rev-parse 3:a) = $(git rev-parse C:a) &&
 		test $(git rev-parse 1:a) = $(git rev-parse A:a) &&
@@ -573,8 +600,10 @@ test_expect_failure 'rename/rename/add-source still tracks new a file' '
 		git checkout C^0 &&
 		git merge -s recursive B^0 &&
 
-		test 2 -eq $(git ls-files -s | wc -l) &&
-		test 0 -eq $(git ls-files -o | wc -l) &&
+		git ls-files -s >out &&
+		test_line_count = 2 out &&
+		git ls-files -o >out &&
+		test_line_count = 1 out &&
 
 		test $(git rev-parse HEAD:a) = $(git rev-parse C:a) &&
 		test $(git rev-parse HEAD:b) = $(git rev-parse A:a)
@@ -615,10 +644,14 @@ test_expect_success 'rename/rename/add-dest merge still knows about conflicting
 		git checkout C^0 &&
 		test_must_fail git merge -s recursive B^0 &&
 
-		test 5 -eq $(git ls-files -s | wc -l) &&
-		test 2 -eq $(git ls-files -u b | wc -l) &&
-		test 2 -eq $(git ls-files -u c | wc -l) &&
-		test 4 -eq $(git ls-files -o | wc -l) &&
+		git ls-files -s >out &&
+		test_line_count = 5 out &&
+		git ls-files -u b >out &&
+		test_line_count = 2 out &&
+		git ls-files -u c >out &&
+		test_line_count = 2 out &&
+		git ls-files -o >out &&
+		test_line_count = 5 out &&
 
 		test $(git rev-parse :1:a) = $(git rev-parse A:a) &&
 		test $(git rev-parse :2:b) = $(git rev-parse C:b) &&
-- 
2.17.0.1.gda85003413


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 3/5] t6036, t6042: prefer test_path_is_file, test_path_is_missing
  2018-05-24  7:04 [PATCH 0/5] Modernize some testcases for merge-recursive corner cases Elijah Newren
  2018-05-24  7:04 ` [PATCH 1/5] t6036, t6042: use test_create_repo to keep tests independent Elijah Newren
  2018-05-24  7:04 ` [PATCH 2/5] t6036, t6042: use test_line_count instead of wc -l Elijah Newren
@ 2018-05-24  7:04 ` Elijah Newren
  2018-05-24  7:04 ` [PATCH 4/5] t6036, t6042: prefer test_cmp to sequences of test Elijah Newren
  2018-05-24  7:04 ` [PATCH 5/5] t6036: prefer test_when_finished to manual cleanup in following test Elijah Newren
  4 siblings, 0 replies; 11+ messages in thread
From: Elijah Newren @ 2018-05-24  7:04 UTC (permalink / raw)
  To: git; +Cc: gitster, Elijah Newren

Signed-off-by: Elijah Newren <newren@gmail.com>
---
 t/t6036-recursive-corner-cases.sh    |  4 +--
 t/t6042-merge-rename-corner-cases.sh | 40 ++++++++++++++--------------
 2 files changed, 22 insertions(+), 22 deletions(-)

diff --git a/t/t6036-recursive-corner-cases.sh b/t/t6036-recursive-corner-cases.sh
index 3e659cff28..b716155723 100755
--- a/t/t6036-recursive-corner-cases.sh
+++ b/t/t6036-recursive-corner-cases.sh
@@ -488,7 +488,7 @@ test_expect_success 'merge of D & E2 fails but has appropriate contents' '
 		test $(git rev-parse :1:a/file) = $(git rev-parse C:a/file) &&
 		test $(git rev-parse :0:ignore-me) = $(git rev-parse A:ignore-me) &&
 
-		test -f a~HEAD
+		test_path_is_file a~HEAD
 	)
 '
 
@@ -512,7 +512,7 @@ test_expect_success 'merge of E2 & D fails but has appropriate contents' '
 		test $(git rev-parse :1:a/file) = $(git rev-parse C:a/file) &&
 		test $(git rev-parse :0:ignore-me) = $(git rev-parse A:ignore-me) &&
 
-		test -f a~D^0
+		test_path_is_file a~D^0
 	)
 '
 
diff --git a/t/t6042-merge-rename-corner-cases.sh b/t/t6042-merge-rename-corner-cases.sh
index b76da8fcdf..90225b8bcd 100755
--- a/t/t6042-merge-rename-corner-cases.sh
+++ b/t/t6042-merge-rename-corner-cases.sh
@@ -38,7 +38,7 @@ test_expect_success "Does git preserve Gollum's precious artifact?" '
 		test_must_fail git merge -s recursive rename-the-ring &&
 
 		# Make sure git did not delete an untracked file
-		test -f ring
+		test_path_is_file ring
 	)
 '
 
@@ -213,8 +213,8 @@ test_expect_failure 'detect rename/add-source and preserve all data' '
 		git ls-files -o >out &&
 		test_line_count = 1 out &&
 
-		test -f a &&
-		test -f b &&
+		test_path_is_file a &&
+		test_path_is_file b &&
 
 		test $(git rev-parse HEAD:b) = $(git rev-parse A:a) &&
 		test $(git rev-parse HEAD:a) = $(git rev-parse C:a)
@@ -236,8 +236,8 @@ test_expect_failure 'detect rename/add-source and preserve all data, merge other
 		git ls-files -o >out &&
 		test_line_count = 1 out &&
 
-		test -f a &&
-		test -f b &&
+		test_path_is_file a &&
+		test_path_is_file b &&
 
 		test $(git rev-parse HEAD:b) = $(git rev-parse A:a) &&
 		test $(git rev-parse HEAD:a) = $(git rev-parse C:a)
@@ -302,8 +302,8 @@ test_expect_success 'rename/directory conflict + clean content merge' '
 
 		test $(git rev-parse :2:newfile) = $(git hash-object expect) &&
 
-		test -f newfile/realfile &&
-		test -f newfile~HEAD
+		test_path_is_file newfile/realfile &&
+		test_path_is_file newfile~HEAD
 	)
 '
 
@@ -340,8 +340,8 @@ test_expect_success 'rename/directory conflict + content merge conflict' '
 		test $(git rev-parse :2:newfile) = $(git rev-parse left-conflict:newfile) &&
 		test $(git rev-parse :3:newfile) = $(git rev-parse right:file) &&
 
-		test -f newfile/realfile &&
-		test -f newfile~HEAD
+		test_path_is_file newfile/realfile &&
+		test_path_is_file newfile~HEAD
 	)
 '
 
@@ -394,7 +394,7 @@ test_expect_success 'disappearing dir in rename/directory conflict handled' '
 		echo 7 >>expect &&
 		test_cmp expect sub &&
 
-		test -f sub
+		test_path_is_file sub
 	)
 '
 
@@ -453,10 +453,10 @@ test_expect_success 'handle rename/rename (2to1) conflict correctly' '
 		git ls-files -o >out &&
 		test_line_count = 3 out &&
 
-		test ! -f a &&
-		test ! -f b &&
-		test -f c~HEAD &&
-		test -f c~C^0 &&
+		test_path_is_missing a &&
+		test_path_is_missing b &&
+		test_path_is_file c~HEAD &&
+		test_path_is_file c~C^0 &&
 
 		test $(git hash-object c~HEAD) = $(git rev-parse C:a) &&
 		test $(git hash-object c~C^0) = $(git rev-parse B:b)
@@ -509,7 +509,7 @@ test_expect_success 'merge has correct working tree contents' '
 		test $(git rev-parse :3:b) = $(git rev-parse A:a) &&
 		test $(git rev-parse :2:c) = $(git rev-parse A:a) &&
 
-		test ! -f a &&
+		test_path_is_missing a &&
 		test $(git hash-object b) = $(git rev-parse A:a) &&
 		test $(git hash-object c) = $(git rev-parse A:a)
 	)
@@ -562,9 +562,9 @@ test_expect_failure 'detect conflict with rename/rename(1to2)/add-source merge'
 		test $(git rev-parse 2:b) = $(git rev-parse B:b) &&
 		test $(git rev-parse 3:c) = $(git rev-parse C:c) &&
 
-		test -f a &&
-		test -f b &&
-		test -f c
+		test_path_is_file a &&
+		test_path_is_file b &&
+		test_path_is_file c
 	)
 '
 
@@ -664,8 +664,8 @@ test_expect_success 'rename/rename/add-dest merge still knows about conflicting
 		test $(git hash-object b~HEAD) = $(git rev-parse C:b) &&
 		test $(git hash-object b~B\^0) = $(git rev-parse B:b) &&
 
-		test ! -f b &&
-		test ! -f c
+		test_path_is_missing b &&
+		test_path_is_missing c
 	)
 '
 
-- 
2.17.0.1.gda85003413


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 4/5] t6036, t6042: prefer test_cmp to sequences of test
  2018-05-24  7:04 [PATCH 0/5] Modernize some testcases for merge-recursive corner cases Elijah Newren
                   ` (2 preceding siblings ...)
  2018-05-24  7:04 ` [PATCH 3/5] t6036, t6042: prefer test_path_is_file, test_path_is_missing Elijah Newren
@ 2018-05-24  7:04 ` Elijah Newren
  2018-05-24  7:04 ` [PATCH 5/5] t6036: prefer test_when_finished to manual cleanup in following test Elijah Newren
  4 siblings, 0 replies; 11+ messages in thread
From: Elijah Newren @ 2018-05-24  7:04 UTC (permalink / raw)
  To: git; +Cc: gitster, Elijah Newren

Signed-off-by: Elijah Newren <newren@gmail.com>
---
 t/t6036-recursive-corner-cases.sh    | 109 +++++++++++++++++----------
 t/t6042-merge-rename-corner-cases.sh |  94 ++++++++++++++---------
 2 files changed, 130 insertions(+), 73 deletions(-)

diff --git a/t/t6036-recursive-corner-cases.sh b/t/t6036-recursive-corner-cases.sh
index b716155723..e5f167a06e 100755
--- a/t/t6036-recursive-corner-cases.sh
+++ b/t/t6036-recursive-corner-cases.sh
@@ -72,11 +72,14 @@ test_expect_success 'merge simple rename+criss-cross with no modifications' '
 		git ls-files -o >out &&
 		test_line_count = 3 out &&
 
-		test $(git rev-parse :2:three) = $(git rev-parse L2:three) &&
-		test $(git rev-parse :3:three) = $(git rev-parse R2:three) &&
-
-		test $(git rev-parse L2:three) = $(git hash-object three~HEAD) &&
-		test $(git rev-parse R2:three) = $(git hash-object three~R2^0)
+		git rev-parse >expect       \
+			L2:three   R2:three \
+			L2:three   R2:three &&
+		git rev-parse   >actual     \
+			:2:three   :3:three &&
+		git hash-object >>actual    \
+			three~HEAD three~R2^0
+		test_cmp expect actual
 	)
 '
 
@@ -145,11 +148,14 @@ test_expect_success 'merge criss-cross + rename merges with basic modification'
 		git ls-files -o >out &&
 		test_line_count = 3 out &&
 
-		test $(git rev-parse :2:three) = $(git rev-parse L2:three) &&
-		test $(git rev-parse :3:three) = $(git rev-parse R2:three) &&
-
-		test $(git rev-parse L2:three) = $(git hash-object three~HEAD) &&
-		test $(git rev-parse R2:three) = $(git hash-object three~R2^0)
+		git rev-parse >expect       \
+			L2:three   R2:three \
+			L2:three   R2:three &&
+		git rev-parse   >actual     \
+			:2:three   :3:three &&
+		git hash-object >>actual    \
+			three~HEAD three~R2^0
+		test_cmp expect actual
 	)
 '
 
@@ -224,19 +230,23 @@ test_expect_success 'git detects differently handled merges conflict' '
 		git ls-files -o >out &&
 		test_line_count = 1 out &&
 
-		test $(git rev-parse :2:new_a) = $(git rev-parse D:new_a) &&
-		test $(git rev-parse :3:new_a) = $(git rev-parse E:new_a) &&
+		git rev-parse >expect       \
+			D:new_a  E:new_a &&
+		git rev-parse   >actual     \
+			:2:new_a :3:new_a &&
+		test_cmp expect actual
 
-		git cat-file -p B:new_a >>merged &&
-		git cat-file -p C:new_a >>merge-me &&
+		git cat-file -p B:new_a >ours &&
+		git cat-file -p C:new_a >theirs &&
 		>empty &&
 		test_must_fail git merge-file \
 			-L "Temporary merge branch 2" \
 			-L "" \
 			-L "Temporary merge branch 1" \
-			merged empty merge-me &&
-		sed -e "s/^\([<=>]\)/\1\1\1/" merged >merged-internal &&
-		test $(git rev-parse :1:new_a) = $(git hash-object merged-internal)
+			ours empty theirs &&
+		sed -e "s/^\([<=>]\)/\1\1\1/" ours >expect &&
+		git cat-file -p :1:new_a >actual &&
+		test_cmp expect actual
 	)
 '
 
@@ -311,8 +321,11 @@ test_expect_success 'git detects conflict merging criss-cross+modify/delete' '
 		git ls-files -u >out &&
 		test_line_count = 2 out &&
 
-		test $(git rev-parse :1:file) = $(git rev-parse master:file) &&
-		test $(git rev-parse :2:file) = $(git rev-parse B:file)
+		git rev-parse >expect       \
+			master:file  B:file &&
+		git rev-parse   >actual      \
+			:1:file      :2:file &&
+		test_cmp expect actual
 	)
 '
 
@@ -330,8 +343,11 @@ test_expect_success 'git detects conflict merging criss-cross+modify/delete, rev
 		git ls-files -u >out &&
 		test_line_count = 2 out &&
 
-		test $(git rev-parse :1:file) = $(git rev-parse master:file) &&
-		test $(git rev-parse :3:file) = $(git rev-parse B:file)
+		git rev-parse >expect       \
+			master:file  B:file &&
+		git rev-parse   >actual      \
+			:1:file      :3:file &&
+		test_cmp expect actual
 	)
 '
 
@@ -443,8 +459,11 @@ test_expect_success 'merge of D & E1 fails but has appropriate contents' '
 		git ls-files -o >out &&
 		test_line_count = 1 out &&
 
-		test $(git rev-parse :0:ignore-me) = $(git rev-parse A:ignore-me) &&
-		test $(git rev-parse :2:a) = $(git rev-parse B:a)
+		git rev-parse >expect    \
+			A:ignore-me  B:a &&
+		git rev-parse   >actual   \
+			:0:ignore-me :2:a &&
+		test_cmp expect actual
 	)
 '
 
@@ -463,8 +482,11 @@ test_expect_success 'merge of E1 & D fails but has appropriate contents' '
 		git ls-files -o >out &&
 		test_line_count = 1 out &&
 
-		test $(git rev-parse :0:ignore-me) = $(git rev-parse A:ignore-me) &&
-		test $(git rev-parse :3:a) = $(git rev-parse B:a)
+		git rev-parse >expect    \
+			A:ignore-me  B:a &&
+		git rev-parse   >actual   \
+			:0:ignore-me :3:a &&
+		test_cmp expect actual
 	)
 '
 
@@ -483,10 +505,11 @@ test_expect_success 'merge of D & E2 fails but has appropriate contents' '
 		git ls-files -o >out &&
 		test_line_count = 2 out &&
 
-		test $(git rev-parse :2:a) = $(git rev-parse B:a) &&
-		test $(git rev-parse :3:a/file) = $(git rev-parse E2:a/file) &&
-		test $(git rev-parse :1:a/file) = $(git rev-parse C:a/file) &&
-		test $(git rev-parse :0:ignore-me) = $(git rev-parse A:ignore-me) &&
+		git rev-parse >expect    \
+			B:a   E2:a/file  c:a/file   A:ignore-me &&
+		git rev-parse   >actual   \
+			:2:a  :3:a/file  :1:a/file  :0:ignore-me &&
+		test_cmp expect actual
 
 		test_path_is_file a~HEAD
 	)
@@ -507,10 +530,11 @@ test_expect_success 'merge of E2 & D fails but has appropriate contents' '
 		git ls-files -o >out &&
 		test_line_count = 2 out &&
 
-		test $(git rev-parse :3:a) = $(git rev-parse B:a) &&
-		test $(git rev-parse :2:a/file) = $(git rev-parse E2:a/file) &&
-		test $(git rev-parse :1:a/file) = $(git rev-parse C:a/file) &&
-		test $(git rev-parse :0:ignore-me) = $(git rev-parse A:ignore-me) &&
+		git rev-parse >expect    \
+			B:a   E2:a/file  c:a/file   A:ignore-me &&
+		git rev-parse   >actual   \
+			:3:a  :2:a/file  :1:a/file  :0:ignore-me &&
+		test_cmp expect actual
 
 		test_path_is_file a~D^0
 	)
@@ -688,9 +712,15 @@ test_expect_failure 'detect rename/rename/add-source for virtual merge-base' '
 		git ls-files -o >out &&
 		test_line_count = 1 out &&
 
-		test $(git rev-parse HEAD:b) = $(git rev-parse A:a) &&
-		test $(git rev-parse HEAD:c) = $(git rev-parse A:a) &&
-		test "$(cat a)" = "$(printf "1\n2\n3\n4\n5\n6\n7\n8\n")"
+		printf "1\n2\n3\n4\n5\n6\n7\n8\n" >correct &&
+		git rev-parse >expect \
+			A:a   A:a     \
+			correct       &&
+		git rev-parse   >actual  \
+			:0:b  :0:c       &&
+		git hash-object >>actual \
+			a                &&
+		test_cmp expect actual
 	)
 '
 
@@ -765,8 +795,11 @@ test_expect_success 'virtual merge base handles rename/rename(1to2)/add-dest' '
 		git ls-files -o >out &&
 		test_line_count = 1 out &&
 
-		test $(git rev-parse HEAD:a) = $(git rev-parse A:a) &&
-		test $(git rev-parse HEAD:c) = $(git rev-parse E:c)
+		git rev-parse >expect \
+			A:a   E:c     &&
+		git rev-parse   >actual \
+			:0:a  :0:c      &&
+		test_cmp expect actual
 	)
 '
 
diff --git a/t/t6042-merge-rename-corner-cases.sh b/t/t6042-merge-rename-corner-cases.sh
index 90225b8bcd..1cbd946fc2 100755
--- a/t/t6042-merge-rename-corner-cases.sh
+++ b/t/t6042-merge-rename-corner-cases.sh
@@ -80,8 +80,11 @@ test_expect_failure 'rename/modify/add-source conflict resolvable' '
 
 		git merge -s recursive C^0 &&
 
-		test $(git rev-parse B:a) = $(git rev-parse b) &&
-		test $(git rev-parse C:a) = $(git rev-parse a)
+		git rev-parse >expect \
+			B:a   C:a     &&
+		git rev-parse >actual \
+			b     c       &&
+		test_cmp expect actual
 	)
 '
 
@@ -124,8 +127,11 @@ test_expect_failure 'conflict caused if rename not detected' '
 		test_line_count = 1 out &&
 
 		test_line_count = 6 c &&
-		test $(git rev-parse HEAD:a) = $(git rev-parse B:a) &&
-		test $(git rev-parse HEAD:b) = $(git rev-parse A:b)
+		git rev-parse >expect \
+			B:a   A:b     &&
+		git rev-parse >actual \
+			:0:a  :0:b    &&
+		test_cmp expect actual
 	)
 '
 
@@ -216,8 +222,11 @@ test_expect_failure 'detect rename/add-source and preserve all data' '
 		test_path_is_file a &&
 		test_path_is_file b &&
 
-		test $(git rev-parse HEAD:b) = $(git rev-parse A:a) &&
-		test $(git rev-parse HEAD:a) = $(git rev-parse C:a)
+		git rev-parse >expect \
+			A:a   C:a     &&
+		git rev-parse >actual \
+			:0:b  :0:a    &&
+		test_cmp expect actual
 	)
 '
 
@@ -239,8 +248,11 @@ test_expect_failure 'detect rename/add-source and preserve all data, merge other
 		test_path_is_file a &&
 		test_path_is_file b &&
 
-		test $(git rev-parse HEAD:b) = $(git rev-parse A:a) &&
-		test $(git rev-parse HEAD:a) = $(git rev-parse C:a)
+		git rev-parse >expect \
+			A:a   C:a     &&
+		git rev-parse >actual \
+			:0:b  :0:a    &&
+		test_cmp expect actual
 	)
 '
 
@@ -336,9 +348,11 @@ test_expect_success 'rename/directory conflict + content merge conflict' '
 			left base right &&
 		test_cmp left newfile~HEAD &&
 
-		test $(git rev-parse :1:newfile) = $(git rev-parse base:file) &&
-		test $(git rev-parse :2:newfile) = $(git rev-parse left-conflict:newfile) &&
-		test $(git rev-parse :3:newfile) = $(git rev-parse right:file) &&
+		git rev-parse >expect                                 \
+			base:file   left-conflict:newfile  right:file &&
+		git rev-parse >actual                                 \
+			:1:newfile  :2:newfile             :3:newfile &&
+		test_cmp expect actual
 
 		test_path_is_file newfile/realfile &&
 		test_path_is_file newfile~HEAD
@@ -458,8 +472,11 @@ test_expect_success 'handle rename/rename (2to1) conflict correctly' '
 		test_path_is_file c~HEAD &&
 		test_path_is_file c~C^0 &&
 
-		test $(git hash-object c~HEAD) = $(git rev-parse C:a) &&
-		test $(git hash-object c~C^0) = $(git rev-parse B:b)
+		git rev-parse >expect   \
+			C:a     B:b     &&
+		git hash-object >actual \
+			c~HEAD  c~C^0   &&
+		test_cmp expect actual
 	)
 '
 
@@ -505,13 +522,15 @@ test_expect_success 'merge has correct working tree contents' '
 		git ls-files -o >out &&
 		test_line_count = 1 out &&
 
-		test $(git rev-parse :1:a) = $(git rev-parse A:a) &&
-		test $(git rev-parse :3:b) = $(git rev-parse A:a) &&
-		test $(git rev-parse :2:c) = $(git rev-parse A:a) &&
-
 		test_path_is_missing a &&
-		test $(git hash-object b) = $(git rev-parse A:a) &&
-		test $(git hash-object c) = $(git rev-parse A:a)
+		git rev-parse >expect   \
+			A:a   A:a   A:a \
+			A:a   A:a       &&
+		git rev-parse >actual    \
+			:1:a  :3:b  :2:c &&
+		git hash-object >>actual \
+			b     c          &&
+		test_cmp expect actual
 	)
 '
 
@@ -557,10 +576,11 @@ test_expect_failure 'detect conflict with rename/rename(1to2)/add-source merge'
 		git ls-files -o >out &&
 		test_line_count = 1 out &&
 
-		test $(git rev-parse 3:a) = $(git rev-parse C:a) &&
-		test $(git rev-parse 1:a) = $(git rev-parse A:a) &&
-		test $(git rev-parse 2:b) = $(git rev-parse B:b) &&
-		test $(git rev-parse 3:c) = $(git rev-parse C:c) &&
+		git rev-parse >expect         \
+			C:a   A:a   B:b   C:C &&
+		git rev-parse >actual          \
+			:3:a  :1:a  :2:b  :3:c &&
+		test_cmp expect actual
 
 		test_path_is_file a &&
 		test_path_is_file b &&
@@ -605,8 +625,11 @@ test_expect_failure 'rename/rename/add-source still tracks new a file' '
 		git ls-files -o >out &&
 		test_line_count = 1 out &&
 
-		test $(git rev-parse HEAD:a) = $(git rev-parse C:a) &&
-		test $(git rev-parse HEAD:b) = $(git rev-parse A:a)
+		git rev-parse >expect \
+			C:a   A:a     &&
+		git rev-parse >actual \
+			:0:a  :0:b    &&
+		test_cmp expect actual
 	)
 '
 
@@ -653,16 +676,17 @@ test_expect_success 'rename/rename/add-dest merge still knows about conflicting
 		git ls-files -o >out &&
 		test_line_count = 5 out &&
 
-		test $(git rev-parse :1:a) = $(git rev-parse A:a) &&
-		test $(git rev-parse :2:b) = $(git rev-parse C:b) &&
-		test $(git rev-parse :3:b) = $(git rev-parse B:b) &&
-		test $(git rev-parse :2:c) = $(git rev-parse C:c) &&
-		test $(git rev-parse :3:c) = $(git rev-parse B:c) &&
-
-		test $(git hash-object c~HEAD) = $(git rev-parse C:c) &&
-		test $(git hash-object c~B\^0) = $(git rev-parse B:c) &&
-		test $(git hash-object b~HEAD) = $(git rev-parse C:b) &&
-		test $(git hash-object b~B\^0) = $(git rev-parse B:b) &&
+		git rev-parse >expect               \
+			A:a   C:b   B:b   C:c   B:c &&
+		git rev-parse >actual                \
+			:1:a  :2:b  :3:b  :2:c  :3:c &&
+		test_cmp expect actual
+
+		git rev-parse >expect               \
+			C:c     B:c     C:b     B:b &&
+		git hash-object >actual                \
+			c~HEAD  c~B\^0  b~HEAD  b~B\^0 &&
+		test_cmp expect actual
 
 		test_path_is_missing b &&
 		test_path_is_missing c
-- 
2.17.0.1.gda85003413


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 5/5] t6036: prefer test_when_finished to manual cleanup in following test
  2018-05-24  7:04 [PATCH 0/5] Modernize some testcases for merge-recursive corner cases Elijah Newren
                   ` (3 preceding siblings ...)
  2018-05-24  7:04 ` [PATCH 4/5] t6036, t6042: prefer test_cmp to sequences of test Elijah Newren
@ 2018-05-24  7:04 ` Elijah Newren
  4 siblings, 0 replies; 11+ messages in thread
From: Elijah Newren @ 2018-05-24  7:04 UTC (permalink / raw)
  To: git; +Cc: gitster, Elijah Newren

Manually cleaning up from former tests in subsequent ones breaks the
ability to select which tests we want to run.  Use test_when_finished to
avoid this problem.

Signed-off-by: Elijah Newren <newren@gmail.com>
---
 t/t6036-recursive-corner-cases.sh | 22 ++++++++++++----------
 1 file changed, 12 insertions(+), 10 deletions(-)

diff --git a/t/t6036-recursive-corner-cases.sh b/t/t6036-recursive-corner-cases.sh
index e5f167a06e..b5621303d6 100755
--- a/t/t6036-recursive-corner-cases.sh
+++ b/t/t6036-recursive-corner-cases.sh
@@ -4,12 +4,6 @@ test_description='recursive merge corner cases involving criss-cross merges'
 
 . ./test-lib.sh
 
-get_clean_checkout () {
-	git reset --hard &&
-	git clean -fdqx &&
-	git checkout "$1"
-}
-
 #
 #  L1  L2
 #   o---o
@@ -445,10 +439,12 @@ test_expect_success 'setup differently handled merges of directory/file conflict
 '
 
 test_expect_success 'merge of D & E1 fails but has appropriate contents' '
+	test_when_finished "git -C directory-file reset --hard" &&
+	test_when_finished "git -C directory-file clean -fdqx" &&
 	(
 		cd directory-file &&
 
-		get_clean_checkout D^0 &&
+		git checkout D^0 &&
 
 		test_must_fail git merge -s recursive E1^0 &&
 
@@ -468,10 +464,12 @@ test_expect_success 'merge of D & E1 fails but has appropriate contents' '
 '
 
 test_expect_success 'merge of E1 & D fails but has appropriate contents' '
+	test_when_finished "git -C directory-file reset --hard" &&
+	test_when_finished "git -C directory-file clean -fdqx" &&
 	(
 		cd directory-file &&
 
-		get_clean_checkout E1^0 &&
+		git checkout E1^0 &&
 
 		test_must_fail git merge -s recursive D^0 &&
 
@@ -491,10 +489,12 @@ test_expect_success 'merge of E1 & D fails but has appropriate contents' '
 '
 
 test_expect_success 'merge of D & E2 fails but has appropriate contents' '
+	test_when_finished "git -C directory-file reset --hard" &&
+	test_when_finished "git -C directory-file clean -fdqx" &&
 	(
 		cd directory-file &&
 
-		get_clean_checkout D^0 &&
+		git checkout D^0 &&
 
 		test_must_fail git merge -s recursive E2^0 &&
 
@@ -516,10 +516,12 @@ test_expect_success 'merge of D & E2 fails but has appropriate contents' '
 '
 
 test_expect_success 'merge of E2 & D fails but has appropriate contents' '
+	test_when_finished "git -C directory-file reset --hard" &&
+	test_when_finished "git -C directory-file clean -fdqx" &&
 	(
 		cd directory-file &&
 
-		get_clean_checkout E2^0 &&
+		git checkout E2^0 &&
 
 		test_must_fail git merge -s recursive D^0 &&
 
-- 
2.17.0.1.gda85003413


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH 2/5] t6036, t6042: use test_line_count instead of wc -l
  2018-05-24  7:04 ` [PATCH 2/5] t6036, t6042: use test_line_count instead of wc -l Elijah Newren
@ 2018-05-24 10:05   ` SZEDER Gábor
  2018-05-24 10:36     ` SZEDER Gábor
                       ` (2 more replies)
  0 siblings, 3 replies; 11+ messages in thread
From: SZEDER Gábor @ 2018-05-24 10:05 UTC (permalink / raw)
  To: Elijah Newren; +Cc: SZEDER Gábor, git, gitster


> Signed-off-by: Elijah Newren <newren@gmail.com>
> ---
>  t/t6036-recursive-corner-cases.sh    | 102 ++++++++++++++++++---------
>  t/t6042-merge-rename-corner-cases.sh |  99 +++++++++++++++++---------
>  2 files changed, 134 insertions(+), 67 deletions(-)
> 
> diff --git a/t/t6036-recursive-corner-cases.sh b/t/t6036-recursive-corner-cases.sh
> index cfe6a99771..3e659cff28 100755
> --- a/t/t6036-recursive-corner-cases.sh
> +++ b/t/t6036-recursive-corner-cases.sh
> @@ -65,9 +65,12 @@ test_expect_success 'merge simple rename+criss-cross with no modifications' '
>  
>  		test_must_fail git merge -s recursive R2^0 &&
>  
> -		test 2 = $(git ls-files -s | wc -l) &&
> -		test 2 = $(git ls-files -u | wc -l) &&
> -		test 2 = $(git ls-files -o | wc -l) &&

Here 'git ls-files -o' should have listed two untracked files ...

> +		git ls-files -s >out &&
> +		test_line_count = 2 out &&
> +		git ls-files -u >out &&
> +		test_line_count = 2 out &&
> +		git ls-files -o >out &&
> +		test_line_count = 3 out &&

... but now you expect it to list three.  I was about to point out the
typo, but then noticed that you expect it to list one more untracked
file than before in all subsequent tests...  now that can't be just a
typo, can it?

Please mention in the commit message that when using an intermediate
file to store the output, 'git ls-files -o' will list that file, too,
that's why the number of expected untracked files had to be adjusted;
so future readers won't have to figure this out themselves.

An alternative to consider would be to add a .gitignore file in the
initial commit to ignore 'out', then the number of untracked files
don't have to be adjusted.


[I have no further comments, but leave the rest of the patch below, so
anyone can readily check the increased number of untracked files in
subsequent tests.]


>  		test $(git rev-parse :2:three) = $(git rev-parse L2:three) &&
>  		test $(git rev-parse :3:three) = $(git rev-parse R2:three) &&
> @@ -135,9 +138,12 @@ test_expect_success 'merge criss-cross + rename merges with basic modification'
>  
>  		test_must_fail git merge -s recursive R2^0 &&
>  
> -		test 2 = $(git ls-files -s | wc -l) &&
> -		test 2 = $(git ls-files -u | wc -l) &&
> -		test 2 = $(git ls-files -o | wc -l) &&
> +		git ls-files -s >out &&
> +		test_line_count = 2 out &&
> +		git ls-files -u >out &&
> +		test_line_count = 2 out &&
> +		git ls-files -o >out &&
> +		test_line_count = 3 out &&
>  
>  		test $(git rev-parse :2:three) = $(git rev-parse L2:three) &&
>  		test $(git rev-parse :3:three) = $(git rev-parse R2:three) &&
> @@ -211,9 +217,12 @@ test_expect_success 'git detects differently handled merges conflict' '
>  
>  		test_must_fail git merge -s recursive E^0 &&
>  
> -		test 3 = $(git ls-files -s | wc -l) &&
> -		test 3 = $(git ls-files -u | wc -l) &&
> -		test 0 = $(git ls-files -o | wc -l) &&
> +		git ls-files -s >out &&
> +		test_line_count = 3 out &&
> +		git ls-files -u >out &&
> +		test_line_count = 3 out &&
> +		git ls-files -o >out &&
> +		test_line_count = 1 out &&
>  
>  		test $(git rev-parse :2:new_a) = $(git rev-parse D:new_a) &&
>  		test $(git rev-parse :3:new_a) = $(git rev-parse E:new_a) &&
> @@ -297,8 +306,10 @@ test_expect_success 'git detects conflict merging criss-cross+modify/delete' '
>  
>  		test_must_fail git merge -s recursive E^0 &&
>  
> -		test 2 -eq $(git ls-files -s | wc -l) &&
> -		test 2 -eq $(git ls-files -u | wc -l) &&
> +		git ls-files -s >out &&
> +		test_line_count = 2 out &&
> +		git ls-files -u >out &&
> +		test_line_count = 2 out &&
>  
>  		test $(git rev-parse :1:file) = $(git rev-parse master:file) &&
>  		test $(git rev-parse :2:file) = $(git rev-parse B:file)
> @@ -314,8 +325,10 @@ test_expect_success 'git detects conflict merging criss-cross+modify/delete, rev
>  
>  		test_must_fail git merge -s recursive D^0 &&
>  
> -		test 2 -eq $(git ls-files -s | wc -l) &&
> -		test 2 -eq $(git ls-files -u | wc -l) &&
> +		git ls-files -s >out &&
> +		test_line_count = 2 out &&
> +		git ls-files -u >out &&
> +		test_line_count = 2 out &&
>  
>  		test $(git rev-parse :1:file) = $(git rev-parse master:file) &&
>  		test $(git rev-parse :3:file) = $(git rev-parse B:file)
> @@ -423,9 +436,12 @@ test_expect_success 'merge of D & E1 fails but has appropriate contents' '
>  
>  		test_must_fail git merge -s recursive E1^0 &&
>  
> -		test 2 -eq $(git ls-files -s | wc -l) &&
> -		test 1 -eq $(git ls-files -u | wc -l) &&
> -		test 0 -eq $(git ls-files -o | wc -l) &&
> +		git ls-files -s >out &&
> +		test_line_count = 2 out &&
> +		git ls-files -u >out &&
> +		test_line_count = 1 out &&
> +		git ls-files -o >out &&
> +		test_line_count = 1 out &&
>  
>  		test $(git rev-parse :0:ignore-me) = $(git rev-parse A:ignore-me) &&
>  		test $(git rev-parse :2:a) = $(git rev-parse B:a)
> @@ -440,9 +456,12 @@ test_expect_success 'merge of E1 & D fails but has appropriate contents' '
>  
>  		test_must_fail git merge -s recursive D^0 &&
>  
> -		test 2 -eq $(git ls-files -s | wc -l) &&
> -		test 1 -eq $(git ls-files -u | wc -l) &&
> -		test 0 -eq $(git ls-files -o | wc -l) &&
> +		git ls-files -s >out &&
> +		test_line_count = 2 out &&
> +		git ls-files -u >out &&
> +		test_line_count = 1 out &&
> +		git ls-files -o >out &&
> +		test_line_count = 1 out &&
>  
>  		test $(git rev-parse :0:ignore-me) = $(git rev-parse A:ignore-me) &&
>  		test $(git rev-parse :3:a) = $(git rev-parse B:a)
> @@ -457,9 +476,12 @@ test_expect_success 'merge of D & E2 fails but has appropriate contents' '
>  
>  		test_must_fail git merge -s recursive E2^0 &&
>  
> -		test 4 -eq $(git ls-files -s | wc -l) &&
> -		test 3 -eq $(git ls-files -u | wc -l) &&
> -		test 1 -eq $(git ls-files -o | wc -l) &&
> +		git ls-files -s >out &&
> +		test_line_count = 4 out &&
> +		git ls-files -u >out &&
> +		test_line_count = 3 out &&
> +		git ls-files -o >out &&
> +		test_line_count = 2 out &&
>  
>  		test $(git rev-parse :2:a) = $(git rev-parse B:a) &&
>  		test $(git rev-parse :3:a/file) = $(git rev-parse E2:a/file) &&
> @@ -478,9 +500,12 @@ test_expect_success 'merge of E2 & D fails but has appropriate contents' '
>  
>  		test_must_fail git merge -s recursive D^0 &&
>  
> -		test 4 -eq $(git ls-files -s | wc -l) &&
> -		test 3 -eq $(git ls-files -u | wc -l) &&
> -		test 1 -eq $(git ls-files -o | wc -l) &&
> +		git ls-files -s >out &&
> +		test_line_count = 4 out &&
> +		git ls-files -u >out &&
> +		test_line_count = 3 out &&
> +		git ls-files -o >out &&
> +		test_line_count = 2 out &&
>  
>  		test $(git rev-parse :3:a) = $(git rev-parse B:a) &&
>  		test $(git rev-parse :2:a/file) = $(git rev-parse E2:a/file) &&
> @@ -574,9 +599,12 @@ test_expect_success 'handle rename/rename(1to2)/modify followed by what looks li
>  
>  		git merge -s recursive E^0 &&
>  
> -		test 1 -eq $(git ls-files -s | wc -l) &&
> -		test 0 -eq $(git ls-files -u | wc -l) &&
> -		test 0 -eq $(git ls-files -o | wc -l) &&
> +		git ls-files -s >out &&
> +		test_line_count = 1 out &&
> +		git ls-files -u >out &&
> +		test_line_count = 0 out &&
> +		git ls-files -o >out &&
> +		test_line_count = 1 out &&
>  
>  		test $(git rev-parse HEAD:newname) = $(git rev-parse E:newname)
>  	)
> @@ -653,9 +681,12 @@ test_expect_failure 'detect rename/rename/add-source for virtual merge-base' '
>  
>  		git merge -s recursive E^0 &&
>  
> -		test 3 -eq $(git ls-files -s | wc -l) &&
> -		test 0 -eq $(git ls-files -u | wc -l) &&
> -		test 0 -eq $(git ls-files -o | wc -l) &&
> +		git ls-files -s >out &&
> +		test_line_count = 3 out &&
> +		git ls-files -u >out &&
> +		test_line_count = 0 out &&
> +		git ls-files -o >out &&
> +		test_line_count = 1 out &&
>  
>  		test $(git rev-parse HEAD:b) = $(git rev-parse A:a) &&
>  		test $(git rev-parse HEAD:c) = $(git rev-parse A:a) &&
> @@ -727,9 +758,12 @@ test_expect_success 'virtual merge base handles rename/rename(1to2)/add-dest' '
>  
>  		git merge -s recursive E^0 &&
>  
> -		test 2 -eq $(git ls-files -s | wc -l) &&
> -		test 0 -eq $(git ls-files -u | wc -l) &&
> -		test 0 -eq $(git ls-files -o | wc -l) &&
> +		git ls-files -s >out &&
> +		test_line_count = 2 out &&
> +		git ls-files -u >out &&
> +		test_line_count = 0 out &&
> +		git ls-files -o >out &&
> +		test_line_count = 1 out &&
>  
>  		test $(git rev-parse HEAD:a) = $(git rev-parse A:a) &&
>  		test $(git rev-parse HEAD:c) = $(git rev-parse E:c)
> diff --git a/t/t6042-merge-rename-corner-cases.sh b/t/t6042-merge-rename-corner-cases.sh
> index bec0192c3b..b76da8fcdf 100755
> --- a/t/t6042-merge-rename-corner-cases.sh
> +++ b/t/t6042-merge-rename-corner-cases.sh
> @@ -116,9 +116,12 @@ test_expect_failure 'conflict caused if rename not detected' '
>  		git checkout -q C^0 &&
>  		git merge -s recursive B^0 &&
>  
> -		test 3 -eq $(git ls-files -s | wc -l) &&
> -		test 0 -eq $(git ls-files -u | wc -l) &&
> -		test 0 -eq $(git ls-files -o | wc -l) &&
> +		git ls-files -s >out &&
> +		test_line_count = 3 out &&
> +		git ls-files -u >out &&
> +		test_line_count = 0 out &&
> +		git ls-files -o >out &&
> +		test_line_count = 1 out &&
>  
>  		test_line_count = 6 c &&
>  		test $(git rev-parse HEAD:a) = $(git rev-parse B:a) &&
> @@ -203,9 +206,12 @@ test_expect_failure 'detect rename/add-source and preserve all data' '
>  
>  		git merge -s recursive C^0 &&
>  
> -		test 2 -eq $(git ls-files -s | wc -l) &&
> -		test 2 -eq $(git ls-files -u | wc -l) &&
> -		test 0 -eq $(git ls-files -o | wc -l) &&
> +		git ls-files -s >out &&
> +		test_line_count = 2 out &&
> +		git ls-files -u >out &&
> +		test_line_count = 2 out &&
> +		git ls-files -o >out &&
> +		test_line_count = 1 out &&
>  
>  		test -f a &&
>  		test -f b &&
> @@ -223,9 +229,12 @@ test_expect_failure 'detect rename/add-source and preserve all data, merge other
>  
>  		git merge -s recursive B^0 &&
>  
> -		test 2 -eq $(git ls-files -s | wc -l) &&
> -		test 2 -eq $(git ls-files -u | wc -l) &&
> -		test 0 -eq $(git ls-files -o | wc -l) &&
> +		git ls-files -s >out &&
> +		test_line_count = 2 out &&
> +		git ls-files -u >out &&
> +		test_line_count = 2 out &&
> +		git ls-files -o >out &&
> +		test_line_count = 1 out &&
>  
>  		test -f a &&
>  		test -f b &&
> @@ -279,9 +288,12 @@ test_expect_success 'rename/directory conflict + clean content merge' '
>  
>  		test_must_fail git merge -s recursive right^0 &&
>  
> -		test 2 -eq $(git ls-files -s | wc -l) &&
> -		test 1 -eq $(git ls-files -u | wc -l) &&
> -		test 1 -eq $(git ls-files -o | wc -l) &&
> +		git ls-files -s >out &&
> +		test_line_count = 2 out &&
> +		git ls-files -u >out &&
> +		test_line_count = 1 out &&
> +		git ls-files -o >out &&
> +		test_line_count = 2 out &&
>  
>  		echo 0 >expect &&
>  		git cat-file -p base:file >>expect &&
> @@ -307,9 +319,12 @@ test_expect_success 'rename/directory conflict + content merge conflict' '
>  
>  		test_must_fail git merge -s recursive right^0 &&
>  
> -		test 4 -eq $(git ls-files -s | wc -l) &&
> -		test 3 -eq $(git ls-files -u | wc -l) &&
> -		test 1 -eq $(git ls-files -o | wc -l) &&
> +		git ls-files -s >out &&
> +		test_line_count = 4 out &&
> +		git ls-files -u >out &&
> +		test_line_count = 3 out &&
> +		git ls-files -o >out &&
> +		test_line_count = 2 out &&
>  
>  		git cat-file -p left-conflict:newfile >left &&
>  		git cat-file -p base:file    >base &&
> @@ -367,9 +382,12 @@ test_expect_success 'disappearing dir in rename/directory conflict handled' '
>  
>  		git merge -s recursive right^0 &&
>  
> -		test 1 -eq $(git ls-files -s | wc -l) &&
> -		test 0 -eq $(git ls-files -u | wc -l) &&
> -		test 0 -eq $(git ls-files -o | wc -l) &&
> +		git ls-files -s >out &&
> +		test_line_count = 1 out &&
> +		git ls-files -u >out &&
> +		test_line_count = 0 out &&
> +		git ls-files -o >out &&
> +		test_line_count = 1 out &&
>  
>  		echo 0 >expect &&
>  		git cat-file -p base:sub/file >>expect &&
> @@ -426,10 +444,14 @@ test_expect_success 'handle rename/rename (2to1) conflict correctly' '
>  		test_must_fail git merge -s recursive C^0 >out &&
>  		test_i18ngrep "CONFLICT (rename/rename)" out &&
>  
> -		test 2 -eq $(git ls-files -s | wc -l) &&
> -		test 2 -eq $(git ls-files -u | wc -l) &&
> -		test 2 -eq $(git ls-files -u c | wc -l) &&
> -		test 3 -eq $(git ls-files -o | wc -l) &&
> +		git ls-files -s >out &&
> +		test_line_count = 2 out &&
> +		git ls-files -u >out &&
> +		test_line_count = 2 out &&
> +		git ls-files -u c >out &&
> +		test_line_count = 2 out &&
> +		git ls-files -o >out &&
> +		test_line_count = 3 out &&
>  
>  		test ! -f a &&
>  		test ! -f b &&
> @@ -476,9 +498,12 @@ test_expect_success 'merge has correct working tree contents' '
>  
>  		test_must_fail git merge -s recursive B^0 &&
>  
> -		test 3 -eq $(git ls-files -s | wc -l) &&
> -		test 3 -eq $(git ls-files -u | wc -l) &&
> -		test 0 -eq $(git ls-files -o | wc -l) &&
> +		git ls-files -s >out &&
> +		test_line_count = 3 out &&
> +		git ls-files -u >out &&
> +		test_line_count = 3 out &&
> +		git ls-files -o >out &&
> +		test_line_count = 1 out &&
>  
>  		test $(git rev-parse :1:a) = $(git rev-parse A:a) &&
>  		test $(git rev-parse :3:b) = $(git rev-parse A:a) &&
> @@ -527,8 +552,10 @@ test_expect_failure 'detect conflict with rename/rename(1to2)/add-source merge'
>  
>  		test_must_fail git merge -s recursive C^0 &&
>  
> -		test 4 -eq $(git ls-files -s | wc -l) &&
> -		test 0 -eq $(git ls-files -o | wc -l) &&
> +		git ls-files -s >out &&
> +		test_line_count = 4 out &&
> +		git ls-files -o >out &&
> +		test_line_count = 1 out &&
>  
>  		test $(git rev-parse 3:a) = $(git rev-parse C:a) &&
>  		test $(git rev-parse 1:a) = $(git rev-parse A:a) &&
> @@ -573,8 +600,10 @@ test_expect_failure 'rename/rename/add-source still tracks new a file' '
>  		git checkout C^0 &&
>  		git merge -s recursive B^0 &&
>  
> -		test 2 -eq $(git ls-files -s | wc -l) &&
> -		test 0 -eq $(git ls-files -o | wc -l) &&
> +		git ls-files -s >out &&
> +		test_line_count = 2 out &&
> +		git ls-files -o >out &&
> +		test_line_count = 1 out &&
>  
>  		test $(git rev-parse HEAD:a) = $(git rev-parse C:a) &&
>  		test $(git rev-parse HEAD:b) = $(git rev-parse A:a)
> @@ -615,10 +644,14 @@ test_expect_success 'rename/rename/add-dest merge still knows about conflicting
>  		git checkout C^0 &&
>  		test_must_fail git merge -s recursive B^0 &&
>  
> -		test 5 -eq $(git ls-files -s | wc -l) &&
> -		test 2 -eq $(git ls-files -u b | wc -l) &&
> -		test 2 -eq $(git ls-files -u c | wc -l) &&
> -		test 4 -eq $(git ls-files -o | wc -l) &&
> +		git ls-files -s >out &&
> +		test_line_count = 5 out &&
> +		git ls-files -u b >out &&
> +		test_line_count = 2 out &&
> +		git ls-files -u c >out &&
> +		test_line_count = 2 out &&
> +		git ls-files -o >out &&
> +		test_line_count = 5 out &&
>  
>  		test $(git rev-parse :1:a) = $(git rev-parse A:a) &&
>  		test $(git rev-parse :2:b) = $(git rev-parse C:b) &&
> -- 
> 2.17.0.1.gda85003413
> 
> 

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 2/5] t6036, t6042: use test_line_count instead of wc -l
  2018-05-24 10:05   ` SZEDER Gábor
@ 2018-05-24 10:36     ` SZEDER Gábor
  2018-05-24 17:03     ` Elijah Newren
  2018-05-25  1:17     ` Junio C Hamano
  2 siblings, 0 replies; 11+ messages in thread
From: SZEDER Gábor @ 2018-05-24 10:36 UTC (permalink / raw)
  To: Elijah Newren; +Cc: SZEDER Gábor, Git mailing list, Junio C Hamano

On Thu, May 24, 2018 at 12:05 PM, SZEDER Gábor <szeder.dev@gmail.com> wrote:
>
>> Signed-off-by: Elijah Newren <newren@gmail.com>
>> ---
>>  t/t6036-recursive-corner-cases.sh    | 102 ++++++++++++++++++---------
>>  t/t6042-merge-rename-corner-cases.sh |  99 +++++++++++++++++---------
>>  2 files changed, 134 insertions(+), 67 deletions(-)
>>
>> diff --git a/t/t6036-recursive-corner-cases.sh b/t/t6036-recursive-corner-cases.sh
>> index cfe6a99771..3e659cff28 100755
>> --- a/t/t6036-recursive-corner-cases.sh
>> +++ b/t/t6036-recursive-corner-cases.sh
>> @@ -65,9 +65,12 @@ test_expect_success 'merge simple rename+criss-cross with no modifications' '
>>
>>               test_must_fail git merge -s recursive R2^0 &&
>>
>> -             test 2 = $(git ls-files -s | wc -l) &&
>> -             test 2 = $(git ls-files -u | wc -l) &&
>> -             test 2 = $(git ls-files -o | wc -l) &&
>
> Here 'git ls-files -o' should have listed two untracked files ...
>
>> +             git ls-files -s >out &&
>> +             test_line_count = 2 out &&
>> +             git ls-files -u >out &&
>> +             test_line_count = 2 out &&
>> +             git ls-files -o >out &&
>> +             test_line_count = 3 out &&
>
> ... but now you expect it to list three.  I was about to point out the
> typo, but then noticed that you expect it to list one more untracked
> file than before in all subsequent tests...

Hrm, not all, actually, because there is this one exception:

>> @@ -426,10 +444,14 @@ test_expect_success 'handle rename/rename (2to1) conflict correctly' '
>>               test_must_fail git merge -s recursive C^0 >out &&

Note that the file 'out' is created here ...

>>               test_i18ngrep "CONFLICT (rename/rename)" out &&
>>
>> -             test 2 -eq $(git ls-files -s | wc -l) &&
>> -             test 2 -eq $(git ls-files -u | wc -l) &&
>> -             test 2 -eq $(git ls-files -u c | wc -l) &&
>> -             test 3 -eq $(git ls-files -o | wc -l) &&

... so this  'git ls-files -o' already lists it as well, ...

>> +             git ls-files -s >out &&
>> +             test_line_count = 2 out &&
>> +             git ls-files -u >out &&
>> +             test_line_count = 2 out &&
>> +             git ls-files -u c >out &&
>> +             test_line_count = 2 out &&
>> +             git ls-files -o >out &&
>> +             test_line_count = 3 out &&

... therefore the number of untracked files here remains unchanged.

>>
>>               test ! -f a &&
>>               test ! -f b &&

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 2/5] t6036, t6042: use test_line_count instead of wc -l
  2018-05-24 10:05   ` SZEDER Gábor
  2018-05-24 10:36     ` SZEDER Gábor
@ 2018-05-24 17:03     ` Elijah Newren
  2018-05-25  1:17     ` Junio C Hamano
  2 siblings, 0 replies; 11+ messages in thread
From: Elijah Newren @ 2018-05-24 17:03 UTC (permalink / raw)
  To: SZEDER Gábor; +Cc: Git Mailing List, Junio C Hamano

On Thu, May 24, 2018 at 3:05 AM, SZEDER Gábor <szeder.dev@gmail.com> wrote:
>> --- a/t/t6036-recursive-corner-cases.sh
>> +++ b/t/t6036-recursive-corner-cases.sh
>> @@ -65,9 +65,12 @@ test_expect_success 'merge simple rename+criss-cross with no modifications' '
>>
>>               test_must_fail git merge -s recursive R2^0 &&
>>
>> -             test 2 = $(git ls-files -s | wc -l) &&
>> -             test 2 = $(git ls-files -u | wc -l) &&
>> -             test 2 = $(git ls-files -o | wc -l) &&
>
> Here 'git ls-files -o' should have listed two untracked files ...
>
>> +             git ls-files -s >out &&
>> +             test_line_count = 2 out &&
>> +             git ls-files -u >out &&
>> +             test_line_count = 2 out &&
>> +             git ls-files -o >out &&
>> +             test_line_count = 3 out &&
>
> ... but now you expect it to list three.  I was about to point out the
> typo, but then noticed that you expect it to list one more untracked
> file than before in all subsequent tests...  now that can't be just a
> typo, can it?
>
> Please mention in the commit message that when using an intermediate
> file to store the output, 'git ls-files -o' will list that file, too,
> that's why the number of expected untracked files had to be adjusted;
> so future readers won't have to figure this out themselves.

How does adding the following to the commit message sound?

    Changing to use test_line_count means using an intermediate file to store
    the output, which means that 'git ls-files -o' will have an additional
    file to list, which means that the number of lines expected in some tests
    will therefore change as well (unless the same intermediate file was used
    to capture the output of a previous command).

I'll include that in my next roll of the series after waiting for any
other fixups folks point out.  Sorry for the trouble.

As always, thanks for taking a look!

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 2/5] t6036, t6042: use test_line_count instead of wc -l
  2018-05-24 10:05   ` SZEDER Gábor
  2018-05-24 10:36     ` SZEDER Gábor
  2018-05-24 17:03     ` Elijah Newren
@ 2018-05-25  1:17     ` Junio C Hamano
  2018-05-26  0:44       ` Elijah Newren
  2 siblings, 1 reply; 11+ messages in thread
From: Junio C Hamano @ 2018-05-25  1:17 UTC (permalink / raw)
  To: SZEDER Gábor; +Cc: Elijah Newren, git

SZEDER Gábor <szeder.dev@gmail.com> writes:

>> -		test 2 = $(git ls-files -s | wc -l) &&
>> -		test 2 = $(git ls-files -u | wc -l) &&
>> -		test 2 = $(git ls-files -o | wc -l) &&
>
> Here 'git ls-files -o' should have listed two untracked files ...
>
>> +		git ls-files -s >out &&
>> +		test_line_count = 2 out &&
>> +		git ls-files -u >out &&
>> +		test_line_count = 2 out &&
>> +		git ls-files -o >out &&
>> +		test_line_count = 3 out &&
>
> ... but now you expect it to list three.  I was about to point out the
> typo, but then noticed that you expect it to list one more untracked
> file than before in all subsequent tests...  now that can't be just a
> typo, can it?
>
> Please mention in the commit message that when using an intermediate
> file to store the output, 'git ls-files -o' will list that file, too,
> that's why the number of expected untracked files had to be adjusted;
> so future readers won't have to figure this out themselves.

I'd expect that a reader of the commit who cares enough to bother to
wonder by looking at the patch and seeing that 2 became 3 would know
why already.  And a reader of the resulting file would not know that
the 3 used to be 2, and won't be helped by "we used to count to 2,
now we have 'out' also counted" that much, especially in the commit
log message.  What would help the latter would be to name which
three paths we expect to see in the comment (or test against the
exact list of paths, instead of using test_line_count).

> An alternative to consider would be to add a .gitignore file in the
> initial commit to ignore 'out', then the number of untracked files
> don't have to be adjusted.

I think that is a preferred solution that we've used in ls-files and
status tests successfully.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 2/5] t6036, t6042: use test_line_count instead of wc -l
  2018-05-25  1:17     ` Junio C Hamano
@ 2018-05-26  0:44       ` Elijah Newren
  0 siblings, 0 replies; 11+ messages in thread
From: Elijah Newren @ 2018-05-26  0:44 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: SZEDER Gábor, Git Mailing List

On Thu, May 24, 2018 at 6:17 PM, Junio C Hamano <gitster@pobox.com> wrote:
> SZEDER Gábor <szeder.dev@gmail.com> writes:
>
>>> -            test 2 = $(git ls-files -s | wc -l) &&
>>> -            test 2 = $(git ls-files -u | wc -l) &&
>>> -            test 2 = $(git ls-files -o | wc -l) &&
>>
>> Here 'git ls-files -o' should have listed two untracked files ...
>>
>>> +            git ls-files -s >out &&
>>> +            test_line_count = 2 out &&
>>> +            git ls-files -u >out &&
>>> +            test_line_count = 2 out &&
>>> +            git ls-files -o >out &&
>>> +            test_line_count = 3 out &&
>>
>> ... but now you expect it to list three.  I was about to point out the
>> typo, but then noticed that you expect it to list one more untracked
>> file than before in all subsequent tests...  now that can't be just a
>> typo, can it?
>>
>> Please mention in the commit message that when using an intermediate
>> file to store the output, 'git ls-files -o' will list that file, too,
>> that's why the number of expected untracked files had to be adjusted;
>> so future readers won't have to figure this out themselves.
>
> I'd expect that a reader of the commit who cares enough to bother to
> wonder by looking at the patch and seeing that 2 became 3 would know
> why already.  And a reader of the resulting file would not know that
> the 3 used to be 2, and won't be helped by "we used to count to 2,
> now we have 'out' also counted" that much, especially in the commit
> log message.  What would help the latter would be to name which
> three paths we expect to see in the comment (or test against the
> exact list of paths, instead of using test_line_count).
>
>> An alternative to consider would be to add a .gitignore file in the
>> initial commit to ignore 'out', then the number of untracked files
>> don't have to be adjusted.
>
> I think that is a preferred solution that we've used in ls-files and
> status tests successfully.

...except that if we add a .gitignore to each initial commit (we use
test_create_repo for nearly every test to keep them separable meaning
we'd have to do this many times), then four lines above we have to
adjust the number of expected tracked files.  And, for it to work,
we'd have to add an --exclude-standard flag to ls-files -o.

I can make that change if you both want it, but it seems like it's
actually making it harder to follow the changes rather than easier.

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2018-05-26  0:44 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-05-24  7:04 [PATCH 0/5] Modernize some testcases for merge-recursive corner cases Elijah Newren
2018-05-24  7:04 ` [PATCH 1/5] t6036, t6042: use test_create_repo to keep tests independent Elijah Newren
2018-05-24  7:04 ` [PATCH 2/5] t6036, t6042: use test_line_count instead of wc -l Elijah Newren
2018-05-24 10:05   ` SZEDER Gábor
2018-05-24 10:36     ` SZEDER Gábor
2018-05-24 17:03     ` Elijah Newren
2018-05-25  1:17     ` Junio C Hamano
2018-05-26  0:44       ` Elijah Newren
2018-05-24  7:04 ` [PATCH 3/5] t6036, t6042: prefer test_path_is_file, test_path_is_missing Elijah Newren
2018-05-24  7:04 ` [PATCH 4/5] t6036, t6042: prefer test_cmp to sequences of test Elijah Newren
2018-05-24  7:04 ` [PATCH 5/5] t6036: prefer test_when_finished to manual cleanup in following test Elijah Newren

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).