{"thread":{"id":"8919","subject":"[PATCH 2/2] Simplify \"external diff from attributes\" logic","startedAt":"2007-07-07T17:21:34Z","lastAt":"2007-07-07T17:21:34Z","messageCount":1,"participants":["Johannes Schindelin"],"isPatch":true,"patchVersion":1,"patchTotal":2},"messages":[{"id":"46701","messageId":"Pine.LNX.4.64.0707071821170.4093@racer.site","threadId":"8919","inReplyTo":null,"subject":"[PATCH 2/2] Simplify \"external diff from attributes\" logic","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2007-07-07T17:21:34Z","receivedAt":"2007-07-07T17:21:34Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"\nSince we already store the given diff attribute in the filespec,\nwe can just as well reuse that, instead of going through the whole\nattributes checking process again, when checking for an external\ndiff program.\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\n---\n diff.c |   39 +++++++++++++++++----------------------\n 1 files changed, 17 insertions(+), 22 deletions(-)\n\ndiff --git a/diff.c b/diff.c\nindex a5444df..121524e 100644\n--- a/diff.c\n+++ b/diff.c\n@@ -1195,6 +1195,20 @@ int diff_filespec_is_binary(struct diff_filespec *one)\n \treturn one->is_binary;\n }\n \n+static const char *external_diff_attr(struct diff_filespec *one)\n+{\n+\tdiff_filespec_check_attr(one);\n+\tif (one->diff_attr) {\n+\t\tstruct ll_diff_driver *drv;\n+\n+\t\tread_config_if_needed();\n+\t\tfor (drv = user_diff; drv; drv = drv->next)\n+\t\t\tif (!strcmp(drv->name, one->diff_attr))\n+\t\t\t\treturn drv->cmd;\n+\t}\n+\treturn NULL;\n+}\n+\n static const char *funcname_pattern(const char *ident)\n {\n \tstruct funcname_pattern *pp;\n@@ -1860,27 +1874,6 @@ static void run_external_diff(const char *pgm,\n \t}\n }\n \n-static const char *external_diff_attr(const char *name)\n-{\n-\tstruct git_attr_check attr_diff_check;\n-\n-\tsetup_diff_attr_check(&attr_diff_check);\n-\tif (!git_checkattr(name, 1, &attr_diff_check)) {\n-\t\tconst char *value = attr_diff_check.value;\n-\t\tif (!ATTR_TRUE(value) &&\n-\t\t    !ATTR_FALSE(value) &&\n-\t\t    !ATTR_UNSET(value)) {\n-\t\t\tstruct ll_diff_driver *drv;\n-\n-\t\t\tread_config_if_needed();\n-\t\t\tfor (drv = user_diff; drv; drv = drv->next)\n-\t\t\t\tif (!strcmp(drv->name, value))\n-\t\t\t\t\treturn drv->cmd;\n-\t\t}\n-\t}\n-\treturn NULL;\n-}\n-\n static void run_diff_cmd(const char *pgm,\n \t\t\t const char *name,\n \t\t\t const char *other,\n@@ -1893,7 +1886,9 @@ static void run_diff_cmd(const char *pgm,\n \tif (!o->allow_external)\n \t\tpgm = NULL;\n \telse {\n-\t\tconst char *cmd = external_diff_attr(name);\n+\t\tconst char *cmd = external_diff_attr(one);\n+\t\tif (!cmd)\n+\t\t\tcmd = external_diff_attr(two);\n \t\tif (cmd)\n \t\t\tpgm = cmd;\n \t}\n-- \n1.5.3.rc0.2712.g125b7f\n"}]}