Johannes Sixt <j6t@xxxxxxxx> 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@xxxxxxxx> > --- > 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); > }