refactor get_textconv to not require diff_filespec
This function actually does two things: 1. Load the userdiff driver for the filespec. 2. Decide whether the driver has a textconv component, and initialize the textconv cache if applicable. Only part (1) requires the filespec object, and some callers may not have a filespec at all. So let's split them it into two functions, and put part (2) with the userdiff code, which is a better fit. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
parent
4d5f347199
commit
3813e69031
14
diff.c
14
diff.c
|
@ -1976,19 +1976,7 @@ struct userdiff_driver *get_textconv(struct diff_filespec *one)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
diff_filespec_load_driver(one);
|
diff_filespec_load_driver(one);
|
||||||
if (!one->driver->textconv)
|
return userdiff_get_textconv(one->driver);
|
||||||
return NULL;
|
|
||||||
|
|
||||||
if (one->driver->textconv_want_cache && !one->driver->textconv_cache) {
|
|
||||||
struct notes_cache *c = xmalloc(sizeof(*c));
|
|
||||||
struct strbuf name = STRBUF_INIT;
|
|
||||||
|
|
||||||
strbuf_addf(&name, "textconv/%s", one->driver->name);
|
|
||||||
notes_cache_init(c, name.buf, one->driver->textconv);
|
|
||||||
one->driver->textconv_cache = c;
|
|
||||||
}
|
|
||||||
|
|
||||||
return one->driver;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void builtin_diff(const char *name_a,
|
static void builtin_diff(const char *name_a,
|
||||||
|
|
17
userdiff.c
17
userdiff.c
|
@ -267,3 +267,20 @@ struct userdiff_driver *userdiff_find_by_path(const char *path)
|
||||||
return NULL;
|
return NULL;
|
||||||
return userdiff_find_by_name(check.value);
|
return userdiff_find_by_name(check.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct userdiff_driver *userdiff_get_textconv(struct userdiff_driver *driver)
|
||||||
|
{
|
||||||
|
if (!driver->textconv)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if (driver->textconv_want_cache && !driver->textconv_cache) {
|
||||||
|
struct notes_cache *c = xmalloc(sizeof(*c));
|
||||||
|
struct strbuf name = STRBUF_INIT;
|
||||||
|
|
||||||
|
strbuf_addf(&name, "textconv/%s", driver->name);
|
||||||
|
notes_cache_init(c, name.buf, driver->textconv);
|
||||||
|
driver->textconv_cache = c;
|
||||||
|
}
|
||||||
|
|
||||||
|
return driver;
|
||||||
|
}
|
||||||
|
|
|
@ -23,4 +23,6 @@ int userdiff_config(const char *k, const char *v);
|
||||||
struct userdiff_driver *userdiff_find_by_name(const char *name);
|
struct userdiff_driver *userdiff_find_by_name(const char *name);
|
||||||
struct userdiff_driver *userdiff_find_by_path(const char *path);
|
struct userdiff_driver *userdiff_find_by_path(const char *path);
|
||||||
|
|
||||||
|
struct userdiff_driver *userdiff_get_textconv(struct userdiff_driver *driver);
|
||||||
|
|
||||||
#endif /* USERDIFF */
|
#endif /* USERDIFF */
|
||||||
|
|
Loading…
Reference in New Issue