git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jeff King <peff@peff.net>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org
Subject: [PATCH 3/4] show: turn on rename detection progress reporting
Date: Thu, 24 Mar 2011 13:49:16 -0400	[thread overview]
Message-ID: <20110324174916.GC30685@sigill.intra.peff.net> (raw)
In-Reply-To: <20110324174556.GA30661@sigill.intra.peff.net>

For large commits, it is nice to have some eye candy for the
rename detection.

However, because show can display multiple commits, we have
to be careful not to clutter existing output. We show the
progress report only before we have generated any actual
output; once we have sent output to the terminal or pager,
we turn off progress reporting.

This also makes it safe to use with "git log", though it
will only be useful if the first commit is the slow one.
So this patch actually enables it for all of the
log/whatchanged/show/reflog family.

We also handle the usual --{no-}progress option and check
that stderr goes to a terminal before turning on progress.

Signed-off-by: Jeff King <peff@peff.net>
---
Changes since the last iteration:

  - only show progress for the first commit
  - check isatty(2)
  - --{no-}progress

 Documentation/git-log.txt |    7 +++++++
 builtin/log.c             |   17 ++++++++++++++++-
 2 files changed, 23 insertions(+), 1 deletions(-)

diff --git a/Documentation/git-log.txt b/Documentation/git-log.txt
index 2c84028..c0f763e 100644
--- a/Documentation/git-log.txt
+++ b/Documentation/git-log.txt
@@ -73,6 +73,13 @@ produced by --stat etc.
 	to be prefixed with "\-- " to separate them from options or
 	refnames.
 
+--no-progress::
+--progress::
+	Disable or enable progress reporting during long computations;
+	the default is to enable progress reporting when stderr is a
+	terminal. Currently the only computation with progress support
+	is inexact rename detection.
+
 include::rev-list-options.txt[]
 
 include::pretty-formats.txt[]
diff --git a/builtin/log.c b/builtin/log.c
index 796e9e5..4d52e99 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -27,6 +27,7 @@ static int default_show_root = 1;
 static int decoration_style;
 static const char *fmt_patch_subject_prefix = "PATCH";
 static const char *fmt_pretty;
+static int progress = -1;
 
 static const char * const builtin_log_usage =
 	"git log [<options>] [<since>..<until>] [[--] <path>...]\n"
@@ -109,10 +110,17 @@ static void cmd_log_init(int argc, const char **argv, const char *prefix,
 			rev->show_source = 1;
 		} else if (!strcmp(arg, "-h")) {
 			usage(builtin_log_usage);
+		} else if (!strcmp(arg, "--progress")) {
+			progress = 1;
+		} else if (!strcmp(arg, "--no-progress")) {
+			progress = 0;
 		} else
 			die("unrecognized argument: %s", arg);
 	}
 
+	if (progress == -1)
+		progress = isatty(2);
+
 	/*
 	 * defeat log.decorate configuration interacting with --pretty=raw
 	 * from the command line.
@@ -257,19 +265,26 @@ static int cmd_log_walk(struct rev_info *rev)
 	if (rev->early_output)
 		finish_early_output(rev);
 
+	if (progress)
+		rev->diffopt.show_rename_progress = 1;
+
 	/*
 	 * For --check and --exit-code, the exit code is based on CHECK_FAILED
 	 * and HAS_CHANGES being accumulated in rev->diffopt, so be careful to
 	 * retain that state information if replacing rev->diffopt in this loop
 	 */
 	while ((commit = get_revision(rev)) != NULL) {
-		if (!log_tree_commit(rev, commit) &&
+		int showed = log_tree_commit(rev, commit);
+		if (showed &&
 		    rev->max_count >= 0)
 			/*
 			 * We decremented max_count in get_revision,
 			 * but we didn't actually show the commit.
 			 */
 			rev->max_count++;
+		/* Once we have output, progress will clutter the terminal. */
+		if (showed)
+			rev->diffopt.show_rename_progress = 0;
 		if (!rev->reflog_info) {
 			/* we allow cycles in reflog ancestry */
 			free(commit->buffer);
-- 
1.7.4.41.g423da

  parent reply	other threads:[~2011-03-24 17:49 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-03-22 21:45 [PATCH] builtin/diff.c: remove duplicated call to diff_result_code() Junio C Hamano
2011-03-22 21:50 ` [PATCH 1/3] diffcore-rename: refactor "too many candidates" logic Junio C Hamano
2011-03-22 21:50   ` [PATCH 2/3] diffcore-rename: record filepair for rename src Junio C Hamano
2011-03-22 21:50   ` [PATCH 3/3] diffcore-rename: fall back to -C when -C -C busts the rename limit Junio C Hamano
2011-03-23 15:58     ` Jeff King
2011-03-23 16:41       ` Junio C Hamano
2011-03-23 16:50         ` Jeff King
2011-03-23 18:17       ` Jeff King
2011-03-23 18:18         ` [PATCH 1/3] pager: save the original stderr when redirecting to pager Jeff King
2011-03-23 18:19         ` [PATCH 2/3] progress: use pager's original_stderr if available Jeff King
2011-03-23 18:19         ` [PATCH 3/3] show: turn on rename progress Jeff King
2011-03-23 21:25           ` Junio C Hamano
2011-03-24 14:50             ` Jeff King
2011-03-24 15:00               ` Junio C Hamano
2011-03-24 17:45                 ` Jeff King
2011-03-24 17:46                   ` [PATCH 1/4] pager: save the original stderr when redirecting to pager Jeff King
2011-03-24 17:47                   ` [PATCH 2/4] progress: use pager's original_stderr if available Jeff King
2011-03-24 17:49                   ` Jeff King [this message]
2011-03-24 23:35                     ` [PATCH 3/4] show: turn on rename detection progress reporting Junio C Hamano
2011-03-24 17:51                   ` [PATCH 4/4] diff: " Jeff King
2011-03-25  8:35                     ` Johannes Sixt
2011-03-25  9:09                       ` Jeff King
2011-03-24 23:03                   ` [PATCH 3/3] show: turn on rename progress Junio C Hamano
2011-03-25  6:17                     ` Jeff King

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=20110324174916.GC30685@sigill.intra.peff.net \
    --to=peff@peff.net \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    /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).