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

[PATCH 2/2] Simplify "external diff from attributes" logic

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Jul 7, 2007, 17:21 UTC
Message-ID
<Pine.LNX.4.64.0707071821170.4093@racer.site>

Since we already store the given diff attribute in the filespec, we can just as well reuse that, instead of going through the whole attributes checking process again, when checking for an external diff program.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 diff.c |   39 +++++++++++++++++----------------------
 1 files changed, 17 insertions(+), 22 deletions(-)
diff --git a/diff.c b/diff.c
index a5444df..121524e 100644
--- a/diff.c
+++ b/diff.c
@@ -1195,6 +1195,20 @@ int diff_filespec_is_binary(struct diff_filespec *one)
 	return one->is_binary;
 }
 
+static const char *external_diff_attr(struct diff_filespec *one)
+{
+	diff_filespec_check_attr(one);
+	if (one->diff_attr) {
+		struct ll_diff_driver *drv;
+
+		read_config_if_needed();
+		for (drv = user_diff; drv; drv = drv->next)
+			if (!strcmp(drv->name, one->diff_attr))
+				return drv->cmd;
+	}
+	return NULL;
+}
+
 static const char *funcname_pattern(const char *ident)
 {
 	struct funcname_pattern *pp;
@@ -1860,27 +1874,6 @@ static void run_external_diff(const char *pgm,
 	}
 }
 
-static const char *external_diff_attr(const char *name)
-{
-	struct git_attr_check attr_diff_check;
-
-	setup_diff_attr_check(&attr_diff_check);
-	if (!git_checkattr(name, 1, &attr_diff_check)) {
-		const char *value = attr_diff_check.value;
-		if (!ATTR_TRUE(value) &&
-		    !ATTR_FALSE(value) &&
-		    !ATTR_UNSET(value)) {
-			struct ll_diff_driver *drv;
-
-			read_config_if_needed();
-			for (drv = user_diff; drv; drv = drv->next)
-				if (!strcmp(drv->name, value))
-					return drv->cmd;
-		}
-	}
-	return NULL;
-}
-
 static void run_diff_cmd(const char *pgm,
 			 const char *name,
 			 const char *other,
@@ -1893,7 +1886,9 @@ static void run_diff_cmd(const char *pgm,
 	if (!o->allow_external)
 		pgm = NULL;
 	else {
-		const char *cmd = external_diff_attr(name);
+		const char *cmd = external_diff_attr(one);
+		if (!cmd)
+			cmd = external_diff_attr(two);
 		if (cmd)
 			pgm = cmd;
 	}
-- 
1.5.3.rc0.2712.g125b7f
Message 1 of 1 in “Simplify "external diff from attributes" logic”
  1. 2/2 Simplify "external diff from attributes" logicJohannes Schindelin, Jul 7, 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.