My previous fix may have fixed running the new t/t6030-bisect-porcelain.sh script that tested the new bisect--helper, which in turn used isatty() to determine whether it was running interactively and was fooled by being redirected to /dev/null. But it not only broke paging when running in a CMD window, due to testing in the wrong worktree I also missed that it broke paging in Git for Windows 2.x' Git Bash (i.e. a MinTTY terminal emulator). Let's use this opportunity to actually clean up the entire isatty() mess once and for all, as part of the problem was introduced by a clever hack that messes with internals of the Microsoft C runtime, and which changed recently, so it was not such a clever hack to begin with. Happily, one of my colleagues had to address that latter problem recently when he was tasked to make Git compile with Microsoft Visual C (the rationale: debugging facilities of Visual Studio are really outstanding, try them if you get a chance). And incidentally, replacing the previous hack with the clean, new solution, which specifies explicitly for the file descriptors 0, 1 and 2 whether we detected an MSYS2 pseudo-tty, whether we detected a real Win32 Console, and whether we had to swap out a real Win32 Console for a pipe to allow child processes to inherit it. While at it (or, actually, more like: as I already made this part of v1 by mistake), upstream the patch carried in Git for Windows that supports color when running Git for Windows in Cygwin terminals. Changes since v1: - rebased onto master - unsquashed 2/3 which was improperly snuck in before, - noted that Beat Bolli tested this (see https://github.com/git-for-windows/git/issues/997#issuecomment-268764693) - fixed the confusing commit message by using Junio's suggested replacement - added the missing white space between ">=" and "0" Alan Davies (1): mingw: fix colourization on Cygwin pseudo terminals Jeff Hostetler (1): mingw: replace isatty() hack Johannes Schindelin (1): mingw: adjust is_console() to work with stdin compat/winansi.c | 198 +++++++++++++++++++++++-------------------------------- 1 file changed, 84 insertions(+), 114 deletions(-) base-commit: 1d1bdafd64266e5ee3bd46c6965228f32e4022ea Published-As: https://github.com/dscho/git/releases/tag/mingw-isatty-fixup-v2 Fetch-It-Via: git fetch https://github.com/dscho/git mingw-isatty-fixup-v2 Interdiff vs v1: diff --git a/compat/winansi.c b/compat/winansi.c index f51a2856d2..477209fce7 100644 --- a/compat/winansi.c +++ b/compat/winansi.c @@ -108,7 +108,7 @@ static int is_console(int fd) } else if (!GetConsoleScreenBufferInfo(hcon, &sbi)) return 0; - if (fd >=0 && fd <= 2) + if (fd >= 0 && fd <= 2) fd_is_interactive[fd] |= FD_CONSOLE; /* initialize attributes */ @@ -555,7 +555,8 @@ static void detect_msys_tty(int fd) #endif -/* Wrapper for isatty(). Most calls in the main git code +/* + * Wrapper for isatty(). Most calls in the main git code * call isatty(1 or 2) to see if the instance is interactive * and should: be colored, show progress, paginate output. * We lie and give results for what the descriptor WAS at @@ -565,7 +566,7 @@ static void detect_msys_tty(int fd) #undef isatty int winansi_isatty(int fd) { - if (fd >=0 && fd <= 2) + if (fd >= 0 && fd <= 2) return fd_is_interactive[fd] != 0; return isatty(fd); } -- 2.11.0.rc3.windows.1