Re: [PATCH] Ensure restore_term works correctly with DUPLEX
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jun 17, 2025, 19:18 UTC
- Message-ID
- <xmqqh60euqhc.fsf@gitster.g>
- In-Reply-To
- <pull.2000.git.git.1750186571037.gitgitgadget@gmail.com>
"James Duley via GitGitGadget" <gitgitgadget@gmail.com> writes:
Show 19 quoted lines
> From: James Duley <jagduley@gmail.com> > > Previously, if save_term/restore_term was called with the DUPLEX flag > and then without the flag, an assertion was hit. >> Assertion failed: hconout != INVALID_HANDLE_VALUE, >> file compat/terminal.c, line 283 > > This is because save_term doesn't set cmode_out when not DUPLEX, > so an old version of cmode_out was being used. > Therefore, hconout is the correct thing for restore to check > to decide whether to restore stdout console mode. > > I saw this on Windows with interactive.singleKey when doing `git add -p`. > Specifically, after hitting `e` to edit in vim, once on to the prompt > for the next hunk, pressing any key results in the assertion. > > Signed-off-by: James Duley <jagduley@gmail.com> > --- > Ensure restore_term works correctly with DUPLEX
Ran "git log -L247,290:compat/terminal.c" to find commits that touched this Windows specific area of the code to see who might be capable of reviewing this change, as I am certainly not one of them.
e22b245e (terminal: teach git how to save/restore its terminal settings, 2021-10-05) is where the assert being removed came from, it seems.
The author of that commit should be CC'ed if we want to ask for a quicker review. I'll also add Git-for-Windows maintainer as well.
Thanks.
Show 23 quoted lines
> Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-2000%2Fparched%2Frestore-term-windows-fix-v1
> Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-2000/parched/restore-term-windows-fix-v1
> Pull-Request: https://github.com/git/git/pull/2000
>
> compat/terminal.c | 3 +--
> 1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/compat/terminal.c b/compat/terminal.c
> index 584f27bf7e1..72b184555ff 100644
> --- a/compat/terminal.c
> +++ b/compat/terminal.c
> @@ -279,8 +279,7 @@ void restore_term(void)
>
> SetConsoleMode(hconin, cmode_in);
> CloseHandle(hconin);
> - if (cmode_out) {
> - assert(hconout != INVALID_HANDLE_VALUE);
> + if (hconout != INVALID_HANDLE_VALUE) {
> SetConsoleMode(hconout, cmode_out);
> CloseHandle(hconout);
> }
>
> base-commit: 16bd9f20a403117f2e0d9bcda6c6e621d3763e77