Subject: Re: [BUGS] Git v2.51.2 on NonStop

From: SZEDER Gábor <[email-masked]>
Date: Thu, 30 Oct 2025 00:18:29 +0100

On Wed, Oct 29, 2025 at 06:41:27PM -0400, [email-masked] wrote:
> On October 29, 2025 6:28 PM, SZEDER Gábor wrote:
> >On Tue, Oct 28, 2025 at 01:40:42PM -0400, [email-masked] wrote:
> >> I have found new defects on 2.51.2 that were not present in 2.51.1 when building
> >with OpenSSL 3.5 (probably unrelated).
> >>
> >> Many failures in t7900 resulting from the use of test_subcommand ! as seen
> >below. This is run in bash 5.0.18:
> >>
> >> + test_subcommand git gc --quiet --no-detach --skip-foreground-tasks
> >> + 0< run-no-auto.txt
> >> {"event":"child_start","sid":"20251028T172435.690328Z-H36b1c598-P7b000
> >> 02d","thread":"main","time":"2025-10-28T17:24:35.879833Z","file":"/hom
> >> e/jenkinsbuild/.jenkins/workspace/Git_Pipeline/run-command.c","line":7
> >> 40,"child_id":2,"child_class":"?","use_shell":false,"argv":["git","gc"
> >> ,"--quiet","--no-detach","--skip-foreground-tasks"]}
> >> + test_subcommand ! git gc --auto --quiet --no-detach
> >> + --skip-foreground-tasks 0< run-auto.txt
> >> test_subcommand[5]: test: argument expected
> >
> >This is a strange trace output, as it includes file descriptor redirections, but lacks the
> >trace of commands executed in test_subcommands.  This trace doesn't look like it's
> >coming from Bash.
> 
> The test_subcommand[5]: test: argument expect is coming from bash. I cannot see how
> it is coming from anywhere else. The test was run with -x but snipped. Reference to
> test_subcommand ! git... fails exactly the same way. Is there something else I can provide?

The -x trace from Bash doesn't include file descriptor redirections,
but includes the commands executed in test_subcommand, and the number
of '+' characters at the beginning of each trace line indicates the
number of subshells, so when the test is really run by Bash the trace
from a test_subcommand invocation looks like this:

  ++ test_subcommand git gc --quiet --no-detach --skip-foreground-tasks
  ++ local negate=
  ++ test git = '!'
  +++ printf '"%s",' git gc --quiet --no-detach --skip-foreground-tasks
  ++ local 'expr="git","gc","--quiet","--no-detach","--skip-foreground-tasks",'
  ++ expr='"git","gc","--quiet","--no-detach","--skip-foreground-tasks"'
  ++ test -n ''
  ++ grep '\["git","gc","--quiet","--no-detach","--skip-foreground-tasks"\]'
  {"event":"child_start","sid":"20251029T230304.507599Z-H3fb05a16-P001a33ae","thread":"main","time":"2025-10-29T23:03:04.512913Z","file":"run-command.c","line":740,"child_id":2,"child_class":"?","use_shell":false,"argv":["git","gc","--quiet","--no-detach","--skip-foreground-tasks"]}
  ++ test_subcommand '!' git gc --auto --quiet --no-detach --skip-foreground-tasks
  ++ local negate=

Since the trace you showed doesn't look like this I still doubt that
it came from Bash.