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

Re: [PATCH] t2400: Fix test failures when using grep 2.5

From
PWPhillip Wood <phillip.wood123@gmail.com>
Date
Jul 16, 2023, 15:34 UTC
Message-ID
<3f3a3f5b-70fd-ec3f-acbb-d585b5eb6cbc@gmail.com>
In-Reply-To
<vn5sylull5lqpitsanlyan5fafxj5dhrxgo6k65c462dhqjbno@uwghfyfdixtk>
Hi Jacob
On 16/07/2023 00:15, Jacob Abel wrote:
Show 9 quoted lines
> On 23/07/15 09:59AM, Phillip Wood wrote:
>> Hi Jocab
>>
>> On 15/07/2023 03:55, Jacob Abel wrote:
>>> [...]
>>
>> Thanks for working on this fix. Having looked at the changes I think it
>> would be better just be using a space character in a lot of these
>> expressions - see below.

One thing I forgot to mention was that I think it would be better to explain in the commit message that "\s" etc. are not part of POSIX EREs and that is why they do not work.

Show 16 quoted lines
>>> [...]
>>>
>>> -			grep -E "^hint:\s+git worktree add --orphan -b \S+ \S+\s*$" actual
>>> +			grep -E "^hint:[[:space:]]+git worktree add --orphan -b [^[:space:]]+ [^[:space:]]+[[:space:]]*$" actual
>>
>> We know that "hint:" is followed by a single space and all we're really
>> interested in is that we print something after the "-b " so we can
>> simplify this to
>>
>> 	grep "^hint: git worktree add --orphan -b [^ ]"
>>
>> I think the same applies to most of the other expressions changed in
>> this patch.
> 
> This wouldn't work as it's `hint: ` followed by a `\t` as the command
> is indented in the text block.

Oh so we need to search for a space followed by a tab after "hint:" then. As an aside we often just use four spaces to indent commands in advice messages (see the output of git -C .. grep '" git' \*.c)

> So I just went with `[[:space:]]+` as I
> didn't want to have to worry about whether some platforms expand the
> tab to spaces or how many spaces.
Is that a thing?
Show 24 quoted lines
> I'll make the rest of the suggested
> changes though.
> 
>>> [...]
>>> @@ -998,8 +998,8 @@ test_dwim_orphan () {
>>>    					headpath=$(git $dashc_args rev-parse --sq --path-format=absolute --git-path HEAD) &&
>>
>> I'm a bit confused by the --sq here - why does it need to be shell
>> quoted when it is always used inside double quotes?
> 
> To be honest I can't remember if this specifically needs to be in
> quotes or not however I had a lot of trouble during the development of
> that patchset with things escaping quotes and causing breakages in the
> tests so if it isn't currently harmful I'd personally prefer to leave
> it as is.
> 
>> Also when the reftable backend is used I'm not sure that HEAD is
>> actually a file in $GIT_DIR anymore (that's less of an issue at the
>> moment as that backend is not is use yet).
> 
> If there is documentation (or discussions) on how to use this backend
> properly I'd appreciate a link and I can try workshopping a better
> solution then. The warning included in the original patchset reads
> from that HEAD file as well so it would also need to be adapted.

I'm afraid I don't have anything specific, there were some patches a while ago such as dd8468ef00 (t5601: read HEAD using rev-parse, 2021-05-31) that stopped reading HEAD from the filesystem.

Show 5 quoted lines
> The reason I did it this way is because I didn't see any easy way to
> get the raw contents of the HEAD when it was invalid. If there is a
> cleaner/safer/more portable way to view those contents when HEAD
> points to an invalid or unborn reference, I'd be willing to work on a
> followup patch down the line.

I think it might be better to just diagnose if HEAD is a dangling symbolic-ref or contains an invalid oid and leave it at that. See the documentation in refs.h for refs_resolve_ref_unsafe() for how to check if HEAD is a dangling symbolic ref - if rego_get_oid(repo, "HEAD") fails and it is not a dangling symbolic ref then it contains an invalid oid.

Best Wishes
Phillip
Show 19 quoted lines
>>> [...]
>>
>> Using grep like this makes it harder to debug test failures as one has
>> to run the test with "-x" in order to try and figure out which grep
>> actually failed. I think here we can replace the sequence of "grep"s
>> with "test_cmp"
>>
>> 	cat >expect <<-EOF &&
>> 	HEAD points to an invalid (or orphaned) reference
>> 	HEAD path: $headpath
>> 	HEAD contents: $headcontents
>> 	EOF
>>
>> 	test_cmp expect actual
> 
> I'll make these changes.
> 
>> [...]
> 
Previous: Jacob AbelNext: Junio C Hamano
Message 6 of 25 in “t2400: Fix test failures when using grep 2.5”
  1. t2400: Fix test failures when using grep 2.5Jacob Abel, Jul 15, 2023
  2. Phillip WoodJul 15, 2023
  3. Jacob AbelJul 15, 2023
  4. Junio C HamanoJul 16, 2023
  5. Jacob AbelJul 16, 2023
  6. Phillip WoodJul 16, 2023
  7. Junio C HamanoJul 17, 2023
  8. Jacob AbelJul 18, 2023
  9. Phillip WoodJul 18, 2023
  10. Jacob AbelJul 21, 2023
  11. Jacob AbelJul 15, 2023
  12. t2400: Fix test failures when using grep 2.5Jacob Abel, Jul 16, 2023
  13. 0/3 t2400: Fix test failures when using grep 2.5Jacob Abel, Jul 21, 2023
  14. 1/3 t2400: drop no-op `--sq` from rev-parse callJacob Abel, Jul 21, 2023
  15. 2/3 builtin/worktree.c: convert tab in advice to spaceJacob Abel, Jul 21, 2023
  16. 3/3 t2400: rewrite regex to avoid unintentional PCREJacob Abel, Jul 21, 2023
  17. Junio C HamanoJul 21, 2023
  18. Junio C HamanoJul 21, 2023
  19. Jacob AbelJul 22, 2023
  20. 0/3 t2400: Fix test failures when using grep 2.5Jacob Abel, Jul 26, 2023
  21. 1/3 t2400: drop no-op `--sq` from rev-parse callJacob Abel, Jul 26, 2023
  22. 2/3 builtin/worktree.c: convert tab in advice to spaceJacob Abel, Jul 26, 2023
  23. 3/3 t2400: rewrite regex to avoid unintentional PCREJacob Abel, Jul 26, 2023
  24. Junio C HamanoJul 26, 2023
  25. Phillip WoodJul 28, 2023

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.