summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@github.com>2016-02-28 21:30:00 -0500
committerEdward Thomson <ethomson@github.com>2016-03-17 11:06:00 -0400
commitd953c4505e09756b4b4f72b431a51867281643ca (patch)
tree856d273d42eec43a6670fcda7eb38b1a1bc3f90c /src
parent6d8b2cdbee00f2c4e97796b52e05dd39bd655138 (diff)
downloadlibgit2-d953c4505e09756b4b4f72b431a51867281643ca.tar.gz
merge drivers: handle configured but not found driver
Diffstat (limited to 'src')
-rw-r--r--src/merge.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/src/merge.c b/src/merge.c
index 27c0cea95..a0f2405ff 100644
--- a/src/merge.c
+++ b/src/merge.c
@@ -891,7 +891,8 @@ static int merge_conflict_resolve_contents(
git_index_entry *merge_result;
git_odb *odb = NULL;
const char *name;
- int error = 0;
+ bool fallback = false;
+ int error;
assert(resolved && diff_list && conflict);
@@ -924,12 +925,20 @@ static int merge_conflict_resolve_contents(
/* find the merge driver for this file */
if ((error = git_merge_driver_for_source(&name, &driver, &source)) < 0)
goto done;
+
+ if (driver == NULL)
+ fallback = true;
}
- error = merge_conflict_invoke_driver(&merge_result, name, driver,
- diff_list, &source);
+ if (driver) {
+ error = merge_conflict_invoke_driver(&merge_result, name, driver,
+ diff_list, &source);
+
+ if (error == GIT_PASSTHROUGH)
+ fallback = true;
+ }
- if (error == GIT_PASSTHROUGH) {
+ if (fallback) {
error = merge_conflict_invoke_driver(&merge_result, "text",
&git_merge_driver__text.base, diff_list, &source);
}