git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v2 3/3] test-lib.sh: support -x option for shell-tracing

From
Jeff King <peff@peff.net>
Date
Oct 13, 2014, 22:43 UTC
Message-ID
<20141013224342.GA22290@peff.net>
In-Reply-To
<20141013223303.GA17045@peff.net>
On Mon, Oct 13, 2014 at 06:33:03PM -0400, Jeff King wrote:
Show 28 quoted lines
> > But still it is disturbing to see that there is a blank line
> > difference with and without this change in the file created by the
> > test (i.e. the client of the code this patch touches).
> 
> This fixes it:
> 
> diff --git a/t/test-lib.sh b/t/test-lib.sh
> index 4dab575..059bb25 100644
> --- a/t/test-lib.sh
> +++ b/t/test-lib.sh
> @@ -528,8 +528,7 @@ maybe_setup_valgrind () {
>  test_eval_inner_ () {
>  	eval "
>  		test \"$trace\" = t && set -x
> -		$*
> -	"
> +		$*"
>  }
>  
>  test_eval_ () {
> 
> 
> My patch definitely expands the snippet with an extra trailing newline.
> But what I really don't understand is why that would impact the
> _contents_ of the config file.
> 
> I'll dig further, but I'm about to leave the computer for dinner for a
> few hours, so please don't hold your breath. :)
OK, I lied. I couldn't resist spending 5 more minutes on it.

If you instrument t1308 on master to look at the contents of .git/config directly after the setup step, you'll see that the file ends with (tabs marked as ^I):

  [...]
  ^I^Ihorns
  ^IEOF

Which makes sense. We forgot the tab-eating "<<-" in the here-doc, so the tab-indented EOF was not counted as the end of the input. So this test is bogus and broken, and the breakage introduced by my patch is only triggered because of that (which isn't to say we shouldn't necessarily adjust my patch, but we definitely should fix this test).

What really surprises me is that the shell is fine with a here-doc ending inside an eval. Bash at least warns:

  $ bash -c "eval 'cat <<EOF
    content'"
  bash: line 2: warning: here-document at line 1 delimited by end-of-file (wanted `EOF')
      content
but dash silently accepts it:
  $ dash -c "eval 'cat <<EOF
    content'"
      content

Maybe this is something that every shell does, but it certainly seems like something we should not be relying on (and it was definitely not something the test meant to rely on, as evidenced by the bogus EOF marker it included).

-Peff
Previous: Junio C HamanoNext: Junio C Hamano
Message 20 of 26 in “"-x" tracing option for tests”
  1. 0/3 "-x" tracing option for testsJeff King, Oct 10, 2014
  2. 1/3 t5304: use test_path_is_* instead of "test -f"Jeff King, Oct 10, 2014
  3. 2/3 t5304: use helper to report failure of "test foo = bar"Jeff King, Oct 10, 2014
  4. Jonathan NiederOct 13, 2014
  5. Jeff KingOct 13, 2014
  6. Jonathan NiederOct 13, 2014
  7. Junio C HamanoOct 13, 2014
  8. Jonathan NiederOct 13, 2014
  9. Junio C HamanoOct 13, 2014
  10. Jeff KingOct 13, 2014
  11. 3/3 test-lib.sh: support -x option for shell-tracingJeff King, Oct 10, 2014
  12. Jeff KingOct 10, 2014
  13. Jeff KingOct 10, 2014
  14. 3/3 test-lib.sh: support -x option for shell-tracingJeff King, Oct 10, 2014
  15. Junio C HamanoOct 13, 2014
  16. Junio C HamanoOct 13, 2014
  17. Junio C HamanoOct 13, 2014
  18. Jeff KingOct 13, 2014
  19. Junio C HamanoOct 13, 2014
  20. Jeff KingOct 13, 2014
  21. Junio C HamanoOct 13, 2014
  22. Jeff KingOct 14, 2014
  23. Junio C HamanoOct 13, 2014
  24. Jeff KingOct 13, 2014
  25. Michael HaggertyOct 14, 2014
  26. Jeff KingOct 14, 2014

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.