From: Junio C Hamano <gitster@pobox.com>
To: "Windl, Ulrich" <u.windl@ukr.de>
Cc: "git@vger.kernel.org" <git@vger.kernel.org>
Subject: Re: git context diff does not recognize shell function name
Date: Thu, 12 Nov 2026 12:51:21 -0800 [thread overview]
Message-ID: <xmqqmrrdhiye.fsf@gitster.g> (raw)
In-Reply-To: <340dc2eef42f4f6690c58765a07621e1@ukr.de> (Ulrich Windl's message of "Thu, 12 Nov 2026 13:39:58 +0000")
"Windl, Ulrich" <u.windl@ukr.de> writes:
> Hi!
>
> In git 2.51.0 I found a minor issue:
That is a release from more than a year ago, but I do not think we
had any change to userdiff (i.e., built-in patterns that define what
line is the function header for various languages) since then (we
added Swift and tweaked scheme). So for practical purposes, I would
expect that whatever you saw in Git 2.51 for shell to be reproducible
in today's code.
Or are you reporting that Git 2.50 (or something older than 2.51)
behaved in a way you prefer, and 2.51 behaves differently?
> "git diff" did not show the corresponding shell function
> name. Admittedly I used a somewhat uncommon line-breaking:
>
> The context in question looks like this:
> ---
> ...
> run_query()
> {
> local p_l_0="$1" LOG_BASE="$2" SUFFIX="$3" URL_BASE="$4" URL="$5" \
> _COUNT="${6:-$COUNT}" RESPONSE_CHECKER="$7"
> local me="${FUNCNAME[0]}" m
> ...
> ---
>
> The context diff looked like this:
> ---
> ...
> @@ -193,6 +188,36 @@ get_params()
> ...
> run_query()
> {
I assume that your e-mail message is whitespace damaged and
run_query() is actually indented by one space, being a context line
together with the opening brace next line? The header stating
get_params() is expected, as the "function name" do not lookahead to
find run_query() in the hunk it is going to show.
> @@ -201,10 +226,9 @@ _COUNT="${6:-$COUNT}" RESPONSE_CHECKER="$7"
It is not that the line that begins run_query()'s definition does
not look like a beginning of a function. It is that this _COUNT=
line does look like a beginning of a new thing, and because it comes
after the start of run_query().
The name of the file would affect which set of regular expressions
are used to sift lines into function headers and other lines. When
the file has no known suffix with language specific rules defined, I
think we just pick any line that begins with a non-whitespace
character, which explains why the line that begins with
_COUNT=... overrides the line that begins with run_query() which
would have been a candidate as another and later candidate.
> local me="${FUNCNAME[0]}" m
> ...
> ---
> ("..." is deleted lines)
> So this may be a combination of unfortunate context sequencing and
> the first line of the new context being unusual. The second chunk
> would still be the same context, namely "run_query()".
prev parent reply other threads:[~2026-11-12 20:51 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-12 13:39 git context diff does not recognize shell function name Windl, Ulrich
2026-11-12 20:51 ` Junio C Hamano [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqqmrrdhiye.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=u.windl@ukr.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox