git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] diff --quick
@ 2007-03-14 18:24 Junio C Hamano
  2007-03-14 21:26 ` [PATCH 1/5] Remove unused diffcore_std_no_resolve Junio C Hamano
                   ` (4 more replies)
  0 siblings, 5 replies; 23+ messages in thread
From: Junio C Hamano @ 2007-03-14 18:24 UTC (permalink / raw)
  To: git

This adds the command line option 'quick' to tell 'git diff-*' that
we are not interested in the actual diff contents but only if there
is any change.  This option automatically turns --exit-code on, and
turns off output formatting, as it does not make much sense to show
the first hit we happened to have found.

The backends have not been taught about the option with this patch.
That is a topic for later rounds.

Signed-off-by: Junio C Hamano <junkio@cox.net>
---

 * Obviously this comes on top of Alex's --exit-code.

 diff.c |   28 ++++++++++++++++++++++++++--
 diff.h |    4 ++--
 2 files changed, 28 insertions(+), 4 deletions(-)

diff --git a/diff.c b/diff.c
index 7d938c1..99f5802 100644
--- a/diff.c
+++ b/diff.c
@@ -1958,6 +1958,23 @@ int diff_setup_done(struct diff_options *options)
 	if (options->abbrev <= 0 || 40 < options->abbrev)
 		options->abbrev = 40; /* full */
 
+	/*
+	 * It does not make sense to show the first hit we happened
+	 * to have found.  It does not make sense not to return with
+	 * exit code in such a case either.
+	 */
+	if (options->quick) {
+		options->output_format = DIFF_FORMAT_NO_OUTPUT;
+		options->exit_with_status = 1;
+	}
+
+	/*
+	 * If we postprocess in diffcore, we cannot simply return
+	 * upon the first hit.  We need to run diff as usual.
+	 */
+	if (options->pickaxe || options->filter)
+		options->quick = 0;
+
 	return 0;
 }
 
@@ -2136,6 +2153,8 @@ int diff_opt_parse(struct diff_options *options, const char **av, int ac)
 		options->detect_rename = 0;
 	else if (!strcmp(arg, "--exit-code"))
 		options->exit_with_status = 1;
+	else if (!strcmp(arg, "--quick"))
+		options->quick = 1;
 	else
 		return 0;
 	return 1;
@@ -2900,6 +2919,11 @@ static void diffcore_apply_filter(const char *filter)
 
 void diffcore_std(struct diff_options *options)
 {
+	if (options->quick) {
+		options->has_changes = !!diff_queued_diff.nr;
+		return;
+	}
+
 	if (options->break_opt != -1)
 		diffcore_break(options->break_opt);
 	if (options->detect_rename)
@@ -2912,8 +2936,8 @@ void diffcore_std(struct diff_options *options)
 		diffcore_order(options->orderfile);
 	diff_resolve_rename_copy();
 	diffcore_apply_filter(options->filter);
-	if (options->exit_with_status)
-		options->has_changes = !!diff_queued_diff.nr;
+
+	options->has_changes = !!diff_queued_diff.nr;
 }
 
 
diff --git a/diff.h b/diff.h
index 81fa265..2555120 100644
--- a/diff.h
+++ b/diff.h
@@ -57,6 +57,8 @@ struct diff_options {
 		 find_copies_harder:1,
 		 color_diff:1,
 		 color_diff_words:1,
+		 has_changes:1,
+		 quick:1,
 		 exit_with_status:1;
 	int context;
 	int break_opt;
@@ -72,8 +74,6 @@ struct diff_options {
 	const char *msg_sep;
 	const char *stat_sep;
 	long xdl_opts;
-	/* 0 - no differences; only meaningful if exit_with_status set */
-	int has_changes;
 
 	int stat_width;
 	int stat_name_width;
-- 
1.5.0.3.1036.g6baf1

^ permalink raw reply related	[flat|nested] 23+ messages in thread

end of thread, other threads:[~2007-03-16  0:16 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-03-14 18:24 [PATCH 1/2] diff --quick Junio C Hamano
2007-03-14 21:26 ` [PATCH 1/5] Remove unused diffcore_std_no_resolve Junio C Hamano
2007-03-14 21:26 ` [PATCH 2/5] diff --quiet Junio C Hamano
2007-03-14 22:33   ` Alex Riesen
2007-03-14 22:54     ` Alex Riesen
2007-03-14 23:37       ` Junio C Hamano
2007-03-15  8:22         ` Alex Riesen
2007-03-14 23:14   ` Alex Riesen
2007-03-14 23:53     ` Junio C Hamano
2007-03-15  0:33       ` Linus Torvalds
2007-03-15  1:23         ` Junio C Hamano
2007-03-15  6:47           ` Junio C Hamano
2007-03-15 16:08             ` Linus Torvalds
2007-03-15  8:19       ` Alex Riesen
2007-03-15 10:37         ` Johannes Schindelin
2007-03-15 13:55           ` Alex Riesen
2007-03-15 17:43             ` Johannes Schindelin
2007-03-15 21:08               ` Alex Riesen
2007-03-15 21:12                 ` Johannes Schindelin
2007-03-16  0:16                   ` Junio C Hamano
2007-03-14 21:26 ` [PATCH 3/5] Teach --quiet to diff backends Junio C Hamano
2007-03-14 21:26 ` [PATCH 4/5] revision.c: explain what tree_difference does Junio C Hamano
2007-03-14 21:26 ` [PATCH 5/5] try-to-simplify-commit: use diff-tree --quiet machinery Junio C Hamano

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).