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

Re: Test Failure t5510,t5562 - was RE: [ANNOUNCE] Git v2.37.0-rc1

From
SZEDER Gábor <szeder.dev@gmail.com>
Date
Jun 20, 2022, 20:34 UTC
Message-ID
<20220620203405.GC1689@szeder.dev>
In-Reply-To
<495bd957-43dc-f252-657d-2969bb7ad5f3@github.com>
On Mon, Jun 20, 2022 at 04:00:03PM -0400, Derrick Stolee wrote:
Show 21 quoted lines
> On 6/20/22 2:59 PM, rsbecker@nexbridge.com wrote:
> > On June 20, 2022 2:46 PM, Derrick Stolee wrote:
> 
> >> The issue is this line (some tabs removed):
> >>
> >>  new_cmdline=$(printf "%s" "$cmdline" | perl -pe
> >> 's[origin(?!/)]["'"$remote_url"'"]g')
> >>
> >> At this point, $remote_url contains the file path including the @ symbol. However,
> >> this perl invocation is dropping everything starting at the @ to the next slash.
> >>
> >> I'm not sure of a better way to accomplish what is trying to be done here (replace
> >> 'origin' with that specific url) without maybe causing other issues.
> >>
> >> This line was introduced by e1790f9245f (fetch tests: fetch <url> <spec> as well as
> >> fetch [<remote>], 2018-02-09).
> > 
> > How about using sed instead of perl for this?
> 
> I wasn't sure if using sed would create a different kind of replacement
> problem, but using single-quotes seems to get around that kind of issue.

In a 'sed s/regexp/replacement/' command the replacement part has a few characters with special meaning, and if those characters happen to appear in the path of the trash directory, then:

  $ ./t5510-fetch.sh --root='/tmp/foo\1/'
  ok 64 - name prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --no-prune; branch:kept tag:kept
  sed: -e expression #1, char 62: invalid reference \1 on `s' command's RHS
  sed: -e expression #1, char 62: invalid reference \1 on `s' command's RHS
  ok 65 - link prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --no-prune; branch:kept tag:kept
  ok 66 - name prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --prune; branch:pruned tag:kept
  sed: -e expression #1, char 62: invalid reference \1 on `s' command's RHS
  sed: -e expression #1, char 62: invalid reference \1 on `s' command's RHS
  not ok 67 - link prune fetch.prune=unset remote.origin.prune=unset fetch.pruneTags=unset remote.origin.pruneTags=unset --prune; branch:pruned tag:kept
  [...]
  # failed 28 among 183 test(s)
Show 57 quoted lines
> Please see the patch below. I'm currently running CI in a GGG PR [1]
> 
> [1] https://github.com/gitgitgadget/git/pull/1267
> 
> Thanks,
> -Stolee
> 
> 
> --- >8 ---
> 
> >From 1df4fc66d4a62adc7087d7d22c8d78842b4e9b4d Mon Sep 17 00:00:00 2001
> From: Derrick Stolee <derrickstolee@github.com>
> Date: Mon, 20 Jun 2022 15:52:09 -0400
> Subject: [PATCH] t5510: replace 'origin' with URL more carefully
> 
> The many test_configured_prune tests in t5510-fetch.sh test many
> combinations of --prune, --prune-tags, and using 'origin' or an explicit
> URL. Some machinery was introduced in e1790f9245f (fetch tests: fetch
> <url> <spec> as well as fetch [<remote>], 2018-02-09) to replace
> 'origin' with this explicit URL. This URL is a "file:///" URL for the
> root of the $TRASH_DIRECTORY.
> 
> However, if the current build tree has an '@' symbol, the replacement
> using perl fails. It drops the '@' as well as anything else in that
> directory name.
> 
> You can verify this locally by cloning git.git into a "victim@03"
> directory and running the test script.
> 
> To resolve this issue, replace the perl invocation with two sed
> commands. These two are used to ensure that we match exactly on the
> whole word 'origin'. We can guarantee that the word boundaries are
> spaces in our tests. The reason to use exact words is that sometimes a
> refspec is supplied, such as "+refs/heads/*:refs/remotes/origin/*" which
> would cause an incorrect replacement. The two commands are used because
> there is not a clear POSIX way to match on word boundaries without
> getting extremely pedantic about what possible characters we could have
> at the boundaries.
> 
> Reported-by: Randall Becker <rsbecker@nexbridge.com>
> Signed-off-by: Derrick Stolee <derrickstolee@github.com>
> ---
>  t/t5510-fetch.sh | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/t/t5510-fetch.sh b/t/t5510-fetch.sh
> index 4620f0ca7fa..8ca3aa5e931 100755
> --- a/t/t5510-fetch.sh
> +++ b/t/t5510-fetch.sh
> @@ -853,7 +853,9 @@ test_configured_prune_type () {
>  		then
>  			new_cmdline=$cmdline_setup
>  		else
> -			new_cmdline=$(printf "%s" "$cmdline" | perl -pe 's[origin(?!/)]["'"$remote_url"'"]g')
> +			new_cmdline=$(printf "%s" "$cmdline" | \
> +					sed "s~origin ~'$remote_url' ~g" | \
> +					sed "s~ origin~ '$remote_url'~g")
'sed' can run multiple commands at once, e.g. 'sed -e s/// -e s///'.
Show 8 quoted lines
>  		fi
>  
>  		if test "$fetch_prune_tags" = 'true' ||
> -- 
> 2.36.1.vfs.0.0
> 
> 
>  
Previous: Derrick StoleeNext: Ævar Arnfjörð Bjarmason
Message 5 of 37 in “Test Failure t5510,t5562 - was RE: [ANNOUNCE] Git v2.37.0-rc1”
  1. rsbecker@nexbridge.comJun 20, 2022
  2. Derrick StoleeJun 20, 2022
  3. rsbecker@nexbridge.comJun 20, 2022
  4. Derrick StoleeJun 20, 2022
  5. SZEDER GáborJun 20, 2022
  6. Ævar Arnfjörð BjarmasonJun 20, 2022
  7. Junio C HamanoJun 20, 2022
  8. rsbecker@nexbridge.comJun 20, 2022
  9. Ævar Arnfjörð BjarmasonJun 20, 2022
  10. rsbecker@nexbridge.comJun 20, 2022
  11. t5510: replace 'origin' with URL more carefully (was Re: Test Failure t5510,t5562 - was RE: [ANNOUNCE] Git v2.37.0-rc1)Derrick Stolee, Jun 20, 2022
  12. Johannes SixtJun 21, 2022
  13. Jeff KingJun 21, 2022
  14. SZEDER GáborJun 21, 2022
  15. Jeff KingJun 21, 2022
  16. Junio C HamanoJun 21, 2022
  17. Junio C HamanoJun 21, 2022
  18. Derrick StoleeJun 21, 2022
  19. Junio C HamanoJun 21, 2022
  20. 00/10 t5510: fix the quoting messÆvar Arnfjörð Bjarmason, Jun 21, 2022
  21. 01/10 fetch tests: remove redundant test_unconfig()Ævar Arnfjörð Bjarmason, Jun 21, 2022
  22. Junio C HamanoJun 22, 2022
  23. 04/10 fetch tests: add a helper to avoid boilerplateÆvar Arnfjörð Bjarmason, Jun 21, 2022
  24. 03/10 fetch tests: use "local", &&-chaining, style etc.Ævar Arnfjörð Bjarmason, Jun 21, 2022
  25. 02/10 fetch tests: use named, not positional parametersÆvar Arnfjörð Bjarmason, Jun 21, 2022
  26. 05/10 fetch tests: pass "mode" parameter first, pave way for "$@"Ævar Arnfjörð Bjarmason, Jun 21, 2022
  27. Junio C HamanoJun 22, 2022
  28. 06/10 fetch tests: pass a list, not a string of argumentsÆvar Arnfjörð Bjarmason, Jun 21, 2022
  29. 07/10 fetch tests: remove lazy variable setupÆvar Arnfjörð Bjarmason, Jun 21, 2022
  30. 08/10 fetch tests: remove shelling out for previously "lazy" variablesÆvar Arnfjörð Bjarmason, Jun 21, 2022
  31. 09/10 fetch tests: stop implicitly adding refspecsÆvar Arnfjörð Bjarmason, Jun 21, 2022
  32. 10/10 fetch tests: fix needless and buggy re-quotingÆvar Arnfjörð Bjarmason, Jun 21, 2022
  33. Junio C HamanoJun 22, 2022
  34. Derrick StoleeJun 22, 2022
  35. Ævar Arnfjörð BjarmasonJun 22, 2022
  36. Junio C HamanoJun 22, 2022
  37. rsbecker@nexbridge.comJun 21, 2022

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.