From: Jeff King <peff@peff.net>
To: Junio C Hamano <gitster@pobox.com>
Cc: Johannes Schindelin <Johannes.Schindelin@gmx.de>,
git@vger.kernel.org, Lars Schneider <larsxschneider@gmail.com>,
Stefan Beller <sbeller@google.com>
Subject: Re: [PATCH v2 4/4] t/Makefile: introduce TEST_SHELL_PATH
Date: Fri, 15 Dec 2017 05:41:01 -0500 [thread overview]
Message-ID: <20171215104101.GA11637@sigill.intra.peff.net> (raw)
In-Reply-To: <xmqq4lox57c9.fsf@gitster.mtv.corp.google.com>
On Mon, Dec 11, 2017 at 12:37:42PM -0800, Junio C Hamano wrote:
> > Interestingly, many of those do something like this in the Makefile:
> >
> > ifdef GIT_TEST_CMP
> > @echo GIT_TEST_OPTS=... >>$@+
> > endif
> >
> > which seems utterly confusing to me. Because it means that if you build
> > with those options set, then they will override anything in the
> > environment. But if you don't, then you _may_ override them in the
> > environment. In other words:
> >
> > make
> > cd t
> > GIT_TEST_CMP=foo ./t0000-*
> >
> > will respect that variable. But:
> >
> > make GIT_TEST_CMP=foo
> > cd t
> > GIT_TEST_CMP=bar ./t0000-*
> >
> > will not. Which seems weird. But I guess we could follow that pattern
> > with TEST_SHELL_PATH.
>
> Or perhaps we can start setting a better example with the new
> variable, and migrate those weird existing ones over to the new way
> of not forbidding run-time overriding?
This turns out to be quite tricky, because GIT-BUILD-OPTIONS must be
parsed as both a Makefile and shell-script.
So we can do:
1. Omit them from GIT-BUILD-OPTIONS, which means they don't work for
cases where the tests aren't started from the Makefile (which would
have put them in the environment). I think this is a non-starter.
2. Add a Makefile-level ifdef when generating GIT-BUILD-OPTIONS, so
that unused options can be overridden by the environment That's the
"weird" thing above that we do now for some variables.
3. Add something like:
test -z "$FOO" && FOO=...
when building GIT-BUILD-OPTIONS (instead of just FOO=...). But that
doesn't work because it must parse as Makefile.
4. In test-lib.sh, save and restore each such variable so that the
existing environment takes precedence. Like:
FOO_save=$FOO
BAR_save=$BAR
...etc for each...
. GIT-BUILD-OPTIONS
test -n "$FOO_save" && FOO=$FOO_save
test -n "$BAR_save" && BAR=$BAR_save
...etc...
We have to do the save/restore dance rather than just reordering
the assignments, because the existing environment is being passed
into us (so we can't just "assign" it to overwrite what's in the
build options file).
This could be made slightly less tedious with a loop and an eval.
It could possibly be made very succinct but very magical with
something like:
saved=$(export)
. GIT-BUILD-OPTIONS
eval "$saved"
5. Give up on the dual nature of GIT-BUILD-OPTIONS, and generate two
such files (with identical values but different syntax).
I think (4) and (5) are the only things that actually change the
behavior in a meaningful way. But they're a bit more hacky and
repetitive than I'd like. Especially given that I'm not really sure
we're solving an interesting problem. I'm happy enough with the patch as
shown, and I do not recall anybody complaining about the current
behavior of these options.
> There is a long outstanding NEEDSWORK comment in help.c that wonders
> if we want to embed contents from GIT-BUILD-OPTIONS in the resulting
> binary, and the distinction Dscho brought up between "build" and
> "test" phases would start to matter even more once we go in that
> direction.
I guess you're implying having a GIT-BUILD-OPTIONS and a
GIT-TEST-OPTIONS here. But that doesn't save us from the Makefile/shell
duality, unfortunately. Some of the test options need to be read by
t/Makefile, and some need to be read by test-lib.sh (and I suspect there
are some needed in both places).
-Peff
next prev parent reply other threads:[~2017-12-15 10:41 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-10-19 21:01 [PATCH 0/3] making test-suite tracing more useful Jeff King
2017-10-19 21:03 ` [PATCH 1/3] test-lib: silence "-x" cleanup under bash Jeff King
2017-10-19 21:07 ` [PATCH 2/3] t5615: avoid re-using descriptor 4 Jeff King
2017-10-19 21:46 ` Stefan Beller
2017-10-19 23:23 ` Jeff King
2017-10-20 5:50 ` Jeff King
2017-10-20 21:27 ` Stefan Beller
2017-10-20 22:46 ` Jeff King
2017-10-21 0:19 ` Simon Ruderich
2017-10-21 2:02 ` Junio C Hamano
2017-10-21 3:23 ` Jeff King
2017-10-19 21:08 ` [PATCH 3/3] test-lib: make "-x" work with "--verbose-log" Jeff King
2017-10-23 10:56 ` Johannes Schindelin
2017-10-20 22:53 ` [PATCH 4/3] t/Makefile: introduce TEST_SHELL_PATH Jeff King
2017-10-20 23:50 ` SZEDER Gábor
2017-10-21 3:12 ` Jeff King
2017-10-23 11:01 ` Johannes Schindelin
2017-10-24 1:31 ` Jeff King
2017-10-25 21:35 ` Johannes Schindelin
2017-10-25 21:50 ` Jeff King
2017-10-27 14:26 ` Johannes Schindelin
2017-10-23 11:04 ` [PATCH 0/3] making test-suite tracing more useful Johannes Schindelin
2017-10-24 1:32 ` Jeff King
2017-12-08 10:46 ` [PATCH v2 0/4] " Jeff King
2017-12-08 10:47 ` [PATCH v2 1/4] test-lib: silence "-x" cleanup under bash Jeff King
2017-12-08 10:47 ` [PATCH v2 2/4] t5615: avoid re-using descriptor 4 Jeff King
2017-12-08 10:47 ` [PATCH v2 3/4] test-lib: make "-x" work with "--verbose-log" Jeff King
2017-12-08 10:47 ` [PATCH v2 4/4] t/Makefile: introduce TEST_SHELL_PATH Jeff King
2017-12-08 15:08 ` Johannes Schindelin
2017-12-08 22:00 ` Jeff King
2017-12-09 13:44 ` Johannes Schindelin
2017-12-10 14:23 ` Jeff King
2017-12-11 20:37 ` Junio C Hamano
2017-12-15 10:41 ` Jeff King [this message]
2017-12-15 16:58 ` Junio C Hamano
2017-12-21 9:47 ` Jeff King
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=20171215104101.GA11637@sigill.intra.peff.net \
--to=peff@peff.net \
--cc=Johannes.Schindelin@gmx.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=larsxschneider@gmail.com \
--cc=sbeller@google.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).