Re: [PATCH] t0300: workaround bug in FreeBSD < 10 sh
- From
Carlo Marcelo Arenas Belón <carenas@gmail.com>
- Date
- May 14, 2020, 23:30 UTC
- Message-ID
- <20200514233051.GB38566@Carlos-MBP>
- In-Reply-To
- <20200514220346.GA3074610@coredump.intra.peff.net>
On Thu, May 14, 2020 at 06:03:46PM -0400, Jeff King wrote:
Show 11 quoted lines
> On Thu, May 14, 2020 at 02:05:18PM -0700, Carlo Marcelo Arenas Belón wrote: > > > 4c5971e18a (credential: treat "?" and "#" in URLs as end of host, > > 2020-04-14) introduces check_host_and_path to t0300 and some tests that > > use it, but fail in at least FreeBSD 9.3. > > > > The variables in the here-doc fail to be expanded until they are used as > > part of the eval in check(), resulting in (ex: url=fill) instead of what > > was expected. > > Wow, that's very surprising.
And luckily, also a problem that is no longer present with newer versions of the shell and neither NetBSD's or OpenBSD's AFAIK.
Show 17 quoted lines
> Just to be clear, if you run:
>
> foo() {
> for i in "$@"; do
> echo "arg:$i"
> done
> sed s/^/stdin:/
> }
> set -- outer
> foo inner <<EOF
> $1
> EOF
>
> do you get:
>
> arg:inner
> stdin:innercorrect, so the problem was in the here-doc, not the eval; thanks for your explanation and reproduction, will update it in the reroll.
$ foo() {Show 5 quoted lines
> for i in "$@"; do > echo "arg:$i" > done > sed s/^/stdin:/ > }
$ set -- outer $ foo inner <<EOF
> $1 > EOF
arg:inner stdin:inner
> ? (on dash and bash, I get stdin:outer as expected). I don't think the > fact that check() uses eval() should matter, because we'd be > interpreting that here-doc earlier as part of read_chunk().
indeed, apologies for the extra quoting which was part of my original debugging and wasn't really needed.
will keep it without the inversion, only because I think it looks also clearer with the added indentantion.
Carlo