summaryrefslogtreecommitdiff
path: root/src/diff_driver.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/diff_driver.c')
-rw-r--r--src/diff_driver.c34
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)
{