Since 781f76b15 (test-lib: redirect stdin of tests) you can't simply put a "bash &&" into a test for debugging purposes anymore. Instead you'll have to use "bash <&6 >&3 2>&4". As that invocation is not that easy to remember add the test_pause convenience function. This function also checks if the -v flag is given and will error out if that is not the case instead of letting the test hang until ^D is pressed. Signed-off-by: Jens Lehmann <Jens.Lehmann@xxxxxx> --- Am 16.01.2012 23:51, schrieb Junio C Hamano: > Jeff King <peff@xxxxxxxx> writes: > >> Nice. Many times I have added such a "bash" or "gdb" invocation then >> forgotten "-v", only to scratch my head at why the test seemed to be >> hanging. >> >> Two minor nits on the patch itself: >> ... >> 1. It may be worth putting a warning in the comment that this is never >> to be used in a real test, but only temporarily inserted. >> >> 2. I do this not just with bash, but with "gdb". I wonder if it is worth >> making this "test_foo bash", for some value of "foo" (the ones that >> occur to me are "debug" and "run", but of course they are taken). >> >> Actually, I wonder if the existing test_debug could handle this >> already (though you do have to remember to add "--debug" to your >> command line, then). > > I wondered the same thing from a different angle. My first reaction was > "Why is this called 'bash' not 'sh'?" which naturally led to the same > direction as yours "why not an arbitrary command 'test_debug xxx'?" > > test_pause perhaps? I really don't care deeply about the name, so test_pause is absolutely ok for me. I added some documentation in t/README too and made it an error when --verbose is not used. Is it ok to invoke bash here or should sh be used? t/README | 13 +++++++++++++ t/test-lib.sh | 13 +++++++++++++ 2 files changed, 26 insertions(+), 0 deletions(-) diff --git a/t/README b/t/README index c85abaf..c09c582 100644 --- a/t/README +++ b/t/README @@ -548,6 +548,19 @@ library for your script to use. ... ' + - test_pause + + This command is useful for writing and debugging tests and must be + removed before submitting. It halts the execution of the test and + spawns a shell in the trash directory. Exit the shell to continue + the test. Example: + + test_expect_success 'test' ' + git do-something >actual && + test_pause && + test_cmp expected actual + ' + Prerequisites ------------- diff --git a/t/test-lib.sh b/t/test-lib.sh index a65dfc7..85084c4 100644 --- a/t/test-lib.sh +++ b/t/test-lib.sh @@ -329,6 +329,19 @@ test_tick () { export GIT_COMMITTER_DATE GIT_AUTHOR_DATE } +# Stop execution and start a shell. This is useful for debugging tests and +# only makes sense together with "-v". +# +# Be sure to remove all invocations of this command before submitting. + +test_pause () { + if test "$verbose" = t; then + bash <&6 >&3 2>&4 + else + error >&5 "test_pause requires --verbose" + fi +} + # Call test_commit with the arguments "<message> [<file> [<contents>]]" # # This will commit a file with the given contents and the given commit -- 1.7.9.rc1.2.g0b847.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