]> git.ipfire.org Git - thirdparty/git.git/commitdiff
subtree: don't let debug and progress output clash
authorLuke Shumaker <lukeshu@datawire.io>
Tue, 27 Apr 2021 21:17:42 +0000 (15:17 -0600)
committerJunio C Hamano <gitster@pobox.com>
Wed, 28 Apr 2021 07:47:18 +0000 (16:47 +0900)
Currently, debug output (triggered by passing '-d') and progress output
stomp on each other.  The debug output is just streamed as lines to
stderr, and the progress output is sent to stderr as '%s\r'.  When
writing to a file, it is awkward to read and difficult to distinguish
between the debug output and a progress line.  When writing to a
terminal the debug lines hide progress lines.

So, when '-d' has been passed, spit out progress as 'progress: %s\n',
instead of as '%s\r', so that it can be detected, and so that the debug
lines don't overwrite the progress when written to a terminal.

Signed-off-by: Luke Shumaker <lukeshu@datawire.io>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
contrib/subtree/git-subtree.sh

index 441571c85a5e94fb200761648bbf19eb705607d7..53a1a025f5bccf773aaa2134ee534a5be07eb34a 100755 (executable)
@@ -67,7 +67,27 @@ debug () {
 progress () {
        if test -z "$GIT_QUIET"
        then
-               printf "%s\r" "$*" >&2
+               if test -z "$arg_debug"
+               then
+                       # Debug mode is off.
+                       #
+                       # Print one progress line that we keep updating (use
+                       # "\r" to return to the beginning of the line, rather
+                       # than "\n" to start a new line).  This only really
+                       # works when stderr is a terminal.
+                       printf "%s\r" "$*" >&2
+               else
+                       # Debug mode is on.  The `debug` function is regularly
+                       # printing to stderr.
+                       #
+                       # Don't do the one-line-with-"\r" thing, because on a
+                       # terminal the debug output would overwrite and hide the
+                       # progress output.  Add a "progress:" prefix to make the
+                       # progress output and the debug output easy to
+                       # distinguish.  This ensures maximum readability whether
+                       # stderr is a terminal or a file.
+                       printf "progress: %s\n" "$*" >&2
+               fi
        fi
 }