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

[PATCH 2/6] diff: factor out match_filter()

From
Junio C Hamano <gitster@pobox.com>
Date
Jul 18, 2013, 00:30 UTC
Message-ID
<1374107406-14357-3-git-send-email-gitster@pobox.com>
In-Reply-To
<1374107406-14357-1-git-send-email-gitster@pobox.com>

diffcore_apply_filter() checks if a filepair matches the filter given with the "--diff-filter" option for each input filepairs with a fairly complex expression in two places.

Create a helper function and call it.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 diff.c | 29 +++++++++++++----------------
 1 file changed, 13 insertions(+), 16 deletions(-)
diff --git a/diff.c b/diff.c
index 41c64f2..0220c19 100644
--- a/diff.c
+++ b/diff.c
@@ -4509,6 +4509,17 @@ free_queue:
 	}
 }
 
+static int match_filter(const struct diff_options *options, const struct diff_filepair *p)
+{
+	return (((p->status == DIFF_STATUS_MODIFIED) &&
+		 ((p->score &&
+		   strchr(options->filter, DIFF_STATUS_FILTER_BROKEN)) ||
+		  (!p->score &&
+		   strchr(options->filter, DIFF_STATUS_MODIFIED)))) ||
+		((p->status != DIFF_STATUS_MODIFIED) &&
+		 strchr(options->filter, p->status)));
+}
+
 static void diffcore_apply_filter(struct diff_options *options)
 {
 	int i;
@@ -4524,14 +4535,7 @@ static void diffcore_apply_filter(struct diff_options *options)
 	if (strchr(filter, DIFF_STATUS_FILTER_AON)) {
 		int found;
 		for (i = found = 0; !found && i < q->nr; i++) {
-			struct diff_filepair *p = q->queue[i];
-			if (((p->status == DIFF_STATUS_MODIFIED) &&
-			     ((p->score &&
-			       strchr(filter, DIFF_STATUS_FILTER_BROKEN)) ||
-			      (!p->score &&
-			       strchr(filter, DIFF_STATUS_MODIFIED)))) ||
-			    ((p->status != DIFF_STATUS_MODIFIED) &&
-			     strchr(filter, p->status)))
+			if (match_filter(options, q->queue[i]))
 				found++;
 		}
 		if (found)
@@ -4549,14 +4553,7 @@ static void diffcore_apply_filter(struct diff_options *options)
 		/* Only the matching ones */
 		for (i = 0; i < q->nr; i++) {
 			struct diff_filepair *p = q->queue[i];
-
-			if (((p->status == DIFF_STATUS_MODIFIED) &&
-			     ((p->score &&
-			       strchr(filter, DIFF_STATUS_FILTER_BROKEN)) ||
-			      (!p->score &&
-			       strchr(filter, DIFF_STATUS_MODIFIED)))) ||
-			    ((p->status != DIFF_STATUS_MODIFIED) &&
-			     strchr(filter, p->status)))
+			if (match_filter(options, p))
 				diff_q(&outq, p);
 			else
 				diff_free_filepair(p);
-- 
1.8.3.3-962-gf04df43
Previous: Junio C HamanoNext: Junio C Hamano
Message 14 of 25 in “daemon.c:handle: Remove unneeded check for null pointer.”
  1. 1/4 daemon.c:handle: Remove unneeded check for null pointer.Stefan Beller, Jul 14, 2013
  2. 2/4 commit: Fix a memory leak in determine_author_infoStefan Beller, Jul 14, 2013
  3. Jonathan NiederJul 14, 2013
  4. 3/4 diff-no-index: Remove unused variable.Stefan Beller, Jul 14, 2013
  5. Jonathan NiederJul 14, 2013
  6. 0/2 git diff -q option removalStefan Beller, Jul 16, 2013
  7. 1/2 diff --no-index: remove nonfunctional "-q" handlingStefan Beller, Jul 16, 2013
  8. 2/2 diff: Remove -q to stay silent on missing files.Stefan Beller, Jul 16, 2013
  9. Junio C HamanoJul 17, 2013
  10. Junio C HamanoJul 17, 2013
  11. Stefan BellerJul 17, 2013
  12. 0/6 Deprecating "diff-files -q"Junio C Hamano, Jul 18, 2013
  13. 1/6 diff: pass the whole diff_options to diffcore_apply_filter()Junio C Hamano, Jul 18, 2013
  14. 2/6 diff: factor out match_filter()Junio C Hamano, Jul 18, 2013
  15. 3/6 diff: preparse --diff-filter string argumentJunio C Hamano, Jul 18, 2013
  16. 4/6 diff: reject unknown change class given to --diff-filterJunio C Hamano, Jul 18, 2013
  17. 5/6 diff: allow lowercase letter to specify what change class to excludeJunio C Hamano, Jul 18, 2013
  18. 6/6 diff: deprecate -q option to diff-filesJunio C Hamano, Jul 18, 2013
  19. 7/6 diff: remove "diff-files -q" at Git 2.0 version boundaryJunio C Hamano, Jul 19, 2013
  20. Jonathan NiederJul 19, 2013
  21. Junio C HamanoJul 19, 2013
  22. Jonathan NiederJul 19, 2013
  23. 4/4 diff.c: Do not initialize a variable, which gets reassigned anyway.Stefan Beller, Jul 14, 2013
  24. Jonathan NiederJul 14, 2013
  25. Jonathan NiederJul 14, 2013

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.