From: "SZEDER Gábor" <szeder.dev@gmail.com>
To: Jeff King <peff@peff.net>
Cc: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>,
"Duy Nguyen" <pclouds@gmail.com>,
"Rohit Ashiwal via GitGitGadget" <gitgitgadget@gmail.com>,
"Git Mailing List" <git@vger.kernel.org>,
"Junio C Hamano" <gitster@pobox.com>,
"Rohit Ashiwal" <rohit.ashiwal265@gmail.com>,
"Matthieu Moy" <git@matthieu-moy.fr>
Subject: Re: Do test-path_is_{file,dir,exists} make sense anymore with -x?
Date: Tue, 26 Feb 2019 20:39:12 +0100 [thread overview]
Message-ID: <20190226193912.GD19739@szeder.dev> (raw)
In-Reply-To: <20190226174316.GD19606@sigill.intra.peff.net>
On Tue, Feb 26, 2019 at 12:43:17PM -0500, Jeff King wrote:
> On Tue, Feb 26, 2019 at 06:04:00PM +0100, SZEDER Gábor wrote:
>
> > > Whereas:
> > >
> > > + test -f doesnotexist
> > > + echo File doesnotexist doesn't exist.
> > > File doesnotexist doesn't exist.
> > > + false
> > > error: last command exited with $?=1
> > >
> > > Gives me the same thing, but I have to read 5 lines instead of 2 that
> > > ultimately don't tell me any more (and a bit of "huh, 'false' returned
> > > 1? Of course! Oh! It's faking things up and it's the 'echo' that
> > > matters...").
> >
> > I didn't find this to be an issue, but because of functions like
> > 'test_seq' and 'test_must_fail' I've thought about suppressing '-x'
> > output for test helpers (haven't actually done anything about it,
> > though).
>
> I'd be curious how you'd do that.
Well, I started replying with "Dunno" and explaining why I don't think
that it can be done with 'test_must_fail'... but then got a bit of a
lightbulb moment. Now look at this:
diff --git a/t/test-lib-functions.sh b/t/test-lib-functions.sh
index 80402a428f..16adcd54c9 100644
--- a/t/test-lib-functions.sh
+++ b/t/test-lib-functions.sh
@@ -664,7 +664,15 @@ list_contains () {
# Currently recognized signal names are: sigpipe, success.
# (Don't use 'success', use 'test_might_fail' instead.)
+restore_tracing () {
+ if test -n "$trace"
+ then
+ set -x
+ fi
+} 2>/dev/null 4>/dev/null
+
test_must_fail () {
+ { set +x ; } 2>/dev/null 4>/dev/null
case "$1" in
ok=*)
_test_ok=${1#ok=}
@@ -679,24 +687,29 @@ test_must_fail () {
if test $exit_code -eq 0 && ! list_contains "$_test_ok" success
then
echo >&4 "test_must_fail: command succeeded: $*"
+ restore_tracing
return 1
elif test_match_signal 13 $exit_code && list_contains "$_test_ok" sigpipe
then
+ restore_tracing
return 0
elif test $exit_code -gt 129 && test $exit_code -le 192
then
echo >&4 "test_must_fail: died by signal $(($exit_code - 128)): $*"
+ restore_tracing
return 1
elif test $exit_code -eq 127
then
echo >&4 "test_must_fail: command not found: $*"
+ restore_tracing
return 1
elif test $exit_code -eq 126
then
echo >&4 "test_must_fail: valgrind error: $*"
+ restore_tracing
return 1
fi
- return 0
+ restore_tracing
} 7>&2 2>&4
# Similar to test_must_fail, but tolerates success, too. This is
Yeah, it's a hassle, especially in a function with as many return
paths as 'test_must_fail', but look at its output:
+ test_must_fail git rev-parse nope --
fatal: bad revision 'nope'
+ test_must_fail git rev-parse HEAD --
48ab21c1a5972e0fa9d87da7c5da9982872b8db2
test_must_fail: command succeeded: git rev-parse HEAD --
+ return 1
error: last command exited with $?=1
Not even the 'set +x' shows up in the trace output! Unfortunately,
that line is not particularly pleasing on the eyes, but I don't see
any way around that...
Perhaps we could even go one step further with this 'restore_tracing'
helper and add a parameter specifying its return code, so we could
make it the last command invoked in the test helper function, and then
even that 'return 1' would disappear from the trace output.
Furthermore, this would be helpful in those functions where the last
command's return code is relevant, e.g:
test_cmp() {
{ set +x ; } 2>/dev/null 4>/dev/null
$GIT_TEST_CMP "$@"
restore_tracing $?
}
There are a couple of tricky cases:
- Some test helper functions call other test helper functions, and
in those cases tracing would be enabled upon returning from the
inner helper function. This is not an issue with e.g.
'test_might_fail' or 'test_cmp_config', because the inner helper
function is the last command anyway. However, there is
'test_must_be_empty', 'test_dir_is_empty', 'test_config',
'test_commit', etc. which call the other test helper functions
right at the start or in the middle.
- && chains in test helper functions; we must make sure that the
tracing is restored even in case of a failure.
next prev parent reply other threads:[~2019-02-26 19:39 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-02-26 13:42 [PATCH 0/1] [GSoC][PATCH] tests: replace test -(d|f) with test_path_is_(dir|file) Rohit Ashiwal via GitGitGadget
2019-02-26 13:42 ` [PATCH 1/1] tests: replace `test -(d|f)` " Rohit Ashiwal via GitGitGadget
2019-02-26 14:04 ` Duy Nguyen
2019-02-26 16:10 ` Do test-path_is_{file,dir,exists} make sense anymore with -x? Ævar Arnfjörð Bjarmason
2019-02-26 17:04 ` SZEDER Gábor
2019-02-26 17:43 ` Jeff King
2019-02-26 19:39 ` SZEDER Gábor [this message]
2019-02-26 21:01 ` Jeff King
2019-03-03 16:04 ` SZEDER Gábor
2019-03-05 4:55 ` Jeff King
2019-03-04 14:36 ` SZEDER Gábor
2019-03-05 4:58 ` Jeff King
2019-02-26 17:48 ` Matthieu Moy
2019-02-26 18:24 ` Jeff King
2019-02-26 17:35 ` Jeff King
2019-02-26 19:58 ` Johannes Schindelin
2019-02-26 21:02 ` Jeff King
2019-02-27 10:01 ` Duy Nguyen
2019-03-01 2:52 ` Junio C Hamano
2019-02-26 16:01 ` [PATCH 1/1] tests: replace `test -(d|f)` with test_path_is_(dir|file) Johannes Schindelin
2019-02-26 16:30 ` Martin Ågren
2019-02-26 18:29 ` Rohit Ashiwal
2019-02-26 19:52 ` Johannes Schindelin
2019-02-26 20:01 ` Rohit Ashiwal
2019-02-27 5:49 ` Martin Ågren
2019-02-26 14:26 ` [PATCH v2 0/1] [GSoC][PATCH] t3600: use test_path_is_dir and test_path_is_file Rohit Ashiwal via GitGitGadget
2019-02-26 14:26 ` [PATCH v2 1/1] " Rohit Ashiwal via GitGitGadget
2019-02-26 16:37 ` SZEDER Gábor
2019-02-26 18:40 ` Rohit Ashiwal
2019-02-26 20:02 ` Johannes Schindelin
2019-02-26 20:05 ` Rohit Ashiwal
2019-02-26 22:48 ` [PATCH v3 0/1] [GSoC][PATCH] t3600: use test_path_is_* helper functions Rohit Ashiwal via GitGitGadget
2019-02-26 22:48 ` [PATCH v3 1/1] t3600: use test_path_is_* functions Rohit Ashiwal via GitGitGadget
2019-02-27 10:12 ` Duy Nguyen
2019-02-28 10:26 ` [PATCH v4 0/1] [GSoC][PATCH] t3600: use test_path_is_* helper functions Rohit Ashiwal via GitGitGadget
2019-02-28 10:26 ` [PATCH v4 1/1] t3600: use test_path_is_* functions Rohit Ashiwal via GitGitGadget
2019-02-28 19:02 ` [GSoC] acknowledging mistakes Rohit Ashiwal
2019-03-01 2:51 ` Junio C Hamano
2019-03-01 13:13 ` Feeling confused a little bit Rohit Ashiwal
2019-03-02 4:24 ` Rafael Ascensão
2019-03-02 14:46 ` Thomas Gummerer
2019-03-02 16:21 ` [GSoC] Thanking Rohit Ashiwal
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=20190226193912.GD19739@szeder.dev \
--to=szeder.dev@gmail.com \
--cc=avarab@gmail.com \
--cc=git@matthieu-moy.fr \
--cc=git@vger.kernel.org \
--cc=gitgitgadget@gmail.com \
--cc=gitster@pobox.com \
--cc=pclouds@gmail.com \
--cc=peff@peff.net \
--cc=rohit.ashiwal265@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).