diff: don't use pathname-based diff drivers for symlinks
[gitweb.git] / diff.c
diff --git a/diff.c b/diff.c
index 19b5bf63ed37aa49c00e63f7aec621ce601b6daa..95835d875ee392fdb5d0edbb52c37bbae06a8006 100644 (file)
--- a/diff.c
+++ b/diff.c
@@ -1764,8 +1764,14 @@ static void emit_binary_diff(FILE *file, mmfile_t *one, mmfile_t *two, char *pre
 
 static void diff_filespec_load_driver(struct diff_filespec *one)
 {
-       if (!one->driver)
+       /* Use already-loaded driver */
+       if (one->driver)
+               return;
+
+       if (S_ISREG(one->mode))
                one->driver = userdiff_find_by_path(one->path);
+
+       /* Fallback to default settings */
        if (!one->driver)
                one->driver = userdiff_find_by_name("default");
 }
@@ -1813,8 +1819,7 @@ struct userdiff_driver *get_textconv(struct diff_filespec *one)
 {
        if (!DIFF_FILE_VALID(one))
                return NULL;
-       if (!S_ISREG(one->mode))
-               return NULL;
+
        diff_filespec_load_driver(one);
        if (!one->driver->textconv)
                return NULL;