Skip to content

Commit

Permalink
refactor get_textconv to not require diff_filespec
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
peff authored and gitster committed May 23, 2011
1 parent 4d5f347 commit 3813e69
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 13 deletions.
14 changes: 1 addition & 13 deletions diff.c
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -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,
Expand Down
17 changes: 17 additions & 0 deletions userdiff.c
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -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;
}
2 changes: 2 additions & 0 deletions userdiff.h
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -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 */

0 comments on commit 3813e69

Please sign in to comment.