summaryrefslogtreecommitdiff
path: root/merge-recursive.c
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2007-04-18 08:47:21 (GMT)
committerJunio C Hamano <junkio@cox.net>2007-04-18 08:50:00 (GMT)
commitbe89cb239e8ec02e23015675cc8b2d60992a6cfc (patch)
tree8e3421b7ef05e9844a7f21c6908f822b29a3c295 /merge-recursive.c
parentf3ef6b6bbe9bfd3d09130f7e26b87dbe11b93c5b (diff)
downloadgit-be89cb239e8ec02e23015675cc8b2d60992a6cfc.zip
git-be89cb239e8ec02e23015675cc8b2d60992a6cfc.tar.gz
git-be89cb239e8ec02e23015675cc8b2d60992a6cfc.tar.bz2
Allow the default low-level merge driver to be configured.
When no 'merge' attribute is given to a path, merge-recursive uses the built-in xdl-merge as the low-level merge driver. A new configuration item 'merge.default' can name a low-level merge driver of user's choice to be used instead. Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'merge-recursive.c')
-rw-r--r--merge-recursive.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/merge-recursive.c b/merge-recursive.c
index 8ec18ad..5983000 100644
--- a/merge-recursive.c
+++ b/merge-recursive.c
@@ -839,12 +839,18 @@ static struct user_merge_fn {
char *cmdline;
char b_[1];
} *ll_user_merge_fns, **ll_user_merge_fns_tail;
+static const char *default_ll_merge;
static int read_merge_config(const char *var, const char *value)
{
struct user_merge_fn *fn;
int blen, nlen;
+ if (!strcmp(var, "merge.default")) {
+ default_ll_merge = strdup(value);
+ return 0;
+ }
+
if (strcmp(var, "merge.driver"))
return 0;
if (!value)
@@ -900,8 +906,12 @@ static ll_merge_fn find_ll_merge_fn(void *merge_attr, const char **cmdline)
return ll_xdl_merge;
else if (ATTR_FALSE(merge_attr))
return ll_binary_merge;
- else if (ATTR_UNSET(merge_attr))
- return ll_xdl_merge;
+ else if (ATTR_UNSET(merge_attr)) {
+ if (!default_ll_merge)
+ return ll_xdl_merge;
+ else
+ name = default_ll_merge;
+ }
else
name = merge_attr;