From: "René Scharfe" <rene.scharfe@lsrfire.ath.cx>
To: Junio C Hamano <junkio@cox.net>
Cc: git@vger.kernel.org
Subject: Re: [PATCH] git blame --progress
Date: Mon, 29 Jan 2007 20:59:06 +0100 [thread overview]
Message-ID: <45BE520A.6050906@lsrfire.ath.cx> (raw)
In-Reply-To: <7vfy9ublvj.fsf_-_@assigned-by-dhcp.cox.net>
Junio C Hamano schrieb:
> [PATCH] git blame --progress
>
> With --progress option, the command shows a fairly useless but
> amusing eye-candy while making the user wait.
Nicely done, I like it. Well, then again, I used to watch the progress
of filesystem defragmentors as a kid. Ahem. :-P
The problem here is, of course, that we don't know how beforehand much
work needs to be done. The indicator could be full of stars long before
the start of history is reached.
This could be helped somewhat by having three states instead of two:
unblamed (.), blamed (o) and just-now-blamed (*). Each time new stars
are written you'd demote the other stars in the field to o's. This way
you'll at least see something moving until the end, no matter how often
blame is pushed further down for already blamed lines.
This increases terminal bandwidth usage and on-screen activity, but not
necessarily the usefulness of this thing. :)
René
diff --git a/builtin-blame.c b/builtin-blame.c
index cd54acf..9bed52f 100644
--- a/builtin-blame.c
+++ b/builtin-blame.c
@@ -1229,18 +1229,9 @@ static int eye_candy_spot(struct scoreboard *sb, int lno)
return lno * cnt / sb->num_lines;
}
-static void update_eye_candy(struct scoreboard *sb, struct blame_entry *ent)
+static void update_eye_candy_spots(int cnt, int spot_lo, int spot_hi, char c)
{
- int cnt = eye_candy_spots(sb);
- int spot_lo, spot_hi, spot;
- struct blame_entry *lo, *hi;
-
- for (lo = ent; lo->prev && lo->prev->guilty; lo = lo->prev)
- ;
- spot_lo = eye_candy_spot(sb, lo->lno);
- for (hi = ent; hi->next && hi->next->guilty; hi = hi->next)
- ;
- spot_hi = eye_candy_spot(sb, hi->lno + hi->num_lines - 1);
+ int spot;
for (spot = spot_lo; spot <= spot_hi; spot++) {
int spot_x, spot_y;
@@ -1257,13 +1248,35 @@ static void update_eye_candy(struct scoreboard *sb, struct blame_entry *ent)
fprintf(stderr, "\033[%dA", spot_y);
if (spot_x)
fprintf(stderr, "\033[%dC", spot_x);
- fputc('*', stderr);
+ fputc(c, stderr);
fprintf(stderr, "\033[%dD", spot_x + 1);
if (spot_y)
fprintf(stderr, "\033[%dB", spot_y);
}
}
+static void update_eye_candy(struct scoreboard *sb, struct blame_entry *ent)
+{
+ int cnt = eye_candy_spots(sb);
+ int spot_lo, spot_hi;
+ struct blame_entry *lo, *hi;
+ static int prev_cnt, prev_spot_lo, prev_spot_hi;
+
+ for (lo = ent; lo->prev && lo->prev->guilty; lo = lo->prev)
+ ;
+ spot_lo = eye_candy_spot(sb, lo->lno);
+ for (hi = ent; hi->next && hi->next->guilty; hi = hi->next)
+ ;
+ spot_hi = eye_candy_spot(sb, hi->lno + hi->num_lines - 1);
+
+ update_eye_candy_spots(prev_cnt, prev_spot_lo, prev_spot_hi, 'o');
+ update_eye_candy_spots(cnt, spot_lo, spot_hi, '*');
+
+ prev_cnt = cnt;
+ prev_spot_lo = spot_lo;
+ prev_spot_hi = spot_hi;
+}
+
static void found_guilty_entry(struct scoreboard *sb, struct blame_entry *ent)
{
if (ent->guilty)
next prev parent reply other threads:[~2007-01-29 19:59 UTC|newest]
Thread overview: 92+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-01-26 11:07 More precise tag following Junio C Hamano
2007-01-26 11:53 ` Junio C Hamano
2007-01-27 8:01 ` Shawn O. Pearce
2007-01-27 8:41 ` Junio C Hamano
2007-01-27 13:33 ` Jeff King
2007-01-27 17:47 ` Nicolas Pitre
2007-01-27 9:04 ` Simon 'corecode' Schubert
2007-01-27 12:58 ` Johannes Schindelin
2007-01-27 13:50 ` Simon 'corecode' Schubert
2007-01-27 16:30 ` Jakub Narebski
2007-01-27 17:36 ` Linus Torvalds
2007-01-27 16:46 ` Johannes Schindelin
2007-01-27 17:12 ` Simon 'corecode' Schubert
2007-01-27 19:13 ` Johannes Schindelin
2007-01-27 19:55 ` Simon 'corecode' Schubert
2007-01-27 19:41 ` Nicolas Pitre
2007-01-27 17:22 ` Linus Torvalds
2007-01-27 17:56 ` Linus Torvalds
2007-01-27 22:00 ` Junio C Hamano
2007-01-27 22:54 ` Linus Torvalds
2007-01-28 9:27 ` Junio C Hamano
2007-01-28 9:44 ` [PATCH] git-blame --porcelain: quote filename in c-style when needed Junio C Hamano
2007-01-28 14:25 ` [PATCH] git-blame --incremental: don't use pager René Scharfe
2007-01-28 19:09 ` Junio C Hamano
2007-01-28 19:14 ` Junio C Hamano
2007-01-29 0:32 ` René Scharfe
2007-01-29 2:35 ` [PATCH] git blame --progress Junio C Hamano
2007-01-29 7:00 ` Simon 'corecode' Schubert
2007-01-29 16:54 ` Alex Riesen
2007-01-29 18:12 ` Matthias Lederhofer
2007-01-29 19:06 ` Junio C Hamano
2007-01-29 19:59 ` René Scharfe [this message]
2007-01-29 20:24 ` Linus Torvalds
2007-01-30 1:53 ` Junio C Hamano
2007-01-28 19:08 ` More precise tag following Linus Torvalds
2007-01-28 19:18 ` Junio C Hamano
2007-01-28 19:57 ` Linus Torvalds
2007-01-28 20:01 ` Junio C Hamano
2007-01-28 20:20 ` [PATCH] document 'blame --incremental' Junio C Hamano
2007-01-28 21:06 ` More precise tag following Junio C Hamano
2007-01-28 23:01 ` Jeff King
2007-01-30 9:22 ` Junio C Hamano
2007-01-30 15:31 ` Shawn O. Pearce
2007-01-30 17:02 ` Linus Torvalds
2007-01-28 19:58 ` Junio C Hamano
2007-01-29 6:18 ` Shawn O. Pearce
2007-01-29 10:17 ` Junio C Hamano
2007-01-29 10:31 ` Shawn O. Pearce
2007-01-29 16:24 ` Linus Torvalds
2007-01-29 18:07 ` Simon 'corecode' Schubert
2007-01-29 19:29 ` Theodore Tso
2007-01-29 19:45 ` Linus Torvalds
2007-01-29 20:25 ` Jakub Narebski
2007-01-29 20:47 ` Shawn O. Pearce
2007-01-29 21:02 ` Jakub Narebski
2007-02-09 7:41 ` Shawn O. Pearce
2007-01-31 8:39 ` David Kågedal
2007-01-31 10:59 ` David Kågedal
2007-01-31 16:12 ` Peter Eriksen
2007-01-31 17:04 ` David Kågedal
2007-01-31 17:12 ` Peter Eriksen
2007-01-31 17:35 ` Jakub Narebski
2007-01-31 20:59 ` David Kågedal
2007-01-27 18:40 ` Simon 'corecode' Schubert
2007-01-27 19:02 ` Johannes Schindelin
2007-01-27 19:12 ` Simon 'corecode' Schubert
2007-01-27 19:19 ` Johannes Schindelin
2007-01-27 19:59 ` Jakub Narebski
2007-01-27 19:15 ` Linus Torvalds
2007-01-27 19:25 ` Linus Torvalds
2007-01-27 19:54 ` Jakub Narebski
2007-01-27 20:13 ` Linus Torvalds
2007-01-27 19:36 ` Chris Lee
2007-01-28 18:10 ` Theodore Tso
2007-01-28 18:27 ` Linus Torvalds
2007-01-28 22:26 ` David Lang
2007-01-29 17:34 ` Nicolas Pitre
2007-01-29 17:42 ` Linus Torvalds
2007-01-29 17:58 ` Nicolas Pitre
2007-01-29 19:16 ` Chris Lee
2007-01-29 23:00 ` Eric Wong
2007-01-30 0:42 ` Eric Wong
2007-01-30 0:48 ` Eric Wong
2007-01-30 8:51 ` Eric Wong
2007-01-27 18:52 ` Jakub Narebski
2007-01-27 20:16 ` Jeff King
2007-01-27 22:39 ` Linus Torvalds
2007-01-27 23:52 ` Jeff King
2007-01-28 2:39 ` Theodore Tso
2007-01-28 3:17 ` Randal L. Schwartz
2007-01-28 13:15 ` Jeff King
2007-01-28 7:40 ` Shawn O. Pearce
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=45BE520A.6050906@lsrfire.ath.cx \
--to=rene.scharfe@lsrfire.ath.cx \
--cc=git@vger.kernel.org \
--cc=junkio@cox.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).