git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 1/2] diff --quick

From
Junio C Hamano <junkio@cox.net>
Date
Mar 14, 2007, 18:24 UTC
Message-ID
<7vwt1j8z0e.fsf@assigned-by-dhcp.cox.net>

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
Next: Junio C Hamano
Message 1 of 23 in “diff --quick”
  1. 1/2 diff --quickJunio C Hamano, Mar 14, 2007
  2. 1/5 Remove unused diffcore_std_no_resolveJunio C Hamano, Mar 14, 2007
  3. 2/5 diff --quietJunio C Hamano, Mar 14, 2007
  4. Alex RiesenMar 14, 2007
  5. Alex RiesenMar 14, 2007
  6. Junio C HamanoMar 14, 2007
  7. Alex RiesenMar 15, 2007
  8. Alex RiesenMar 14, 2007
  9. Junio C HamanoMar 14, 2007
  10. Linus TorvaldsMar 15, 2007
  11. Junio C HamanoMar 15, 2007
  12. Junio C HamanoMar 15, 2007
  13. Linus TorvaldsMar 15, 2007
  14. Alex RiesenMar 15, 2007
  15. Johannes SchindelinMar 15, 2007
  16. Alex RiesenMar 15, 2007
  17. Johannes SchindelinMar 15, 2007
  18. Alex RiesenMar 15, 2007
  19. Johannes SchindelinMar 15, 2007
  20. Junio C HamanoMar 16, 2007
  21. 3/5 Teach --quiet to diff backends.Junio C Hamano, Mar 14, 2007
  22. 4/5 revision.c: explain what tree_difference doesJunio C Hamano, Mar 14, 2007
  23. 5/5 try-to-simplify-commit: use diff-tree --quiet machinery.Junio C Hamano, Mar 14, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.