aboutsummaryrefslogtreecommitdiffstats
path: root/progress.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2019-07-29 12:38:19 -0700
committerJunio C Hamano <gitster@pobox.com>2019-07-29 12:38:19 -0700
commit3e06e74e4cc221d0b602622a5a8d472cfa3efa2d (patch)
tree1d22e6e40d9c6d8daddcf4c1a9e19a46255bfde4 /progress.c
parent292a0de9982aff5e4f952214c1b9f762d8a1585a (diff)
parent5b12e3123b7b70e3875404a4ffe571ca079364fe (diff)
downloadgit-3e06e74e4cc221d0b602622a5a8d472cfa3efa2d.tar.gz
Merge branch 'sg/rebase-progress' into maint
Use "Erase in Line" CSI sequence that is already used in the editor support to clear cruft in the progress output. * sg/rebase-progress: progress: use term_clear_line() rebase: fix garbled progress display with '-x' pager: add a helper function to clear the last line in the terminal t3404: make the 'rebase.missingCommitsCheck=ignore' test more focused t3404: modernize here doc style
Diffstat (limited to 'progress.c')
-rw-r--r--progress.c28
1 files changed, 11 insertions, 17 deletions
diff --git a/progress.c b/progress.c
index a2e8cf64a8..095dcd0ddf 100644
--- a/progress.c
+++ b/progress.c
@@ -88,7 +88,6 @@ static void display(struct progress *progress, uint64_t n, const char *done)
const char *tp;
struct strbuf *counters_sb = &progress->counters_sb;
int show_update = 0;
- int last_count_len = counters_sb->len;
if (progress->delay && (!progress_update || --progress->delay))
return;
@@ -116,26 +115,21 @@ static void display(struct progress *progress, uint64_t n, const char *done)
if (show_update) {
if (is_foreground_fd(fileno(stderr)) || done) {
const char *eol = done ? done : "\r";
- size_t clear_len = counters_sb->len < last_count_len ?
- last_count_len - counters_sb->len + 1 :
- 0;
- size_t progress_line_len = progress->title_len +
- counters_sb->len + 2;
- int cols = term_columns();
+ term_clear_line();
if (progress->split) {
- fprintf(stderr, " %s%*s", counters_sb->buf,
- (int) clear_len, eol);
- } else if (!done && cols < progress_line_len) {
- clear_len = progress->title_len + 1 < cols ?
- cols - progress->title_len - 1 : 0;
- fprintf(stderr, "%s:%*s\n %s%s",
- progress->title, (int) clear_len, "",
- counters_sb->buf, eol);
+ fprintf(stderr, " %s%s", counters_sb->buf,
+ eol);
+ } else if (!done &&
+ /* The "+ 2" accounts for the ": ". */
+ term_columns() < progress->title_len +
+ counters_sb->len + 2) {
+ fprintf(stderr, "%s:\n %s%s",
+ progress->title, counters_sb->buf, eol);
progress->split = 1;
} else {
- fprintf(stderr, "%s: %s%*s", progress->title,
- counters_sb->buf, (int) clear_len, eol);
+ fprintf(stderr, "%s: %s%s", progress->title,
+ counters_sb->buf, eol);
}
fflush(stderr);
}