git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RFC] test_when_finished in subshells
@ 2015-09-04 17:58 John Keeping
  2015-09-04 18:43 ` Junio C Hamano
  0 siblings, 1 reply; 15+ messages in thread
From: John Keeping @ 2015-09-04 17:58 UTC (permalink / raw)
  To: git; +Cc: Eric Sunshine, Jonathan Nieder, John Keeping

A recent thread [0] made me realise that using test_when_finished in a
subshell is likely to be a bug, since the change to $test_cleanup will
be lost when the subshell exits.

There is no POSIX way to detect that we are in a subshell ($$ and $PPID
are specified to remain unchanged), but we can detect it on Bash and
gracefully fall back to disabling the test on other shells, which is
what the patch below does.

There are three tests currently in master that fail with this patch (at
least on my system):

	Test Summary Report
	-------------------
	t7610-mergetool.sh                               (Wstat: 256 Tests: 18 Failed: 1)
	  Failed test:  7
	  Non-zero exit status: 1
	t7800-difftool.sh                                (Wstat: 256 Tests: 56 Failed: 1)
	  Failed test:  56
	  Non-zero exit status: 1
	t5801-remote-helpers.sh                          (Wstat: 256 Tests: 30 Failed: 1)
	  Failed test:  27
	  Non-zero exit status: 1

All are harmless at the moment and t7610 and t5801 can be fixed by
moving the test_when_finished call out of the subshell relatively
easily.

t7800 (in its final test) calls test_config in a subshell which has cd'd
into a submodule.

Is this something worth worrying about, or is it sufficiently rare that
we can live with the current behaviour?

[0] http://article.gmane.org/gmane.comp.version-control.git/277199

-- >8 --
diff --git a/t/test-lib-functions.sh b/t/test-lib-functions.sh
index e8d3c0f..d29cd7b 100644
--- a/t/test-lib-functions.sh
+++ b/t/test-lib-functions.sh
@@ -722,6 +722,8 @@ test_seq () {
 # what went wrong.
 
 test_when_finished () {
+	test "${BASH_SUBSHELL-0}" = 0 ||
+	error "bug in test script: test_when_finished does nothing in a subshell"
 	test_cleanup="{ $*
 		} && (exit \"\$eval_ret\"); eval_ret=\$?; $test_cleanup"
 }
-- 
2.5.0.466.g9af26fa

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

end of thread, other threads:[~2015-09-06 16:22 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-09-04 17:58 [RFC] test_when_finished in subshells John Keeping
2015-09-04 18:43 ` Junio C Hamano
2015-09-05  8:54   ` Jeff King
2015-09-05 13:12     ` [PATCH 0/5] disallow " John Keeping
2015-09-05 13:12       ` [PATCH 1/5] t7610: don't use test_config in a subshell John Keeping
2015-09-05 13:12       ` [PATCH 2/5] t5801: don't use test_when_finished " John Keeping
2015-09-05 13:12       ` [PATCH 3/5] test-lib-functions: support "test_config -C <dir> ..." John Keeping
2015-09-05 13:12       ` [PATCH 4/5] t7800: don't use test_config in a subshell John Keeping
2015-09-05 13:12       ` [PATCH 5/5] test-lib-functions: detect test_when_finished in subshell John Keeping
2015-09-06  9:51         ` Eric Sunshine
2015-09-06 11:46           ` John Keeping
2015-09-06 16:22             ` Eric Sunshine
2015-09-05 17:36       ` [PATCH 0/5] disallow test_when_finished in subshells Junio C Hamano
2015-09-05 17:57         ` John Keeping
2015-09-05 20:17           ` Junio C Hamano

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).