git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jonathan Nieder <jrnieder@gmail.com>
To: git@vger.kernel.org
Cc: Lars Hjemli <hjemli@gmail.com>, Tay Ray Chuan <rctay89@gmail.com>,
	Matthieu Moy <Matthieu.Moy@imag.fr>,
	Clemens Buchacher <drizzd@aon.at>, Jeff King <peff@peff.net>
Subject: [PATCH 02/24] t7600 (merge): modernize style
Date: Tue, 17 Aug 2010 01:53:56 -0500	[thread overview]
Message-ID: <20100817065356.GB22057@burratino> (raw)
In-Reply-To: <20100817065147.GA18293@burratino>

Guard setup commands with test_expect_success, so they are easier
to visually skip over and get to the good part.  While at it:

 - use "printf '%s\n' a b ..." instead of "cat <<EOF" for test
   vectors with short lines;

 - use test_cmp instead of test foo = bar where possible, for
   better output with -v on failure;

 - do not go to extraordinary lengths to print a relevant message
   when test commands fail.  There is a patch in flight that could be
   used to restore the nice error messages in a cleaner way.

Cc: Lars Hjemli <hjemli@gmail.com>
Cc: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
---
 t/t7600-merge.sh |  282 +++++++++++++++++++-----------------------------------
 1 files changed, 98 insertions(+), 184 deletions(-)

diff --git a/t/t7600-merge.sh b/t/t7600-merge.sh
index 16e5ba1..48a91ba 100755
--- a/t/t7600-merge.sh
+++ b/t/t7600-merge.sh
@@ -5,189 +5,103 @@
 
 test_description='git merge
 
-Testing basic merge operations/option parsing.'
+Testing basic merge operations/option parsing.
+
+! [c0] commit 0
+ ! [c1] commit 1
+  ! [c2] commit 2
+   ! [c3] commit 3
+    ! [c4] c4
+     ! [c5] c5
+      ! [c6] c6
+       * [master] Merge commit 'c1'
+--------
+       - [master] Merge commit 'c1'
+ +     * [c1] commit 1
+      +  [c6] c6
+     +   [c5] c5
+    ++   [c4] c4
+   ++++  [c3] commit 3
+  +      [c2] commit 2
++++++++* [c0] commit 0
+'
 
 . ./test-lib.sh
 
-cat >file <<EOF
-1
-2
-3
-4
-5
-6
-7
-8
-9
-EOF
+test_expect_success 'set up test data and helpers' '
+	printf "%s\n" 1 2 3 4 5 6 7 8 9 >file &&
+	printf "%s\n" "1 X" 2 3 4 5 6 7 8 9 >file.1 &&
+	printf "%s\n" 1 2 3 4 "5 X" 6 7 8 9 >file.5 &&
+	printf "%s\n" 1 2 3 4 5 6 7 8 "9 X" >file.9 &&
+	printf "%s\n" "1 X" 2 3 4 5 6 7 8 9 >result.1 &&
+	printf "%s\n" "1 X" 2 3 4 "5 X" 6 7 8 9 >result.1-5 &&
+	printf "%s\n" "1 X" 2 3 4 "5 X" 6 7 8 "9 X" >result.1-5-9 &&
 
-cat >file.1 <<EOF
-1 X
-2
-3
-4
-5
-6
-7
-8
-9
-EOF
+	create_merge_msgs() {
+		echo "Merge commit '\''c2'\''" >msg.1-5 &&
+		echo "Merge commit '\''c2'\''; commit '\''c3'\''" >msg.1-5-9 &&
+		{
+			echo "Squashed commit of the following:" &&
+			echo &&
+			git log --no-merges ^HEAD c1
+		} >squash.1 &&
+		{
+			echo "Squashed commit of the following:" &&
+			echo &&
+			git log --no-merges ^HEAD c2
+		} >squash.1-5 &&
+		{
+			echo "Squashed commit of the following:" &&
+			echo &&
+			git log --no-merges ^HEAD c2 c3
+		} >squash.1-5-9 &&
+		echo >msg.nolog &&
+		{
+			echo "* commit '\''c3'\'':" &&
+			echo "  commit 3" &&
+			echo
+		} >msg.log
+	} &&
 
-cat >file.5 <<EOF
-1
-2
-3
-4
-5 X
-6
-7
-8
-9
-EOF
-
-cat >file.9 <<EOF
-1
-2
-3
-4
-5
-6
-7
-8
-9 X
-EOF
-
-cat  >result.1 <<EOF
-1 X
-2
-3
-4
-5
-6
-7
-8
-9
-EOF
-
-cat >result.1-5 <<EOF
-1 X
-2
-3
-4
-5 X
-6
-7
-8
-9
-EOF
-
-cat >result.1-5-9 <<EOF
-1 X
-2
-3
-4
-5 X
-6
-7
-8
-9 X
-EOF
-
-create_merge_msgs() {
-	echo "Merge commit 'c2'" >msg.1-5 &&
-	echo "Merge commit 'c2'; commit 'c3'" >msg.1-5-9 &&
-	echo "Squashed commit of the following:" >squash.1 &&
-	echo >>squash.1 &&
-	git log --no-merges ^HEAD c1 >>squash.1 &&
-	echo "Squashed commit of the following:" >squash.1-5 &&
-	echo >>squash.1-5 &&
-	git log --no-merges ^HEAD c2 >>squash.1-5 &&
-	echo "Squashed commit of the following:" >squash.1-5-9 &&
-	echo >>squash.1-5-9 &&
-	git log --no-merges ^HEAD c2 c3 >>squash.1-5-9 &&
-	echo > msg.nolog &&
-	echo "* commit 'c3':" >msg.log &&
-	echo "  commit 3" >>msg.log &&
-	echo >>msg.log
-}
-
-verify_diff() {
-	if ! test_cmp "$1" "$2"
-	then
-		echo "$3"
-		false
-	fi
-}
-
-verify_merge() {
-	verify_diff "$2" "$1" "[OOPS] bad merge result" &&
-	if test $(git ls-files -u | wc -l) -gt 0
-	then
-		echo "[OOPS] unmerged files"
-		false
-	fi &&
-	if test_must_fail git diff --exit-code
-	then
-		echo "[OOPS] working tree != index"
-		false
-	fi &&
-	if test -n "$3"
-	then
-		git show -s --pretty=format:%s HEAD >msg.act &&
-		verify_diff "$3" msg.act "[OOPS] bad merge message"
-	fi
-}
-
-verify_head() {
-	if test "$1" != "$(git rev-parse HEAD)"
-	then
-		echo "[OOPS] HEAD != $1"
-		false
-	fi
-}
-
-verify_parents() {
-	i=1
-	while test $# -gt 0
-	do
-		if test "$1" != "$(git rev-parse HEAD^$i)"
+	verify_merge() {
+		test_cmp "$2" "$1" &&
+		git update-index --refresh &&
+		git diff --exit-code &&
+		if test -n "$3"
 		then
-			echo "[OOPS] HEAD^$i != $1"
-			return 1
+			git show -s --pretty=format:%s HEAD >msg.act &&
+			test_cmp "$3" msg.act
 		fi
-		i=$(expr $i + 1)
-		shift
-	done
-}
+	} &&
 
-verify_mergeheads() {
-	i=1
-	if ! test -f .git/MERGE_HEAD
-	then
-		echo "[OOPS] MERGE_HEAD is missing"
-		false
-	fi &&
-	while test $# -gt 0
-	do
-		head=$(head -n $i .git/MERGE_HEAD | sed -ne \$p)
-		if test "$1" != "$head"
-		then
-			echo "[OOPS] MERGE_HEAD $i != $1"
+	verify_head() {
+		echo "$1" >head.expected &&
+		git rev-parse HEAD >head.actual &&
+		test_cmp head.expected head.actual
+	} &&
+
+	verify_parents() {
+		printf "%s\n" "$@" >parents.expected &&
+		>parents.actual &&
+		i=1 &&
+		while test $i -le $#
+		do
+			git rev-parse HEAD^$i >>parents.actual &&
+			i=$(expr $i + 1) ||
 			return 1
-		fi
-		i=$(expr $i + 1)
-		shift
-	done
-}
+		done &&
+		test_cmp parents.expected parents.actual
+	} &&
 
-verify_no_mergehead() {
-	if test -f .git/MERGE_HEAD
-	then
-		echo "[OOPS] MERGE_HEAD exists"
-		false
-	fi
-}
+	verify_mergeheads() {
+		printf "%s\n" "$@" >mergehead.expected &&
+		test_cmp mergehead.expected .git/MERGE_HEAD
+	} &&
 
+	verify_no_mergehead() {
+		! test -e .git/MERGE_HEAD
+	}
+'
 
 test_expect_success 'setup' '
 	git add file &&
@@ -316,7 +230,7 @@ test_expect_success 'merge c0 with c1 (squash)' '
 	verify_merge file result.1 &&
 	verify_head $c0 &&
 	verify_no_mergehead &&
-	verify_diff squash.1 .git/SQUASH_MSG "[OOPS] bad squash message"
+	test_cmp squash.1 .git/SQUASH_MSG
 '
 
 test_debug 'gitk --all'
@@ -327,7 +241,7 @@ test_expect_success 'merge c0 with c1 (squash, ff-only)' '
 	verify_merge file result.1 &&
 	verify_head $c0 &&
 	verify_no_mergehead &&
-	verify_diff squash.1 .git/SQUASH_MSG "[OOPS] bad squash message"
+	test_cmp squash.1 .git/SQUASH_MSG
 '
 
 test_debug 'gitk --all'
@@ -338,7 +252,7 @@ test_expect_success 'merge c1 with c2 (squash)' '
 	verify_merge file result.1-5 &&
 	verify_head $c1 &&
 	verify_no_mergehead &&
-	verify_diff squash.1-5 .git/SQUASH_MSG "[OOPS] bad squash message"
+	test_cmp squash.1-5 .git/SQUASH_MSG
 '
 
 test_debug 'gitk --all'
@@ -356,7 +270,7 @@ test_expect_success 'merge c1 with c2 and c3 (squash)' '
 	verify_merge file result.1-5-9 &&
 	verify_head $c1 &&
 	verify_no_mergehead &&
-	verify_diff squash.1-5-9 .git/SQUASH_MSG "[OOPS] bad squash message"
+	test_cmp squash.1-5-9 .git/SQUASH_MSG
 '
 
 test_debug 'gitk --all'
@@ -379,7 +293,7 @@ test_expect_success 'merge c1 with c2 (squash in config)' '
 	verify_merge file result.1-5 &&
 	verify_head $c1 &&
 	verify_no_mergehead &&
-	verify_diff squash.1-5 .git/SQUASH_MSG "[OOPS] bad squash message"
+	test_cmp squash.1-5 .git/SQUASH_MSG
 '
 
 test_debug 'gitk --all'
@@ -485,17 +399,17 @@ test_expect_success 'merge log message' '
 	git reset --hard c0 &&
 	git merge --no-log c2 &&
 	git show -s --pretty=format:%b HEAD >msg.act &&
-	verify_diff msg.nolog msg.act "[OOPS] bad merge log message" &&
+	test_cmp msg.nolog msg.act &&
 
 	git merge --log c3 &&
 	git show -s --pretty=format:%b HEAD >msg.act &&
-	verify_diff msg.log msg.act "[OOPS] bad merge log message" &&
+	test_cmp msg.log msg.act &&
 
 	git reset --hard HEAD^ &&
 	git config merge.log yes &&
 	git merge c3 &&
 	git show -s --pretty=format:%b HEAD >msg.act &&
-	verify_diff msg.log msg.act "[OOPS] bad merge log message"
+	test_cmp msg.log msg.act
 '
 
 test_debug 'gitk --all'
@@ -545,7 +459,7 @@ test_debug 'gitk --all'
 
 test_expect_success 'in-index merge' '
 	git reset --hard c0 &&
-	git merge --no-ff -s resolve c1 > out &&
+	git merge --no-ff -s resolve c1 >out &&
 	grep "Wonderful." out &&
 	verify_parents $c0 $c1
 '
@@ -567,16 +481,16 @@ EOF
 
 test_expect_success 'merge early part of c2' '
 	git reset --hard c3 &&
-	echo c4 > c4.c &&
+	echo c4 >c4.c &&
 	git add c4.c &&
 	git commit -m c4 &&
 	git tag c4 &&
-	echo c5 > c5.c &&
+	echo c5 >c5.c &&
 	git add c5.c &&
 	git commit -m c5 &&
 	git tag c5 &&
 	git reset --hard c3 &&
-	echo c6 > c6.c &&
+	echo c6 >c6.c &&
 	git add c6.c &&
 	git commit -m c6 &&
 	git tag c6 &&
-- 
1.7.2.1.544.ga752d.dirty

  parent reply	other threads:[~2010-08-17  6:55 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-08-17  6:51 [PATCH/RFC] updating examples/git-merge (plus a builtin/merge fix) Jonathan Nieder
2010-08-17  6:52 ` [PATCH 01/24] merge: do not mistake (ancestor of) tag for branch Jonathan Nieder
2010-08-17  6:53 ` Jonathan Nieder [this message]
2010-08-17  6:54 ` [PATCH 03/24] t7600 (merge): do not launch gitk for --debug Jonathan Nieder
2010-08-17  7:31   ` Ævar Arnfjörð Bjarmason
2010-08-17 17:50   ` Sverre Rabbelier
2010-08-18  2:29     ` Jonathan Nieder
2010-08-18  8:55       ` Ævar Arnfjörð Bjarmason
2010-08-18 10:44         ` Jonathan Nieder
2010-08-17  6:56 ` [PATCH 04/24] t7600 (merge): check reflog entry Jonathan Nieder
2010-08-17  6:56 ` [PATCH 05/24] t7600 (merge): test merge from branch yet to be born Jonathan Nieder
2010-08-17  6:57 ` [PATCH 06/24] t6010 (merge-base): modernize style Jonathan Nieder
2010-08-17  6:57 ` [PATCH 07/24] t6200 (fmt-merge-msg): style nitpicks Jonathan Nieder
2010-08-17  6:59 ` [PATCH 08/24] Documentation: add a SEE ALSO section for merge-base Jonathan Nieder
2010-08-17  7:01 ` [PATCH 09/24] merge-base --octopus to mimic show-branch --merge-base Jonathan Nieder
2010-08-17  7:01 ` [PATCH 10/24] merge-base --independent to print reduced parent list in a merge Jonathan Nieder
2010-08-17  7:02 ` [PATCH 11/24] fmt-merge-msg -m to override subject line Jonathan Nieder
2010-08-17 23:00   ` [PATCH 11/24 v2] fmt-merge-msg -m to override merge title Jonathan Nieder
2010-08-17  7:03 ` [PATCH 12/24] merge script: --squash, --ff from unborn branch are errors Jonathan Nieder
2010-08-17  7:03 ` [PATCH 13/24] merge script: tweak unmerged files message to match builtin Jonathan Nieder
2010-08-17  7:36   ` Ævar Arnfjörð Bjarmason
2010-08-17  7:03 ` [PATCH 14/24] merge script: refuse to merge during merge Jonathan Nieder
2010-08-17  7:04 ` [PATCH 15/24] merge script: improve log message subject Jonathan Nieder
2010-08-17  7:05 ` [PATCH 16/24] merge script: merge -X<option> Jonathan Nieder
2010-08-17  7:05 ` [PATCH 17/24] merge script: allow custom strategies Jonathan Nieder
2010-08-17  7:06 ` [PATCH 18/24] merge script: forbid merge -s index Jonathan Nieder
2010-08-17  7:06 ` [PATCH 19/24] merge script: handle -m --log correctly Jonathan Nieder
2010-08-17  9:55   ` Tay Ray Chuan
2010-08-17 21:54     ` Jonathan Nieder
2010-08-17  7:09 ` [PATCH 20/24] merge script: handle many-way octopus Jonathan Nieder
2010-08-17  7:10 ` [PATCH 21/24] merge script: --ff-only to disallow true merge Jonathan Nieder
2010-08-17  7:11 ` [PATCH 22/24] merge script: handle --no-ff --no-commit correctly Jonathan Nieder
2010-08-17  7:11 ` [PATCH 23/24] merge script: notice @{-1} shorthand Jonathan Nieder
2010-08-17  7:13 ` [PATCH 24/24] merge script: learn --[no-]rerere-autoupdate Jonathan Nieder
2010-08-17  7:46 ` [PATCH/RFC] updating examples/git-merge (plus a builtin/merge fix) Ævar Arnfjörð Bjarmason
2010-08-17  8:10   ` Jonathan Nieder

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20100817065356.GB22057@burratino \
    --to=jrnieder@gmail.com \
    --cc=Matthieu.Moy@imag.fr \
    --cc=drizzd@aon.at \
    --cc=git@vger.kernel.org \
    --cc=hjemli@gmail.com \
    --cc=peff@peff.net \
    --cc=rctay89@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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 NNTP newsgroup(s).