git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 06/24] t6010 (merge-base): modernize style

From
Jonathan Nieder <jrnieder@gmail.com>
Date
Aug 17, 2010, 06:57 UTC
Message-ID
<20100817065712.GF22057@burratino>
In-Reply-To
<20100817065147.GA18293@burratino>

Guard setup with test_expect_success, put the opening quote starting each test on the same line as the test_expect_* invocation, and combine related actions into single tests.

While at it:
 - use test_cmp instead of expr or test $foo = $bar, for more helpful
   output with -v when tests fail;
 - use test_commit for brevity.
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
---
 t/t6010-merge-base.sh |  317 ++++++++++++++++++++++++++-----------------------
 1 files changed, 167 insertions(+), 150 deletions(-)
diff --git a/t/t6010-merge-base.sh b/t/t6010-merge-base.sh
index 0144d9e..4466e45 100755
--- a/t/t6010-merge-base.sh
+++ b/t/t6010-merge-base.sh
@@ -8,170 +8,187 @@ test_description='Merge base computation.
 
 . ./test-lib.sh
 
-T=$(git write-tree)
-
-M=1130000000
-Z=+0000
-
-GIT_COMMITTER_EMAIL=git@comm.iter.xz
-GIT_COMMITTER_NAME='C O Mmiter'
-GIT_AUTHOR_NAME='A U Thor'
-GIT_AUTHOR_EMAIL=git@au.thor.xz
-export GIT_COMMITTER_EMAIL GIT_COMMITTER_NAME GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL
-
-doit() {
-	OFFSET=$1; shift
-	NAME=$1; shift
-	PARENTS=
-	for P
-	do
-		PARENTS="${PARENTS}-p $P "
-	done
-	GIT_COMMITTER_DATE="$(($M + $OFFSET)) $Z"
-	GIT_AUTHOR_DATE=$GIT_COMMITTER_DATE
-	export GIT_COMMITTER_DATE GIT_AUTHOR_DATE
-	commit=$(echo $NAME | git commit-tree $T $PARENTS)
-	echo $commit >.git/refs/tags/$NAME
-	echo $commit
-}
-
-#  E---D---C---B---A
-#  \'-_         \   \
-#   \  `---------G   \
-#    \                \
-#     F----------------H
-
-# Setup...
-E=$(doit 5 E)
-D=$(doit 4 D $E)
-F=$(doit 6 F $E)
-C=$(doit 3 C $D)
-B=$(doit 2 B $C)
-A=$(doit 1 A $B)
-G=$(doit 7 G $B $E)
-H=$(doit 8 H $A $F)
-
-test_expect_success 'compute merge-base (single)' \
-    'MB=$(git merge-base G H) &&
-     expr "$(git name-rev "$MB")" : "[0-9a-f]* tags/B"'
-
-test_expect_success 'compute merge-base (all)' \
-    'MB=$(git merge-base --all G H) &&
-     expr "$(git name-rev "$MB")" : "[0-9a-f]* tags/B"'
-
-test_expect_success 'compute merge-base with show-branch' \
-    'MB=$(git show-branch --merge-base G H) &&
-     expr "$(git name-rev "$MB")" : "[0-9a-f]* tags/B"'
-
-# Setup for second test to demonstrate that relying on timestamps in a
-# distributed SCM to provide a _consistent_ partial ordering of commits
-# leads to insanity.
-#
-#               Relative
-# Structure     timestamps
-#
-#   PL  PR        +4  +4
-#  /  \/  \      /  \/  \
-# L2  C2  R2    +3  -1  +3
-# |   |   |     |   |   |
-# L1  C1  R1    +2  -2  +2
-# |   |   |     |   |   |
-# L0  C0  R0    +1  -3  +1
-#   \ |  /        \ |  /
-#     S             0
-#
-# The left and right chains of commits can be of any length and complexity as
-# long as all of the timestamps are greater than that of S.
-
-S=$(doit  0 S)
-
-C0=$(doit -3 C0 $S)
-C1=$(doit -2 C1 $C0)
-C2=$(doit -1 C2 $C1)
-
-L0=$(doit  1 L0 $S)
-L1=$(doit  2 L1 $L0)
-L2=$(doit  3 L2 $L1)
-
-R0=$(doit  1 R0 $S)
-R1=$(doit  2 R1 $R0)
-R2=$(doit  3 R2 $R1)
-
-PL=$(doit  4 PL $L2 $C2)
-PR=$(doit  4 PR $C2 $R2)
-
-test_expect_success 'compute merge-base (single)' \
-    'MB=$(git merge-base PL PR) &&
-     expr "$(git name-rev "$MB")" : "[0-9a-f]* tags/C2"'
-
-test_expect_success 'compute merge-base (all)' \
-    'MB=$(git merge-base --all PL PR) &&
-     expr "$(git name-rev "$MB")" : "[0-9a-f]* tags/C2"'
-
-# Another set to demonstrate base between one commit and a merge
-# in the documentation.
-#
-# * C (MMC) * B (MMB) * A  (MMA)
-# * o       * o       * o
-# * o       * o       * o
-# * o       * o       * o
-# * o       | _______/
-# |         |/
-# |         * 1 (MM1)
-# | _______/
-# |/
-# * root (MMR)
-
+test_expect_success 'setup' '
+	T=$(git write-tree) &&
+
+	M=1130000000 &&
+	Z=+0000 &&
+
+	GIT_COMMITTER_EMAIL=git@comm.iter.xz &&
+	GIT_COMMITTER_NAME="C O Mmiter" &&
+	GIT_AUTHOR_NAME="A U Thor" &&
+	GIT_AUTHOR_EMAIL=git@au.thor.xz &&
+	export GIT_COMMITTER_EMAIL GIT_COMMITTER_NAME GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL &&
+
+	doit() {
+		OFFSET=$1 &&
+		NAME=$2 &&
+		shift 2 &&
+
+		PARENTS= &&
+		for P
+		do
+			PARENTS="${PARENTS}-p $P "
+		done &&
+
+		GIT_COMMITTER_DATE="$(($M + $OFFSET)) $Z" &&
+		GIT_AUTHOR_DATE=$GIT_COMMITTER_DATE &&
+		export GIT_COMMITTER_DATE GIT_AUTHOR_DATE &&
+
+		commit=$(echo $NAME | git commit-tree $T $PARENTS) &&
+
+		echo $commit >.git/refs/tags/$NAME &&
+		echo $commit
+	}
+'
+
+test_expect_success 'set up G and H' '
+	# E---D---C---B---A
+	# \"-_         \   \
+	#  \  `---------G   \
+	#   \                \
+	#    F----------------H
+	E=$(doit 5 E) &&
+	D=$(doit 4 D $E) &&
+	F=$(doit 6 F $E) &&
+	C=$(doit 3 C $D) &&
+	B=$(doit 2 B $C) &&
+	A=$(doit 1 A $B) &&
+	G=$(doit 7 G $B $E) &&
+	H=$(doit 8 H $A $F)
+'
+
+test_expect_success 'merge-base G H' '
+	git name-rev $B >expected &&
+
+	MB=$(git merge-base G H) &&
+	git name-rev "$MB" >actual.single &&
+
+	MB=$(git merge-base --all G H) &&
+	git name-rev "$MB" >actual.all &&
+
+	MB=$(git show-branch --merge-base G H) &&
+	git name-rev "$MB" >actual.sb &&
+
+	test_cmp expected actual.single &&
+	test_cmp expected actual.all &&
+	test_cmp expected actual.sb
+'
+
+test_expect_success 'unsynchronized clocks' '
+	# This test is to demonstrate that relying on timestamps in a distributed
+	# SCM to provide a _consistent_ partial ordering of commits leads to
+	# insanity.
+	#
+	#               Relative
+	# Structure     timestamps
+	#
+	#   PL  PR        +4  +4
+	#  /  \/  \      /  \/  \
+	# L2  C2  R2    +3  -1  +3
+	# |   |   |     |   |   |
+	# L1  C1  R1    +2  -2  +2
+	# |   |   |     |   |   |
+	# L0  C0  R0    +1  -3  +1
+	#   \ |  /        \ |  /
+	#     S             0
+	#
+	# The left and right chains of commits can be of any length and complexity as
+	# long as all of the timestamps are greater than that of S.
+
+	S=$(doit  0 S) &&
+
+	C0=$(doit -3 C0 $S) &&
+	C1=$(doit -2 C1 $C0) &&
+	C2=$(doit -1 C2 $C1) &&
+
+	L0=$(doit  1 L0 $S) &&
+	L1=$(doit  2 L1 $L0) &&
+	L2=$(doit  3 L2 $L1) &&
+
+	R0=$(doit  1 R0 $S) &&
+	R1=$(doit  2 R1 $R0) &&
+	R2=$(doit  3 R2 $R1) &&
+
+	PL=$(doit  4 PL $L2 $C2) &&
+	PR=$(doit  4 PR $C2 $R2)
+
+	git name-rev $C2 >expected &&
+
+	MB=$(git merge-base PL PR) &&
+	git name-rev "$MB" >actual.single &&
+
+	MB=$(git merge-base --all PL PR) &&
+	git name-rev "$MB" >actual.all &&
+
+	test_cmp expected actual.single &&
+	test_cmp expected actual.all
+'
 
 test_expect_success 'merge-base for octopus-step (setup)' '
-	test_tick && git commit --allow-empty -m root && git tag MMR &&
-	test_tick && git commit --allow-empty -m 1 && git tag MM1 &&
-	test_tick && git commit --allow-empty -m o &&
-	test_tick && git commit --allow-empty -m o &&
-	test_tick && git commit --allow-empty -m o &&
-	test_tick && git commit --allow-empty -m A && git tag MMA &&
+	# Another set to demonstrate base between one commit and a merge
+	# in the documentation.
+	#
+	# * C (MMC) * B (MMB) * A  (MMA)
+	# * o       * o       * o
+	# * o       * o       * o
+	# * o       * o       * o
+	# * o       | _______/
+	# |         |/
+	# |         * 1 (MM1)
+	# | _______/
+	# |/
+	# * root (MMR)
+
+	test_commit MMR &&
+	test_commit MM1 &&
+	test_commit MM-o &&
+	test_commit MM-p &&
+	test_commit MM-q &&
+	test_commit MMA &&
 	git checkout MM1 &&
-	test_tick && git commit --allow-empty -m o &&
-	test_tick && git commit --allow-empty -m o &&
-	test_tick && git commit --allow-empty -m o &&
-	test_tick && git commit --allow-empty -m B && git tag MMB &&
+	test_commit MM-r &&
+	test_commit MM-s &&
+	test_commit MM-t &&
+	test_commit MMB &&
 	git checkout MMR &&
-	test_tick && git commit --allow-empty -m o &&
-	test_tick && git commit --allow-empty -m o &&
-	test_tick && git commit --allow-empty -m o &&
-	test_tick && git commit --allow-empty -m o &&
-	test_tick && git commit --allow-empty -m C && git tag MMC
+	test_commit MM-u &&
+	test_commit MM-v &&
+	test_commit MM-w &&
+	test_commit MM-x &&
+	test_commit MMC
 '
 
 test_expect_success 'merge-base A B C' '
-	MB=$(git merge-base --all MMA MMB MMC) &&
-	MM1=$(git rev-parse --verify MM1) &&
-	test "$MM1" = "$MB"
-'
+	git rev-parse --verify MM1 >expected &&
+	git rev-parse --verify MMR >expected.sb &&
+
+	git merge-base --all MMA MMB MMC >actual &&
+	git show-branch --merge-base MMA MMB MMC >actual.sb &&
 
-test_expect_success 'merge-base A B C using show-branch' '
-	MB=$(git show-branch --merge-base MMA MMB MMC) &&
-	MMR=$(git rev-parse --verify MMR) &&
-	test "$MMR" = "$MB"
+	test_cmp expected actual &&
+	test_cmp expected.sb actual.sb
 '
 
-test_expect_success 'criss-cross merge-base for octopus-step (setup)' '
+test_expect_success 'criss-cross merge-base for octopus-step' '
 	git reset --hard MMR &&
-	test_tick && git commit --allow-empty -m 1 && git tag CC1 &&
+	test_commit CC1 &&
 	git reset --hard E &&
-	test_tick && git commit --allow-empty -m 2 && git tag CC2 &&
-	test_tick && git merge -s ours CC1 &&
-	test_tick && git commit --allow-empty -m o &&
-	test_tick && git commit --allow-empty -m B && git tag CCB &&
+	test_commit CC2 &&
+	test_tick &&
+	git merge -s ours CC1 &&
+	test_commit CC-o &&
+	test_commit CCB &&
 	git reset --hard CC1 &&
-	test_tick && git merge -s ours CC2 &&
-	test_tick && git commit --allow-empty -m A && git tag CCA
-'
+	git merge -s ours CC2 &&
+	test_commit CCA &&
 
-test_expect_success 'merge-base B A^^ A^^2' '
-	MB0=$(git merge-base --all CCB CCA^^ CCA^^2 | sort) &&
-	MB1=$(git rev-parse CC1 CC2 | sort) &&
-	test "$MB0" = "$MB1"
+	git rev-parse CC1 CC2 >expected &&
+	git merge-base --all CCB CCA^^ CCA^^2 >actual &&
+
+	sort expected >expected.sorted &&
+	sort actual >actual.sorted &&
+	test_cmp expected.sorted actual.sorted
 '
 
 test_done
-- 
1.7.2.1.544.ga752d.dirty
Previous: Jonathan NiederNext: Jonathan Nieder
Message 12 of 36 in “updating examples/git-merge (plus a builtin/merge fix)”
  1. updating examples/git-merge (plus a builtin/merge fix)Jonathan Nieder, Aug 17, 2010
  2. 01/24 merge: do not mistake (ancestor of) tag for branchJonathan Nieder, Aug 17, 2010
  3. 02/24 t7600 (merge): modernize styleJonathan Nieder, Aug 17, 2010
  4. 03/24 t7600 (merge): do not launch gitk for --debugJonathan Nieder, Aug 17, 2010
  5. Ævar Arnfjörð BjarmasonAug 17, 2010
  6. Sverre RabbelierAug 17, 2010
  7. Jonathan NiederAug 18, 2010
  8. Ævar Arnfjörð BjarmasonAug 18, 2010
  9. Jonathan NiederAug 18, 2010
  10. 04/24 t7600 (merge): check reflog entryJonathan Nieder, Aug 17, 2010
  11. 05/24 t7600 (merge): test merge from branch yet to be bornJonathan Nieder, Aug 17, 2010
  12. 06/24 t6010 (merge-base): modernize styleJonathan Nieder, Aug 17, 2010
  13. 07/24 t6200 (fmt-merge-msg): style nitpicksJonathan Nieder, Aug 17, 2010
  14. 08/24 Documentation: add a SEE ALSO section for merge-baseJonathan Nieder, Aug 17, 2010
  15. 09/24 merge-base --octopus to mimic show-branch --merge-baseJonathan Nieder, Aug 17, 2010
  16. 10/24 merge-base --independent to print reduced parent list in a mergeJonathan Nieder, Aug 17, 2010
  17. 11/24 fmt-merge-msg -m to override subject lineJonathan Nieder, Aug 17, 2010
  18. 11/24 fmt-merge-msg -m to override merge titleJonathan Nieder, Aug 17, 2010
  19. 12/24 merge script: --squash, --ff from unborn branch are errorsJonathan Nieder, Aug 17, 2010
  20. 13/24 merge script: tweak unmerged files message to match builtinJonathan Nieder, Aug 17, 2010
  21. Ævar Arnfjörð BjarmasonAug 17, 2010
  22. 14/24 merge script: refuse to merge during mergeJonathan Nieder, Aug 17, 2010
  23. 15/24 merge script: improve log message subjectJonathan Nieder, Aug 17, 2010
  24. 16/24 merge script: merge -X<option>Jonathan Nieder, Aug 17, 2010
  25. 17/24 merge script: allow custom strategiesJonathan Nieder, Aug 17, 2010
  26. 18/24 merge script: forbid merge -s indexJonathan Nieder, Aug 17, 2010
  27. 19/24 merge script: handle -m --log correctlyJonathan Nieder, Aug 17, 2010
  28. Tay Ray ChuanAug 17, 2010
  29. Jonathan NiederAug 17, 2010
  30. 20/24 merge script: handle many-way octopusJonathan Nieder, Aug 17, 2010
  31. 21/24 merge script: --ff-only to disallow true mergeJonathan Nieder, Aug 17, 2010
  32. 22/24 merge script: handle --no-ff --no-commit correctlyJonathan Nieder, Aug 17, 2010
  33. 23/24 merge script: notice @{-1} shorthandJonathan Nieder, Aug 17, 2010
  34. 24/24 merge script: learn --[no-]rerere-autoupdateJonathan Nieder, Aug 17, 2010
  35. Ævar Arnfjörð BjarmasonAug 17, 2010
  36. Jonathan NiederAug 17, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.