diff.c: flush stdout before printing rename warnings
authorNguyễn Thái Ngọc Duy <pclouds@gmail.com>
Tue, 16 Jan 2018 09:23:49 +0000 (16:23 +0700)
committerJunio C Hamano <gitster@pobox.com>
Tue, 16 Jan 2018 22:34:20 +0000 (14:34 -0800)
The diff output is buffered in a FILE object and could still be
partially buffered when we print these warnings (directly to fd 2).
The output is messed up like this

worktree.c | 138 +-
worktree.h warning: inexact rename detection was skipped due to too many files.
| 12 +-
wrapper.c | 83 +-

It gets worse if the warning is printed after color codes for the graph
part are already printed. You'll get a warning in green or red.

Flush stdout first, so we can get something like this instead:

xdiff/xutils.c | 42 +-
xdiff/xutils.h | 4 +-
1033 files changed, 150824 insertions(+), 69395 deletions(-)
warning: inexact rename detection was skipped due to too many files.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
diff.c
diff --git a/diff.c b/diff.c
index 8c78fce49dc5fa9e1215eb3bdb88e1f5e7f9d2c6..bfd1bd2410f9d0b920fda58cb0caae33a94111e7 100644 (file)
--- a/diff.c
+++ b/diff.c
@@ -4623,6 +4623,7 @@ static const char rename_limit_advice[] =
 
 void diff_warn_rename_limit(const char *varname, int needed, int degraded_cc)
 {
+       fflush(stdout);
        if (degraded_cc)
                warning(degrade_cc_to_c_warning);
        else if (needed)