From: Junio C Hamano <gitster@pobox.com>
To: Johannes Sixt <j6t@kdbg.org>
Cc: Git Mailing List <git@vger.kernel.org>,
Johannes Schindelin <johannes.schindelin@gmx.de>
Subject: Re: [PATCH] interactive: do strip trailing CRLF from input
Date: Thu, 31 Jul 2025 09:37:10 -0700 [thread overview]
Message-ID: <xmqqbjp0s4eh.fsf@gitster.g> (raw)
In-Reply-To: <2295f183-038c-4751-b04d-0f1819b67b3a@kdbg.org> (Johannes Sixt's message of "Thu, 31 Jul 2025 18:07:36 +0200")
Johannes Sixt <j6t@kdbg.org> writes:
> `git reset -p file` on a Windows CMD refuses to do anything useful
> with this error message:
>
> (1/5) Unstage this hunk [y,n,q,a,d,j,J,g,/,e,p,?]? n
> 'nly one letter is expected, got 'n
>
> The letter 'O' at the beginning of the line is overwritten by an
> apostrophe, so, clearly the parser sees the string "n\r".
>
> strbuf_trim_trailing_newline() removes trailing CRLF from the string.
> In particular, it first removes LF if present, and if that was the
> case, it also removes CR if present.
>
> git_read_line_interactively() clearly intends to remove CRLF as it
> calls strbuf_trim_trailing_newline(). However, input is gathered using
> strbuf_getline_lf(), which already removes the trailing LF. Now
> strbuf_trim_trailing_newline() does not see LF, so that it does not
> remove CR, either, and leaves it for the caller to process.
>
> Call strbuf_getline() instead, which removes both LF and CR.
I was looking at vicinity of the code this morning, so I am more
familiar with this codepath than I usually am ;-)
The above explanation makes perfect sense. It is quite an old piece
of code, and I am kind of surprised that nobody complained for the
past 5 years.
Will queue. Thanks.
>
> Signed-off-by: Johannes Sixt <j6t@kdbg.org>
> ---
> prompt.c | 8 +-------
> 1 file changed, 1 insertion(+), 7 deletions(-)
>
> diff --git a/prompt.c b/prompt.c
> index f21c5bf1c7..706fba2a50 100644
> --- a/prompt.c
> +++ b/prompt.c
> @@ -77,12 +77,6 @@ char *git_prompt(const char *prompt, int flags)
>
> int git_read_line_interactively(struct strbuf *line)
> {
> - int ret;
> -
> fflush(stdout);
> - ret = strbuf_getline_lf(line, stdin);
> - if (ret != EOF)
> - strbuf_trim_trailing_newline(line);
> -
> - return ret;
> + return strbuf_getline(line, stdin);
> }
prev parent reply other threads:[~2025-07-31 16:37 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-31 16:07 [PATCH] interactive: do strip trailing CRLF from input Johannes Sixt
2025-07-31 16:37 ` 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=xmqqbjp0s4eh.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=j6t@kdbg.org \
--cc=johannes.schindelin@gmx.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.