Subject: RE: [BUG] Strange git notes completion behaviour

From: <[email-masked]>
Date: Fri, 24 Oct 2025 15:02:18 -0400

>-----Original Message-----
>From: Jeff King <[email-masked]>
>Sent: October 24, 2025 2:52 PM
>To: [email-masked]
>Cc: 'D. Ben Knoble' <[email-masked]>; [email-masked]
>Subject: Re: [BUG] Strange git notes completion behaviour
>
>On Fri, Oct 24, 2025 at 02:38:05PM -0400, [email-masked] wrote:
>
>> On October 24, 2025 1:47 PM, Jeff King wrote:
>> >On Fri, Oct 24, 2025 at 01:33:02PM -0400, [email-masked] wrote:
>> >
>> >> What I found is this:
>> >>
>> >> Git drops into sane_execvp and converts the
>> >>
>> >> git notes show HEAD
>> >>
>> >> to
>> >>
>> >> git show 1aa950256829721750e809788e7b858db79a934a.
>> >>
>> >> When execvp is called, it immediately fails with a -12 - not
>> >> returned, just terminates. The -12 is an NonStop-specific execvp
>> >> error indicating the process failed because the object is invalid
>> >> (strange and likely an artifact rather than a real problem).
>> >
>> >When you say "object" here, you don't mean a Git object, but rather
>> >that
>> >execvp() could not run the "git" binary for some reason (so the "object"
>> >here is the on-disk executable)? Just making sure I understand.
>> >
>> >> When I use the arguments as presented to execvp via bash directly, I get:
>> >>
>> >> error: no note found for object
>> >1aa950256829721750e809788e7b858db79a934a.
>> >>
>> >> There is no commit with that hash. HEAD is actually
>> >> 3fc1917e0e69b23265f5c49f90fdb6f4ed98f4a3
>> >> so git show is correctly failing. This is Indicating that notes is
>> >> not invoking git correctly.
>> >
>> >Are you sure you are running "git show" there and not "git notes show".
>> >Because 1aa950256 should be the blob that the note for HEAD points
>> >to, and thus does not itself have a note. And "git show" should not
>> >be looking up notes at all (and the "no note found" message is from
>builtin/notes.c).
>>
>> I am 100% sure that git notes show is running git show with the notes blob as
>above.
>
>Yes, I am, too. What I was asking is when you tried to replicate that using bash
>directly, how did you get a "no note found" message from "git show"? I.e., it
>sounds like you ran the wrong command. Or I am misunderstanding what you you
>meant by "When I use the arguments as presented to execvp via bash directly".

I ran the exact command that git passed to execvp but did so via bash. This is what
gdb showed:

Breakpoint 2, sane_execvp (file=0x80aa470 "git", argv=0x8122700)
    at /home/randall/git/run-command.c:244
*  244          int exec_id = trace2_exec(file, (const char **)argv);
(xInspect 0,1011):n
*  247          if (!execvp(file, argv))
(xInspect 0,1011):p file
$1 = (const unsigned char *) 0x80aa470 "git"
(xInspect 0,1011):p argv[0]
$2 = 0x81224a0 "git"
(xInspect 0,1011):p argv[1]
$3 = 0x8122770 "show"
(xInspect 0,1011):p argv[2]
$4 = 0x8122780 "1aa950256829721750e809788e7b858db79a934a"
(xInspect 0,1011):p argv[3]
$5 = 0x0

I assumed that I should give that command a try from bash.