diff options
author | Russell Belfer <rb@github.com> | 2014-12-30 13:47:11 -0800 |
---|---|---|
committer | Russell Belfer <rb@github.com> | 2014-12-30 13:47:11 -0800 |
commit | f747083efa10abdc1f4a1cbe17efbb05fa8b2da8 (patch) | |
tree | 2f54da0d23402cbfb755dbcf9156fb77ee134f9c /src/diff_driver.c | |
parent | a3ef70bb405a05c16fb533d828da2510ff751224 (diff) | |
download | libgit2-f747083efa10abdc1f4a1cbe17efbb05fa8b2da8.tar.gz |
Add API to precompile all diff driversrb/test-builtin-drivers
Diffstat (limited to 'src/diff_driver.c')
-rw-r--r-- | src/diff_driver.c | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/src/diff_driver.c b/src/diff_driver.c index c3c5f365b..9ae72ac6c 100644 --- a/src/diff_driver.c +++ b/src/diff_driver.c @@ -203,11 +203,11 @@ static int git_diff_driver_builtin( error = 0; done: - if (error && drv) + if (error && drv) { git_diff_driver_free(drv); - else - *out = drv; - + drv = NULL; + } + *out = drv; return error; } @@ -335,6 +335,32 @@ done: return error; } +int git_diff_driver_compile_builtins(git_repository *repo) +{ + int error = 0; + git_diff_driver_registry *reg; + git_diff_driver *drv; + size_t i; + + assert(repo); + + if ((reg = git_repository_driver_registry(repo)) == NULL) + return -1; + + for (i = 0; i < ARRAY_SIZE(builtin_defs); ++i) { + const char *name = builtin_defs[i].name; + khiter_t pos = git_strmap_lookup_index(reg->drivers, name); + + if (!git_strmap_valid_index(reg->drivers, pos) && + (error = git_diff_driver_builtin(&drv, reg, name)) < 0) + break; + + fprintf(stderr, "compiled diff driver '%s'\n", name); + } + + return error; +} + int git_diff_driver_lookup( git_diff_driver **out, git_repository *repo, const char *path) { |