From: Jeff King <peff@peff.net>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org
Subject: [PATCH 4/4] diff: turn on rename detection progress reporting
Date: Thu, 24 Mar 2011 13:51:24 -0400 [thread overview]
Message-ID: <20110324175124.GD30685@sigill.intra.peff.net> (raw)
In-Reply-To: <20110324174556.GA30661@sigill.intra.peff.net>
Since all of the progress happens before we generate any
output, this looks OK, even when output goes to a pager.
We do the usual --progress/--no-progress options and check
isatty(2) to enable the feature.
The argument parsing is a little ad-hoc, but we currently
have no parse-options infrastructure here at all. However,
it should be safe to parse like this, because the prior
call to setup_revisions will have removed any options that
take an argument, and our parsing removes --progress from
argv for later parsers. The one exception is diff_no_index,
which may get called early, and needs to learn to ignore
--progress.
Signed-off-by: Jeff King <peff@peff.net>
---
New since the last iteration.
I'm not happy about the option parsing, but converting the whole of "git
diff" to a saner parsing structure is more than I want to take on for
this series. One thing that would make it easier is if the diff parser
understood --progress and stored the result for the caller to check. I
was tempted to do that because the code ends up cleaner, but it feels
wrong.
Documentation/git-diff.txt | 7 +++++++
builtin/diff.c | 28 ++++++++++++++++++++++++++++
diff-no-index.c | 2 ++
3 files changed, 37 insertions(+), 0 deletions(-)
diff --git a/Documentation/git-diff.txt b/Documentation/git-diff.txt
index f8d0819..dbebc93 100644
--- a/Documentation/git-diff.txt
+++ b/Documentation/git-diff.txt
@@ -87,6 +87,13 @@ OPTIONS
:git-diff: 1
include::diff-options.txt[]
+--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.
+
<path>...::
The <paths> parameters, when given, are used to limit
the diff to the named paths (you can give directory
diff --git a/builtin/diff.c b/builtin/diff.c
index 4c9deb2..82ecc1d 100644
--- a/builtin/diff.c
+++ b/builtin/diff.c
@@ -255,6 +255,8 @@ int cmd_diff(int argc, const char **argv, const char *prefix)
struct blobinfo blob[2];
int nongit;
int result = 0;
+ int progress = -1;
+ int unknown_argc, parsed_argc;
/*
* We could get N tree-ish in the rev.pending_objects list.
@@ -307,6 +309,32 @@ int cmd_diff(int argc, const char **argv, const char *prefix)
die("diff_setup_done failed");
}
+ parsed_argc = 0;
+ for (unknown_argc = i = 1; i < argc; i++) {
+ const char *arg = argv[i];
+ if (!strcmp(arg, "--") || arg[0] != '-') {
+ int j;
+ for (j = i; j < argc; j++)
+ argv[unknown_argc++] = argv[j];
+ break;
+ }
+ else if (!strcmp(argv[i], "--progress"))
+ progress = 1;
+ else if (!strcmp(argv[i], "--no-progress"))
+ progress = 0;
+ else {
+ argv[unknown_argc++] = argv[i];
+ continue;
+ }
+ parsed_argc++;
+ }
+ argc -= parsed_argc;
+
+ if (progress == -1)
+ progress = isatty(2);
+ if (progress)
+ rev.diffopt.show_rename_progress = 1;
+
DIFF_OPT_SET(&rev.diffopt, RECURSIVE);
/*
diff --git a/diff-no-index.c b/diff-no-index.c
index 3a36144..42cb413 100644
--- a/diff-no-index.c
+++ b/diff-no-index.c
@@ -212,6 +212,8 @@ void diff_no_index(struct rev_info *revs,
options |= DIFF_SILENT_ON_REMOVED;
i++;
}
+ else if (!strcmp(argv[i], "--progress"))
+ ; /* handled elsewhere */
else if (!strcmp(argv[i], "--"))
i++;
else {
--
1.7.4.41.g423da
next prev parent reply other threads:[~2011-03-24 17:51 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 ` [PATCH 3/4] show: turn on rename detection progress reporting Jeff King
2011-03-24 23:35 ` Junio C Hamano
2011-03-24 17:51 ` Jeff King [this message]
2011-03-25 8:35 ` [PATCH 4/4] diff: " 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=20110324175124.GD30685@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).