[PATCH 6/9] t7508 (status): modernize style

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Some cleanups to make this test script easier to read and use,
such as:

 - put setup code in test_expect_success scripts to make the
   test script easier to scan through;

 - avoid a pipe to test_decode_color that forgets the exit status of
   "git status", by redirecting to a temporary file (named "actual")
   for that function to consume instead;

 - remove precomputed object IDs;

 - reset configuration after each test, so there is less state
   for a reader to keep in mind.

Signed-off-by: Jonathan Nieder <jrnieder@xxxxxxxxx>
---
 t/t7508-status.sh | 1373 ++++++++++++++++++++++++++++-------------------------
 1 files changed, 734 insertions(+), 639 deletions(-)

diff --git a/t/t7508-status.sh b/t/t7508-status.sh
index a72fe3a..882e5d7 100755
--- a/t/t7508-status.sh
+++ b/t/t7508-status.sh
@@ -8,23 +8,23 @@ test_description='git status'
 . ./test-lib.sh
 
 test_expect_success 'setup' '
-	: >tracked &&
-	: >modified &&
+	>tracked &&
+	>modified &&
 	mkdir dir1 &&
-	: >dir1/tracked &&
-	: >dir1/modified &&
+	>dir1/tracked &&
+	>dir1/modified &&
 	mkdir dir2 &&
-	: >dir1/tracked &&
-	: >dir1/modified &&
+	>dir1/tracked &&
+	>dir1/modified &&
 	git add . &&
 
 	git status >output &&
 
 	test_tick &&
 	git commit -m initial &&
-	: >untracked &&
-	: >dir1/untracked &&
-	: >dir2/untracked &&
+	>untracked &&
+	>dir1/untracked &&
+	>dir2/untracked &&
 	echo 1 >dir1/modified &&
 	echo 2 >dir2/modified &&
 	echo 3 >dir2/added &&
@@ -32,564 +32,604 @@ test_expect_success 'setup' '
 '
 
 test_expect_success 'status (1)' '
-
 	grep "use \"git rm --cached <file>\.\.\.\" to unstage" output
-
 '
 
-cat >expect <<\EOF
-# On branch master
-# Changes to be committed:
-#   (use "git reset HEAD <file>..." to unstage)
-#
-#	new file:   dir2/added
-#
-# Changed but not updated:
-#   (use "git add <file>..." to update what will be committed)
-#   (use "git checkout -- <file>..." to discard changes in working directory)
-#
-#	modified:   dir1/modified
-#
-# Untracked files:
-#   (use "git add <file>..." to include in what will be committed)
-#
-#	dir1/untracked
-#	dir2/modified
-#	dir2/untracked
-#	expect
-#	output
-#	untracked
-EOF
-
 test_expect_success 'status (2)' '
+	cat >expect <<-\EOF &&
+	# On branch master
+	# Changes to be committed:
+	#   (use "git reset HEAD <file>..." to unstage)
+	#
+	#	new file:   dir2/added
+	#
+	# Changed but not updated:
+	#   (use "git add <file>..." to update what will be committed)
+	#   (use "git checkout -- <file>..." to discard changes in working directory)
+	#
+	#	modified:   dir1/modified
+	#
+	# Untracked files:
+	#   (use "git add <file>..." to include in what will be committed)
+	#
+	#	dir1/untracked
+	#	dir2/modified
+	#	dir2/untracked
+	#	expect
+	#	output
+	#	untracked
+	EOF
 
 	git status >output &&
 	test_cmp expect output
-
 '
 
-cat >expect <<\EOF
-# On branch master
-# Changes to be committed:
-#	new file:   dir2/added
-#
-# Changed but not updated:
-#	modified:   dir1/modified
-#
-# Untracked files:
-#	dir1/untracked
-#	dir2/modified
-#	dir2/untracked
-#	expect
-#	output
-#	untracked
-EOF
-
-git config advice.statusHints false
-
 test_expect_success 'status (advice.statusHints false)' '
+	cat >expect <<-\EOF &&
+	# On branch master
+	# Changes to be committed:
+	#	new file:   dir2/added
+	#
+	# Changed but not updated:
+	#	modified:   dir1/modified
+	#
+	# Untracked files:
+	#	dir1/untracked
+	#	dir2/modified
+	#	dir2/untracked
+	#	expect
+	#	output
+	#	untracked
+	EOF
+	git config advice.statusHints false &&
+	test_when_finished "git config --unset advice.statusHints" &&
 
 	git status >output &&
 	test_cmp expect output
-
 '
 
-git config --unset advice.statusHints
-
-cat >expect <<\EOF
- M dir1/modified
-A  dir2/added
-?? dir1/untracked
-?? dir2/modified
-?? dir2/untracked
-?? expect
-?? output
-?? untracked
-EOF
-
 test_expect_success 'status -s' '
+	cat >expect <<-\EOF &&
+	 M dir1/modified
+	A  dir2/added
+	?? dir1/untracked
+	?? dir2/modified
+	?? dir2/untracked
+	?? expect
+	?? output
+	?? untracked
+	EOF
 
 	git status -s >output &&
 	test_cmp expect output
-
 '
 
-cat >expect <<\EOF
-## master
- M dir1/modified
-A  dir2/added
-?? dir1/untracked
-?? dir2/modified
-?? dir2/untracked
-?? expect
-?? output
-?? untracked
-EOF
-
 test_expect_success 'status -s -b' '
+	cat >expect <<-\EOF &&
+	## master
+	 M dir1/modified
+	A  dir2/added
+	?? dir1/untracked
+	?? dir2/modified
+	?? dir2/untracked
+	?? expect
+	?? output
+	?? untracked
+	EOF
 
 	git status -s -b >output &&
 	test_cmp expect output
-
 '
 
-cat >expect <<EOF
-# On branch master
-# Changes to be committed:
-#   (use "git reset HEAD <file>..." to unstage)
-#
-#	new file:   dir2/added
-#
-# Changed but not updated:
-#   (use "git add <file>..." to update what will be committed)
-#   (use "git checkout -- <file>..." to discard changes in working directory)
-#
-#	modified:   dir1/modified
-#
-# Untracked files not listed (use -u option to show untracked files)
-EOF
-test_expect_success 'status -uno' '
+test_expect_success 'set up dir3 for untracked files tests' '
 	mkdir dir3 &&
-	: >dir3/untracked1 &&
-	: >dir3/untracked2 &&
+	>dir3/untracked1 &&
+	>dir3/untracked2 &&
+
+	cat >expect <<-\EOF
+	# On branch master
+	# Changes to be committed:
+	#   (use "git reset HEAD <file>..." to unstage)
+	#
+	#	new file:   dir2/added
+	#
+	# Changed but not updated:
+	#   (use "git add <file>..." to update what will be committed)
+	#   (use "git checkout -- <file>..." to discard changes in working directory)
+	#
+	#	modified:   dir1/modified
+	#
+	# Untracked files not listed (use -u option to show untracked files)
+	EOF
+'
+
+test_expect_success 'status -uno' '
 	git status -uno >output &&
 	test_cmp expect output
 '
 
 test_expect_success 'status (status.showUntrackedFiles no)' '
-	git config status.showuntrackedfiles no
+	git config status.showuntrackedfiles no &&
+	test_when_finished "git config --unset status.showuntrackedfiles" &&
 	git status >output &&
 	test_cmp expect output
 '
 
-cat >expect <<EOF
-# On branch master
-# Changes to be committed:
-#	new file:   dir2/added
-#
-# Changed but not updated:
-#	modified:   dir1/modified
-#
-# Untracked files not listed
-EOF
-git config advice.statusHints false
 test_expect_success 'status -uno (advice.statusHints false)' '
+	cat >expect <<-\EOF &&
+	# On branch master
+	# Changes to be committed:
+	#	new file:   dir2/added
+	#
+	# Changed but not updated:
+	#	modified:   dir1/modified
+	#
+	# Untracked files not listed
+	EOF
+	git config status.showuntrackedfiles no &&
+	test_when_finished "git config --unset status.showuntrackedfiles" &&
+	git config advice.statusHints false &&
+	test_when_finished "git config --unset advice.statusHints" &&
 	git status -uno >output &&
 	test_cmp expect output
 '
-git config --unset advice.statusHints
 
-cat >expect << EOF
- M dir1/modified
-A  dir2/added
-EOF
+test_expect_success 'setup: status -s -uno expected output' '
+	cat >expect <<-\EOF
+	 M dir1/modified
+	A  dir2/added
+	EOF
+'
+
 test_expect_success 'status -s -uno' '
-	git config --unset status.showuntrackedfiles
+	test_might_fail git config --unset status.showuntrackedfiles &&
 	git status -s -uno >output &&
 	test_cmp expect output
 '
 
 test_expect_success 'status -s (status.showUntrackedFiles no)' '
-	git config status.showuntrackedfiles no
+	git config status.showuntrackedfiles no &&
+	test_when_finished "git config --unset status.showuntrackedfiles" &&
 	git status -s >output &&
 	test_cmp expect output
 '
 
-cat >expect <<EOF
-# On branch master
-# Changes to be committed:
-#   (use "git reset HEAD <file>..." to unstage)
-#
-#	new file:   dir2/added
-#
-# Changed but not updated:
-#   (use "git add <file>..." to update what will be committed)
-#   (use "git checkout -- <file>..." to discard changes in working directory)
-#
-#	modified:   dir1/modified
-#
-# Untracked files:
-#   (use "git add <file>..." to include in what will be committed)
-#
-#	dir1/untracked
-#	dir2/modified
-#	dir2/untracked
-#	dir3/
-#	expect
-#	output
-#	untracked
-EOF
+test_expect_success 'setup: status -unormal expected output' '
+	cat >expect <<-\EOF
+	# On branch master
+	# Changes to be committed:
+	#   (use "git reset HEAD <file>..." to unstage)
+	#
+	#	new file:   dir2/added
+	#
+	# Changed but not updated:
+	#   (use "git add <file>..." to update what will be committed)
+	#   (use "git checkout -- <file>..." to discard changes in working directory)
+	#
+	#	modified:   dir1/modified
+	#
+	# Untracked files:
+	#   (use "git add <file>..." to include in what will be committed)
+	#
+	#	dir1/untracked
+	#	dir2/modified
+	#	dir2/untracked
+	#	dir3/
+	#	expect
+	#	output
+	#	untracked
+	EOF
+'
+
 test_expect_success 'status -unormal' '
+	git config status.showuntrackedfiles no &&
+	test_when_finished "git config --unset status.showuntrackedfiles" &&
 	git status -unormal >output &&
 	test_cmp expect output
 '
 
 test_expect_success 'status (status.showUntrackedFiles normal)' '
-	git config status.showuntrackedfiles normal
+	git config status.showuntrackedfiles normal &&
+	test_when_finished "git config --unset status.showuntrackedfiles" &&
 	git status >output &&
 	test_cmp expect output
 '
 
-cat >expect <<EOF
- M dir1/modified
-A  dir2/added
-?? dir1/untracked
-?? dir2/modified
-?? dir2/untracked
-?? dir3/
-?? expect
-?? output
-?? untracked
-EOF
+test_expect_success 'setup: status -s -unormal expected output' '
+	cat >expect <<-\EOF
+	 M dir1/modified
+	A  dir2/added
+	?? dir1/untracked
+	?? dir2/modified
+	?? dir2/untracked
+	?? dir3/
+	?? expect
+	?? output
+	?? untracked
+	EOF
+'
+
 test_expect_success 'status -s -unormal' '
-	git config --unset status.showuntrackedfiles
+	test_might_fail git config --unset status.showuntrackedfiles &&
 	git status -s -unormal >output &&
 	test_cmp expect output
 '
 
 test_expect_success 'status -s (status.showUntrackedFiles normal)' '
-	git config status.showuntrackedfiles normal
+	git config status.showuntrackedfiles normal &&
+	test_when_finished "git config --unset status.showuntrackedfiles" &&
 	git status -s >output &&
 	test_cmp expect output
 '
 
-cat >expect <<EOF
-# On branch master
-# Changes to be committed:
-#   (use "git reset HEAD <file>..." to unstage)
-#
-#	new file:   dir2/added
-#
-# Changed but not updated:
-#   (use "git add <file>..." to update what will be committed)
-#   (use "git checkout -- <file>..." to discard changes in working directory)
-#
-#	modified:   dir1/modified
-#
-# Untracked files:
-#   (use "git add <file>..." to include in what will be committed)
-#
-#	dir1/untracked
-#	dir2/modified
-#	dir2/untracked
-#	dir3/untracked1
-#	dir3/untracked2
-#	expect
-#	output
-#	untracked
-EOF
+test_expect_success 'setup: status -uall expected output' '
+	cat >expect <<-\EOF
+	# On branch master
+	# Changes to be committed:
+	#   (use "git reset HEAD <file>..." to unstage)
+	#
+	#	new file:   dir2/added
+	#
+	# Changed but not updated:
+	#   (use "git add <file>..." to update what will be committed)
+	#   (use "git checkout -- <file>..." to discard changes in working directory)
+	#
+	#	modified:   dir1/modified
+	#
+	# Untracked files:
+	#   (use "git add <file>..." to include in what will be committed)
+	#
+	#	dir1/untracked
+	#	dir2/modified
+	#	dir2/untracked
+	#	dir3/untracked1
+	#	dir3/untracked2
+	#	expect
+	#	output
+	#	untracked
+	EOF
+'
+
 test_expect_success 'status -uall' '
 	git status -uall >output &&
 	test_cmp expect output
 '
 test_expect_success 'status (status.showUntrackedFiles all)' '
-	git config status.showuntrackedfiles all
+	git config status.showuntrackedfiles all &&
+	test_when_finished "git config --unset status.showuntrackedfiles" &&
 	git status >output &&
 	rm -rf dir3 &&
-	git config --unset status.showuntrackedfiles &&
 	test_cmp expect output
 '
 
-cat >expect <<EOF
- M dir1/modified
-A  dir2/added
-?? dir1/untracked
-?? dir2/modified
-?? dir2/untracked
-?? expect
-?? output
-?? untracked
-EOF
+test_expect_success 'setup: status -s -uall expected output' '
+	cat >expect <<-\EOF
+	 M dir1/modified
+	A  dir2/added
+	?? dir1/untracked
+	?? dir2/modified
+	?? dir2/untracked
+	?? expect
+	?? output
+	?? untracked
+	EOF
+'
+
 test_expect_success 'status -s -uall' '
-	git config --unset status.showuntrackedfiles
+	test_might_fail git config --unset status.showuntrackedfiles &&
 	git status -s -uall >output &&
 	test_cmp expect output
 '
+
 test_expect_success 'status -s (status.showUntrackedFiles all)' '
-	git config status.showuntrackedfiles all
+	git config status.showuntrackedfiles all &&
+	test_when_finished "git config --unset status.showuntrackedfiles" &&
 	git status -s >output &&
-	rm -rf dir3 &&
-	git config --unset status.showuntrackedfiles &&
 	test_cmp expect output
 '
 
-cat >expect <<\EOF
-# On branch master
-# Changes to be committed:
-#   (use "git reset HEAD <file>..." to unstage)
-#
-#	new file:   ../dir2/added
-#
-# Changed but not updated:
-#   (use "git add <file>..." to update what will be committed)
-#   (use "git checkout -- <file>..." to discard changes in working directory)
-#
-#	modified:   modified
-#
-# Untracked files:
-#   (use "git add <file>..." to include in what will be committed)
-#
-#	untracked
-#	../dir2/modified
-#	../dir2/untracked
-#	../expect
-#	../output
-#	../untracked
-EOF
+test_expect_success 'setup: done with dir3' '
+	rm -rf dir3
+'
 
 test_expect_success 'status with relative paths' '
+	cat >expect <<-\EOF &&
+	# On branch master
+	# Changes to be committed:
+	#   (use "git reset HEAD <file>..." to unstage)
+	#
+	#	new file:   ../dir2/added
+	#
+	# Changed but not updated:
+	#   (use "git add <file>..." to update what will be committed)
+	#   (use "git checkout -- <file>..." to discard changes in working directory)
+	#
+	#	modified:   modified
+	#
+	# Untracked files:
+	#   (use "git add <file>..." to include in what will be committed)
+	#
+	#	untracked
+	#	../dir2/modified
+	#	../dir2/untracked
+	#	../expect
+	#	../output
+	#	../untracked
+	EOF
 
-	(cd dir1 && git status) >output &&
+	(
+		cd dir1 &&
+		git status >../output
+	) &&
 	test_cmp expect output
-
 '
 
-cat >expect <<\EOF
- M modified
-A  ../dir2/added
-?? untracked
-?? ../dir2/modified
-?? ../dir2/untracked
-?? ../expect
-?? ../output
-?? ../untracked
-EOF
 test_expect_success 'status -s with relative paths' '
+	cat >expect <<-\EOF &&
+	 M modified
+	A  ../dir2/added
+	?? untracked
+	?? ../dir2/modified
+	?? ../dir2/untracked
+	?? ../expect
+	?? ../output
+	?? ../untracked
+	EOF
 
-	(cd dir1 && git status -s) >output &&
+	(
+		cd dir1 &&
+		git status -s >../output
+	) &&
 	test_cmp expect output
-
 '
 
-cat >expect <<\EOF
- M dir1/modified
-A  dir2/added
-?? dir1/untracked
-?? dir2/modified
-?? dir2/untracked
-?? expect
-?? output
-?? untracked
-EOF
-
 test_expect_success 'status --porcelain ignores relative paths setting' '
+	cat >expect <<-\EOF &&
+	 M dir1/modified
+	A  dir2/added
+	?? dir1/untracked
+	?? dir2/modified
+	?? dir2/untracked
+	?? expect
+	?? output
+	?? untracked
+	EOF
 
-	(cd dir1 && git status --porcelain) >output &&
+	(
+		cd dir1 &&
+		git status --porcelain >../output
+	) &&
 	test_cmp expect output
-
 '
 
-test_expect_success 'setup unique colors' '
-
+test_expect_success 'setup: unique colors' '
 	git config status.color.untracked blue
-
 '
 
-cat >expect <<\EOF
-# On branch master
-# Changes to be committed:
-#   (use "git reset HEAD <file>..." to unstage)
-#
-#	<GREEN>new file:   dir2/added<RESET>
-#
-# Changed but not updated:
-#   (use "git add <file>..." to update what will be committed)
-#   (use "git checkout -- <file>..." to discard changes in working directory)
-#
-#	<RED>modified:   dir1/modified<RESET>
-#
-# Untracked files:
-#   (use "git add <file>..." to include in what will be committed)
-#
-#	<BLUE>dir1/untracked<RESET>
-#	<BLUE>dir2/modified<RESET>
-#	<BLUE>dir2/untracked<RESET>
-#	<BLUE>expect<RESET>
-#	<BLUE>output<RESET>
-#	<BLUE>untracked<RESET>
-EOF
+test_expect_success 'setup: expect colorful output' '
+	cat >expect <<-\EOF
+	# On branch master
+	# Changes to be committed:
+	#   (use "git reset HEAD <file>..." to unstage)
+	#
+	#	<GREEN>new file:   dir2/added<RESET>
+	#
+	# Changed but not updated:
+	#   (use "git add <file>..." to update what will be committed)
+	#   (use "git checkout -- <file>..." to discard changes in working directory)
+	#
+	#	<RED>modified:   dir1/modified<RESET>
+	#
+	# Untracked files:
+	#   (use "git add <file>..." to include in what will be committed)
+	#
+	#	<BLUE>actual<RESET>
+	#	<BLUE>dir1/untracked<RESET>
+	#	<BLUE>dir2/modified<RESET>
+	#	<BLUE>dir2/untracked<RESET>
+	#	<BLUE>expect<RESET>
+	#	<BLUE>output<RESET>
+	#	<BLUE>untracked<RESET>
+	EOF
+'
 
 test_expect_success 'status with color.ui' '
-
 	git config color.ui always &&
-	git status | test_decode_color >output &&
+	test_when_finished "git config --unset color.ui" &&
+	git status >actual &&
+	test_decode_color <actual >output &&
 	test_cmp expect output
-
 '
 
 test_expect_success 'status with color.status' '
-
-	git config --unset color.ui &&
+	test_might_fail git config --unset color.ui &&
 	git config color.status always &&
-	git status | test_decode_color >output &&
+	test_when_finished "git config --unset color.status" &&
+	git status >actual &&
+	test_decode_color <actual >output &&
 	test_cmp expect output
-
 '
 
-cat >expect <<\EOF
- <RED>M<RESET> dir1/modified
-<GREEN>A<RESET>  dir2/added
-<BLUE>??<RESET> dir1/untracked
-<BLUE>??<RESET> dir2/modified
-<BLUE>??<RESET> dir2/untracked
-<BLUE>??<RESET> expect
-<BLUE>??<RESET> output
-<BLUE>??<RESET> untracked
-EOF
+test_expect_success 'setup: expected colorful short output' '
+	cat >expect <<-\EOF
+	 <RED>M<RESET> dir1/modified
+	<GREEN>A<RESET>  dir2/added
+	<BLUE>??<RESET> actual
+	<BLUE>??<RESET> dir1/untracked
+	<BLUE>??<RESET> dir2/modified
+	<BLUE>??<RESET> dir2/untracked
+	<BLUE>??<RESET> expect
+	<BLUE>??<RESET> output
+	<BLUE>??<RESET> untracked
+	EOF
+'
 
 test_expect_success 'status -s with color.ui' '
-
-	git config --unset color.status &&
+	test_might_fail git config --unset color.status &&
 	git config color.ui always &&
-	git status -s | test_decode_color >output &&
+	test_when_finished "git config --unset color.ui" &&
+	git status -s >actual &&
+	test_decode_color <actual >output &&
 	test_cmp expect output
-
 '
 
 test_expect_success 'status -s with color.status' '
-
-	git config --unset color.ui &&
+	test_might_fail git config --unset color.ui &&
 	git config color.status always &&
-	git status -s | test_decode_color >output &&
+	test_when_finished "git config --unset color.status" &&
+	git status -s >actual &&
+	test_decode_color <actual >output &&
 	test_cmp expect output
-
 '
 
-cat >expect <<\EOF
-## <GREEN>master<RESET>
- <RED>M<RESET> dir1/modified
-<GREEN>A<RESET>  dir2/added
-<BLUE>??<RESET> dir1/untracked
-<BLUE>??<RESET> dir2/modified
-<BLUE>??<RESET> dir2/untracked
-<BLUE>??<RESET> expect
-<BLUE>??<RESET> output
-<BLUE>??<RESET> untracked
-EOF
-
 test_expect_success 'status -s -b with color.status' '
+	cat >expect <<-\EOF &&
+	## <GREEN>master<RESET>
+	 <RED>M<RESET> dir1/modified
+	<GREEN>A<RESET>  dir2/added
+	<BLUE>??<RESET> actual
+	<BLUE>??<RESET> dir1/untracked
+	<BLUE>??<RESET> dir2/modified
+	<BLUE>??<RESET> dir2/untracked
+	<BLUE>??<RESET> expect
+	<BLUE>??<RESET> output
+	<BLUE>??<RESET> untracked
+	EOF
 
-	git status -s -b | test_decode_color >output &&
+	git config color.status always &&
+	test_when_finished "git config --unset color.status" &&
+	git status -s -b >actual &&
+	test_decode_color <actual >output &&
 	test_cmp expect output
-
 '
 
-cat >expect <<\EOF
- M dir1/modified
-A  dir2/added
-?? dir1/untracked
-?? dir2/modified
-?? dir2/untracked
-?? expect
-?? output
-?? untracked
-EOF
+test_expect_success 'setup: expect uncolorful status --porcelain output' '
+	cat >expect <<-\EOF
+	 M dir1/modified
+	A  dir2/added
+	?? actual
+	?? dir1/untracked
+	?? dir2/modified
+	?? dir2/untracked
+	?? expect
+	?? output
+	?? untracked
+	EOF
+'
 
 test_expect_success 'status --porcelain ignores color.ui' '
-
-	git config --unset color.status &&
+	test_might_fail git config --unset color.status &&
 	git config color.ui always &&
-	git status --porcelain | test_decode_color >output &&
+	test_when_finished "git config --unset color.ui" &&
+	git status --porcelain >actual &&
+	test_decode_color <actual >output &&
 	test_cmp expect output
-
 '
 
 test_expect_success 'status --porcelain ignores color.status' '
-
-	git config --unset color.ui &&
+	test_might_fail git config --unset color.ui &&
 	git config color.status always &&
-	git status --porcelain | test_decode_color >output &&
+	test_when_finished "git config --unset color.status" &&
+	git status --porcelain >actual &&
+	test_decode_color <actual >output &&
 	test_cmp expect output
-
 '
 
-# recover unconditionally from color tests
-git config --unset color.status
-git config --unset color.ui
+test_expect_success 'setup: recover unconditionally from color tests' '
+	test_might_fail git config --unset color.status &&
+	test_might_fail git config --unset color.ui
+'
 
 test_expect_success 'status --porcelain ignores -b' '
-
 	git status --porcelain -b >output &&
 	test_cmp expect output
-
 '
 
-cat >expect <<\EOF
-# On branch master
-# Changes to be committed:
-#   (use "git reset HEAD <file>..." to unstage)
-#
-#	new file:   dir2/added
-#
-# Changed but not updated:
-#   (use "git add <file>..." to update what will be committed)
-#   (use "git checkout -- <file>..." to discard changes in working directory)
-#
-#	modified:   dir1/modified
-#
-# Untracked files:
-#   (use "git add <file>..." to include in what will be committed)
-#
-#	dir1/untracked
-#	dir2/modified
-#	dir2/untracked
-#	expect
-#	output
-#	untracked
-EOF
-
-
 test_expect_success 'status without relative paths' '
+	cat >expect <<-\EOF &&
+	# On branch master
+	# Changes to be committed:
+	#   (use "git reset HEAD <file>..." to unstage)
+	#
+	#	new file:   dir2/added
+	#
+	# Changed but not updated:
+	#   (use "git add <file>..." to update what will be committed)
+	#   (use "git checkout -- <file>..." to discard changes in working directory)
+	#
+	#	modified:   dir1/modified
+	#
+	# Untracked files:
+	#   (use "git add <file>..." to include in what will be committed)
+	#
+	#	actual
+	#	dir1/untracked
+	#	dir2/modified
+	#	dir2/untracked
+	#	expect
+	#	output
+	#	untracked
+	EOF
 
-	git config status.relativePaths false
-	(cd dir1 && git status) >output &&
+	git config status.relativePaths false &&
+	test_when_finished "git config --unset status.relativePaths" &&
+	(
+		cd dir1 &&
+		git status >../output
+	) &&
 	test_cmp expect output
-
 '
 
-cat >expect <<\EOF
- M dir1/modified
-A  dir2/added
-?? dir1/untracked
-?? dir2/modified
-?? dir2/untracked
-?? expect
-?? output
-?? untracked
-EOF
-
 test_expect_success 'status -s without relative paths' '
+	cat >expect <<-\EOF &&
+	 M dir1/modified
+	A  dir2/added
+	?? actual
+	?? dir1/untracked
+	?? dir2/modified
+	?? dir2/untracked
+	?? expect
+	?? output
+	?? untracked
+	EOF
 
-	(cd dir1 && git status -s) >output &&
+	git config status.relativePaths false &&
+	test_when_finished "git config --unset status.relativePaths" &&
+	(
+		cd dir1 &&
+		git status -s >../output
+	) &&
 	test_cmp expect output
-
 '
 
-cat <<EOF >expect
-# On branch master
-# Changes to be committed:
-#   (use "git reset HEAD <file>..." to unstage)
-#
-#	modified:   dir1/modified
-#
-# Untracked files:
-#   (use "git add <file>..." to include in what will be committed)
-#
-#	dir1/untracked
-#	dir2/
-#	expect
-#	output
-#	untracked
-EOF
 test_expect_success 'dry-run of partial commit excluding new file in index' '
+	cat >expect <<-\EOF &&
+	# On branch master
+	# Changes to be committed:
+	#   (use "git reset HEAD <file>..." to unstage)
+	#
+	#	modified:   dir1/modified
+	#
+	# Untracked files:
+	#   (use "git add <file>..." to include in what will be committed)
+	#
+	#	actual
+	#	dir1/untracked
+	#	dir2/
+	#	expect
+	#	output
+	#	untracked
+	EOF
+
 	git commit --dry-run dir1/modified >output &&
 	test_cmp expect output
 '
 
-cat >expect <<EOF
-:100644 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0000000000000000000000000000000000000000 M	dir1/modified
-EOF
 test_expect_success 'status refreshes the index' '
+	EMPTY_BLOB=$(git hash-object -t blob --stdin </dev/null) &&
+	ZEROES=0000000000000000000000000000000000000000 &&
+	echo ":100644 100644 $EMPTY_BLOB $ZEROES M	dir1/modified" >expect &&
+
 	touch dir2/added &&
 	git status &&
 	git diff-files >output &&
@@ -597,39 +637,42 @@ test_expect_success 'status refreshes the index' '
 '
 
 test_expect_success 'setup status submodule summary' '
-	test_create_repo sm && (
+	test_create_repo sm &&
+	(
 		cd sm &&
 		>foo &&
 		git add foo &&
 		git commit -m "Add foo"
 	) &&
-	git add sm
+	git add sm &&
+
+	cat >expect <<-\EOF
+	# On branch master
+	# Changes to be committed:
+	#   (use "git reset HEAD <file>..." to unstage)
+	#
+	#	new file:   dir2/added
+	#	new file:   sm
+	#
+	# Changed but not updated:
+	#   (use "git add <file>..." to update what will be committed)
+	#   (use "git checkout -- <file>..." to discard changes in working directory)
+	#
+	#	modified:   dir1/modified
+	#
+	# Untracked files:
+	#   (use "git add <file>..." to include in what will be committed)
+	#
+	#	actual
+	#	dir1/untracked
+	#	dir2/modified
+	#	dir2/untracked
+	#	expect
+	#	output
+	#	untracked
+	EOF
 '
 
-cat >expect <<EOF
-# On branch master
-# Changes to be committed:
-#   (use "git reset HEAD <file>..." to unstage)
-#
-#	new file:   dir2/added
-#	new file:   sm
-#
-# Changed but not updated:
-#   (use "git add <file>..." to update what will be committed)
-#   (use "git checkout -- <file>..." to discard changes in working directory)
-#
-#	modified:   dir1/modified
-#
-# Untracked files:
-#   (use "git add <file>..." to include in what will be committed)
-#
-#	dir1/untracked
-#	dir2/modified
-#	dir2/untracked
-#	expect
-#	output
-#	untracked
-EOF
 test_expect_success 'status submodule summary is disabled by default' '
 	git status >output &&
 	test_cmp expect output
@@ -641,17 +684,21 @@ test_expect_success 'status --untracked-files=all does not show submodule' '
 	test_cmp expect output
 '
 
-cat >expect <<EOF
- M dir1/modified
-A  dir2/added
-A  sm
-?? dir1/untracked
-?? dir2/modified
-?? dir2/untracked
-?? expect
-?? output
-?? untracked
-EOF
+test_expect_success 'setup status -s submodule summary' '
+	cat >expect <<-\EOF
+	 M dir1/modified
+	A  dir2/added
+	A  sm
+	?? actual
+	?? dir1/untracked
+	?? dir2/modified
+	?? dir2/untracked
+	?? expect
+	?? output
+	?? untracked
+	EOF
+'
+
 test_expect_success 'status -s submodule summary is disabled by default' '
 	git status -s >output &&
 	test_cmp expect output
@@ -663,275 +710,323 @@ test_expect_success 'status -s --untracked-files=all does not show submodule' '
 	test_cmp expect output
 '
 
-head=$(cd sm && git rev-parse --short=7 --verify HEAD)
+test_expect_success 'setup: save head' '
+	head=$(
+		cd sm &&
+		git rev-parse --short=7 --verify HEAD
+	)
+'
 
-cat >expect <<EOF
-# On branch master
-# Changes to be committed:
-#   (use "git reset HEAD <file>..." to unstage)
-#
-#	new file:   dir2/added
-#	new file:   sm
-#
-# Changed but not updated:
-#   (use "git add <file>..." to update what will be committed)
-#   (use "git checkout -- <file>..." to discard changes in working directory)
-#
-#	modified:   dir1/modified
-#
-# Submodule changes to be committed:
-#
-# * sm 0000000...$head (1):
-#   > Add foo
-#
-# Untracked files:
-#   (use "git add <file>..." to include in what will be committed)
-#
-#	dir1/untracked
-#	dir2/modified
-#	dir2/untracked
-#	expect
-#	output
-#	untracked
-EOF
 test_expect_success 'status submodule summary' '
+	cat >expect <<-EOF &&
+	# On branch master
+	# Changes to be committed:
+	#   (use "git reset HEAD <file>..." to unstage)
+	#
+	#	new file:   dir2/added
+	#	new file:   sm
+	#
+	# Changed but not updated:
+	#   (use "git add <file>..." to update what will be committed)
+	#   (use "git checkout -- <file>..." to discard changes in working directory)
+	#
+	#	modified:   dir1/modified
+	#
+	# Submodule changes to be committed:
+	#
+	# * sm 0000000...$head (1):
+	#   > Add foo
+	#
+	# Untracked files:
+	#   (use "git add <file>..." to include in what will be committed)
+	#
+	#	actual
+	#	dir1/untracked
+	#	dir2/modified
+	#	dir2/untracked
+	#	expect
+	#	output
+	#	untracked
+	EOF
+
 	git config status.submodulesummary 10 &&
+	test_when_finished "git config --unset status.submodulesummary" &&
 	git status >output &&
 	test_cmp expect output
 '
 
-cat >expect <<EOF
- M dir1/modified
-A  dir2/added
-A  sm
-?? dir1/untracked
-?? dir2/modified
-?? dir2/untracked
-?? expect
-?? output
-?? untracked
-EOF
 test_expect_success 'status -s submodule summary' '
+	cat >expect <<-\EOF &&
+	 M dir1/modified
+	A  dir2/added
+	A  sm
+	?? actual
+	?? dir1/untracked
+	?? dir2/modified
+	?? dir2/untracked
+	?? expect
+	?? output
+	?? untracked
+	EOF
+
+	git config status.submodulesummary 10 &&
+	test_when_finished "git config --unset status.submodulesummary" &&
 	git status -s >output &&
 	test_cmp expect output
 '
 
-cat >expect <<EOF
-# On branch master
-# Changed but not updated:
-#   (use "git add <file>..." to update what will be committed)
-#   (use "git checkout -- <file>..." to discard changes in working directory)
-#
-#	modified:   dir1/modified
-#
-# Untracked files:
-#   (use "git add <file>..." to include in what will be committed)
-#
-#	dir1/untracked
-#	dir2/modified
-#	dir2/untracked
-#	expect
-#	output
-#	untracked
-no changes added to commit (use "git add" and/or "git commit -a")
-EOF
 test_expect_success 'status submodule summary (clean submodule)' '
+	cat >expect <<-\EOF &&
+	# On branch master
+	# Changed but not updated:
+	#   (use "git add <file>..." to update what will be committed)
+	#   (use "git checkout -- <file>..." to discard changes in working directory)
+	#
+	#	modified:   dir1/modified
+	#
+	# Untracked files:
+	#   (use "git add <file>..." to include in what will be committed)
+	#
+	#	actual
+	#	dir1/untracked
+	#	dir2/modified
+	#	dir2/untracked
+	#	expect
+	#	output
+	#	untracked
+	no changes added to commit (use "git add" and/or "git commit -a")
+	EOF
+
 	git commit -m "commit submodule" &&
 	git config status.submodulesummary 10 &&
+	test_when_finished "git config --unset status.submodulesummary" &&
 	test_must_fail git commit --dry-run >output &&
 	test_cmp expect output &&
 	git status >output &&
 	test_cmp expect output
 '
 
-cat >expect <<EOF
- M dir1/modified
-?? dir1/untracked
-?? dir2/modified
-?? dir2/untracked
-?? expect
-?? output
-?? untracked
-EOF
 test_expect_success 'status -s submodule summary (clean submodule)' '
+	cat >expect <<-\EOF &&
+	 M dir1/modified
+	?? actual
+	?? dir1/untracked
+	?? dir2/modified
+	?? dir2/untracked
+	?? expect
+	?? output
+	?? untracked
+	EOF
+	git config status.submodulesummary 10 &&
+	test_when_finished "git config --unset status.submodulesummary" &&
 	git status -s >output &&
 	test_cmp expect output
 '
 
-cat >expect <<EOF
-# On branch master
-# Changes to be committed:
-#   (use "git reset HEAD^1 <file>..." to unstage)
-#
-#	new file:   dir2/added
-#	new file:   sm
-#
-# Changed but not updated:
-#   (use "git add <file>..." to update what will be committed)
-#   (use "git checkout -- <file>..." to discard changes in working directory)
-#
-#	modified:   dir1/modified
-#
-# Submodule changes to be committed:
-#
-# * sm 0000000...$head (1):
-#   > Add foo
-#
-# Untracked files:
-#   (use "git add <file>..." to include in what will be committed)
-#
-#	dir1/untracked
-#	dir2/modified
-#	dir2/untracked
-#	expect
-#	output
-#	untracked
-EOF
 test_expect_success 'commit --dry-run submodule summary (--amend)' '
+	cat >expect <<-EOF &&
+	# On branch master
+	# Changes to be committed:
+	#   (use "git reset HEAD^1 <file>..." to unstage)
+	#
+	#	new file:   dir2/added
+	#	new file:   sm
+	#
+	# Changed but not updated:
+	#   (use "git add <file>..." to update what will be committed)
+	#   (use "git checkout -- <file>..." to discard changes in working directory)
+	#
+	#	modified:   dir1/modified
+	#
+	# Submodule changes to be committed:
+	#
+	# * sm 0000000...$head (1):
+	#   > Add foo
+	#
+	# Untracked files:
+	#   (use "git add <file>..." to include in what will be committed)
+	#
+	#	actual
+	#	dir1/untracked
+	#	dir2/modified
+	#	dir2/untracked
+	#	expect
+	#	output
+	#	untracked
+	EOF
+
 	git config status.submodulesummary 10 &&
+	test_when_finished "git config --unset status.submodulesummary" &&
 	git commit --dry-run --amend >output &&
 	test_cmp expect output
 '
 
 test_expect_success POSIXPERM 'status succeeds in a read-only repository' '
-	(
-		chmod a-w .git &&
-		# make dir1/tracked stat-dirty
-		>dir1/tracked1 && mv -f dir1/tracked1 dir1/tracked &&
-		git status -s >output &&
-		! grep dir1/tracked output &&
-		# make sure "status" succeeded without writing index out
-		git diff-files | grep dir1/tracked
-	)
-	status=$?
-	chmod 775 .git
-	(exit $status)
+	git config status.submodulesummary 10 &&
+	test_when_finished "git config --unset status.submodulesummary" &&
+
+	chmod a-w .git &&
+	test_when_finished "chmod 775 .git" &&
+
+	# make dir1/tracked stat-dirty
+	>dir1/tracked1 &&
+	mv -f dir1/tracked1 dir1/tracked &&
+
+	git status -s >output &&
+	! grep dir1/tracked output &&
+
+	# make sure "status" succeeded without writing index out
+	git diff-files >output &&
+	grep dir1/tracked output
 '
 
-cat > expect << EOF
-# On branch master
-# Changed but not updated:
-#   (use "git add <file>..." to update what will be committed)
-#   (use "git checkout -- <file>..." to discard changes in working directory)
-#
-#	modified:   dir1/modified
-#
-# Untracked files:
-#   (use "git add <file>..." to include in what will be committed)
-#
-#	dir1/untracked
-#	dir2/modified
-#	dir2/untracked
-#	expect
-#	output
-#	untracked
-no changes added to commit (use "git add" and/or "git commit -a")
-EOF
+test_expect_success 'setup: status --ignore-submodules' '
+	cat >expect <<-\EOF
+	# On branch master
+	# Changed but not updated:
+	#   (use "git add <file>..." to update what will be committed)
+	#   (use "git checkout -- <file>..." to discard changes in working directory)
+	#
+	#	modified:   dir1/modified
+	#
+	# Untracked files:
+	#   (use "git add <file>..." to include in what will be committed)
+	#
+	#	actual
+	#	dir1/untracked
+	#	dir2/modified
+	#	dir2/untracked
+	#	expect
+	#	output
+	#	untracked
+	no changes added to commit (use "git add" and/or "git commit -a")
+	EOF
+'
 
 test_expect_success '--ignore-submodules=untracked suppresses submodules with untracked content' '
-	echo modified > sm/untracked &&
-	git status --ignore-submodules=untracked > output &&
+	git config status.submodulesummary 10 &&
+	test_when_finished "git config --unset status.submodulesummary" &&
+	echo modified >sm/untracked &&
+	git status --ignore-submodules=untracked >output &&
 	test_cmp expect output
 '
 
 test_expect_success '--ignore-submodules=dirty suppresses submodules with untracked content' '
-	git status --ignore-submodules=dirty > output &&
+	git config status.submodulesummary 10 &&
+	test_when_finished "git config --unset status.submodulesummary" &&
+	git status --ignore-submodules=dirty >output &&
 	test_cmp expect output
 '
 
 test_expect_success '--ignore-submodules=dirty suppresses submodules with modified content' '
-	echo modified > sm/foo &&
+	git config status.submodulesummary 10 &&
+	test_when_finished "git config --unset status.submodulesummary" &&
+	echo modified >sm/foo &&
 	git status --ignore-submodules=dirty > output &&
 	test_cmp expect output
 '
 
-cat > expect << EOF
-# On branch master
-# Changed but not updated:
-#   (use "git add <file>..." to update what will be committed)
-#   (use "git checkout -- <file>..." to discard changes in working directory)
-#   (commit or discard the untracked or modified content in submodules)
-#
-#	modified:   dir1/modified
-#	modified:   sm (modified content)
-#
-# Untracked files:
-#   (use "git add <file>..." to include in what will be committed)
-#
-#	dir1/untracked
-#	dir2/modified
-#	dir2/untracked
-#	expect
-#	output
-#	untracked
-no changes added to commit (use "git add" and/or "git commit -a")
-EOF
-
 test_expect_success "--ignore-submodules=untracked doesn't suppress submodules with modified content" '
-	git status --ignore-submodules=untracked > output &&
+	cat >expect <<-\EOF &&
+	# On branch master
+	# Changed but not updated:
+	#   (use "git add <file>..." to update what will be committed)
+	#   (use "git checkout -- <file>..." to discard changes in working directory)
+	#   (commit or discard the untracked or modified content in submodules)
+	#
+	#	modified:   dir1/modified
+	#	modified:   sm (modified content)
+	#
+	# Untracked files:
+	#   (use "git add <file>..." to include in what will be committed)
+	#
+	#	actual
+	#	dir1/untracked
+	#	dir2/modified
+	#	dir2/untracked
+	#	expect
+	#	output
+	#	untracked
+	no changes added to commit (use "git add" and/or "git commit -a")
+	EOF
+	git config status.submodulesummary 10 &&
+	test_when_finished "git config --unset status.submodulesummary" &&
+	git status --ignore-submodules=untracked >output &&
 	test_cmp expect output
 '
 
-head2=$(cd sm && git commit -q -m "2nd commit" foo && git rev-parse --short=7 --verify HEAD)
-
-cat > expect << EOF
-# On branch master
-# Changed but not updated:
-#   (use "git add <file>..." to update what will be committed)
-#   (use "git checkout -- <file>..." to discard changes in working directory)
-#
-#	modified:   dir1/modified
-#	modified:   sm (new commits)
-#
-# Submodules changed but not updated:
-#
-# * sm $head...$head2 (1):
-#   > 2nd commit
-#
-# Untracked files:
-#   (use "git add <file>..." to include in what will be committed)
-#
-#	dir1/untracked
-#	dir2/modified
-#	dir2/untracked
-#	expect
-#	output
-#	untracked
-no changes added to commit (use "git add" and/or "git commit -a")
-EOF
+test_expect_success 'setup' '
+	head2=$(
+		cd sm &&
+		git commit -q -m "2nd commit" foo &&
+		git rev-parse --short=7 --verify HEAD
+	) &&
+	cat >expect <<-EOF
+	# On branch master
+	# Changed but not updated:
+	#   (use "git add <file>..." to update what will be committed)
+	#   (use "git checkout -- <file>..." to discard changes in working directory)
+	#
+	#	modified:   dir1/modified
+	#	modified:   sm (new commits)
+	#
+	# Submodules changed but not updated:
+	#
+	# * sm $head...$head2 (1):
+	#   > 2nd commit
+	#
+	# Untracked files:
+	#   (use "git add <file>..." to include in what will be committed)
+	#
+	#	actual
+	#	dir1/untracked
+	#	dir2/modified
+	#	dir2/untracked
+	#	expect
+	#	output
+	#	untracked
+	no changes added to commit (use "git add" and/or "git commit -a")
+	EOF
+'
 
 test_expect_success "--ignore-submodules=untracked doesn't suppress submodule summary" '
-	git status --ignore-submodules=untracked > output &&
+	git config status.submodulesummary 10 &&
+	test_when_finished "git config --unset status.submodulesummary" &&
+	git status --ignore-submodules=untracked >output &&
 	test_cmp expect output
 '
 
 test_expect_success "--ignore-submodules=dirty doesn't suppress submodule summary" '
+	git config status.submodulesummary 10 &&
+	test_when_finished "git config --unset status.submodulesummary" &&
 	git status --ignore-submodules=dirty > output &&
 	test_cmp expect output
 '
 
-cat > expect << EOF
-# On branch master
-# Changed but not updated:
-#   (use "git add <file>..." to update what will be committed)
-#   (use "git checkout -- <file>..." to discard changes in working directory)
-#
-#	modified:   dir1/modified
-#
-# Untracked files:
-#   (use "git add <file>..." to include in what will be committed)
-#
-#	dir1/untracked
-#	dir2/modified
-#	dir2/untracked
-#	expect
-#	output
-#	untracked
-no changes added to commit (use "git add" and/or "git commit -a")
-EOF
-
 test_expect_success "--ignore-submodules=all suppresses submodule summary" '
-	git status --ignore-submodules=all > output &&
+	cat >expect <<-\EOF &&
+	# On branch master
+	# Changed but not updated:
+	#   (use "git add <file>..." to update what will be committed)
+	#   (use "git checkout -- <file>..." to discard changes in working directory)
+	#
+	#	modified:   dir1/modified
+	#
+	# Untracked files:
+	#   (use "git add <file>..." to include in what will be committed)
+	#
+	#	actual
+	#	dir1/untracked
+	#	dir2/modified
+	#	dir2/untracked
+	#	expect
+	#	output
+	#	untracked
+	no changes added to commit (use "git add" and/or "git commit -a")
+	EOF
+	git config status.submodulesummary 10 &&
+	test_when_finished "git config --unset status.submodulesummary" &&
+	git status --ignore-submodules=all >output &&
 	test_cmp expect output
 '
 
-- 
1.7.2.9.ge3789.dirty

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]