DORMANTno replies

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

From: Johannes Schindelin <hidden>
Date: 2016-06-15 22:43:20
Subsystem: the rest · Maintainer: Linus Torvalds

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 <redacted>
---
 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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help