From: Johannes Schindelin <Johannes.Schindelin@gmx.de>
To: "Carlo Marcelo Arenas Belón" <carenas@gmail.com>
Cc: git@vger.kernel.org, congdanhqx@gmail.com, gitster@pobox.com
Subject: Re: [PATCH] t/test_lib: avoid naked bash arrays in file_lineno
Date: Thu, 7 May 2020 21:52:12 +0200 (CEST) [thread overview]
Message-ID: <nycvar.QRO.7.76.6.2005072139300.56@tvgsbejvaqbjf.bet> (raw)
In-Reply-To: <20200507055118.69971-1-carenas@gmail.com>
[-- Attachment #1: Type: text/plain, Size: 2891 bytes --]
Hi Carlo,
On Wed, 6 May 2020, Carlo Marcelo Arenas Belón wrote:
> 662f9cf154 (tests: when run in Bash, annotate test failures with file
> name/line number, 2020-04-11), introduces a way to report the location
> (file:lineno) of a failed test case by traversing the bash callstack.
>
> The implementation requires bash and is therefore protected by a guard
> but NetBSD sh will still have to parse the function and therefore will
> result in:
>
> ** t0000-basic.sh ***
> ./test-lib.sh: 681: Syntax error: Bad substitution
>
> Enclose the bash specific code inside an eval to avoid parsing errors
> and while at it, simplify the logic so that instead of traversing the
> callstack just pop the two topmost entries that are required.
I would be okay with that, but that's not what the patch does:
> Helped-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
> Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>
> ---
> t/test-lib.sh | 15 +++++++--------
> 1 file changed, 7 insertions(+), 8 deletions(-)
>
> diff --git a/t/test-lib.sh b/t/test-lib.sh
> index 1b221951a8..60b8e70678 100644
> --- a/t/test-lib.sh
> +++ b/t/test-lib.sh
> @@ -677,14 +677,13 @@ die () {
>
> file_lineno () {
> test -z "$GIT_TEST_FRAMEWORK_SELFTEST" && test -n "$BASH" || return 0
> - local i
> - for i in ${!BASH_SOURCE[*]}
> - do
> - case $i,"${BASH_SOURCE[$i]##*/}" in
> - 0,t[0-9]*.sh) echo "t/${BASH_SOURCE[$i]}:$LINENO: ${1+$1: }"; return;;
> - *,t[0-9]*.sh) echo "t/${BASH_SOURCE[$i]}:${BASH_LINENO[$(($i-1))]}: ${1+$1: }"; return;;
> - esac
> - done
Note how this `for` loop stops as soon as it finds a `t/[0-9]*.sh` in the
backtrace?
> + eval '
> + local n=$(echo ${#BASH_SOURCE[*]})
> + if test $n -ge 2
> + then
> + echo "${BASH_SOURCE[$n - 1]}:${BASH_LINENO[$n - 2]}: $1: "
> + fi
This loop is completely lost here.
Now, you could argue that your version is better because it avoids the
loop and always shows the ultimate caller in the backtrace.
However, I would then immediately point you to `t/t0027-auto-crlf.sh` and
ask whether it is all that useful to the `commit_chk_wrnNNO` call rather
than one of the five `test_expect_success` calls contained in that
function.
Besides, you simply replaces `${1+$1: }` by `$1: `.
Again, you could argue that your version is better because there is now
only one caller, and it always passes `error` as first parameter.
I would not be _too_ happy about losing the logic that allows calling
`file_lineno` in other circumstances (I found it valuable for debugging),
but _in the least_ you need to talk about this change in the commit
message. Just changing the behavior without even describing, let alone
justifying, it in the commit message is a bad idea.
Ciao,
Dscho
> + '
> }
>
> GIT_EXIT_OK=
> --
> 2.26.2.686.gfaf46a9ccd
>
>
next prev parent reply other threads:[~2020-05-07 19:52 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-07 5:51 [PATCH] t/test_lib: avoid naked bash arrays in file_lineno Carlo Marcelo Arenas Belón
2020-05-07 14:53 ` Junio C Hamano
2020-05-07 17:33 ` Carlo Arenas
2020-05-07 17:57 ` Carlo Marcelo Arenas Belón
2020-05-08 23:53 ` Johannes Schindelin
2020-05-07 19:52 ` Johannes Schindelin [this message]
2020-05-08 0:58 ` Carlo Marcelo Arenas Belón
2020-05-08 1:17 ` Junio C Hamano
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
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=nycvar.QRO.7.76.6.2005072139300.56@tvgsbejvaqbjf.bet \
--to=johannes.schindelin@gmx.de \
--cc=carenas@gmail.com \
--cc=congdanhqx@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.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.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
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 read-only IMAP folder(s) and NNTP newsgroup(s).