Skip to content

Commit 3086486

Browse files
author
Junio C Hamano
committed
Allow low-level driver to specify different behaviour during internal merge.
This allows [merge "drivername"] to have a variable "recursive" that names a different low-level merge driver to be used when merging common ancestors to come up with a virtual ancestor. Signed-off-by: Junio C Hamano <junkio@cox.net>
1 parent 153920d commit 3086486

File tree

1 file changed

+12
-0
lines changed

1 file changed

+12
-0
lines changed

merge-recursive.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -677,6 +677,7 @@ struct ll_merge_driver {
677677
const char *name;
678678
const char *description;
679679
ll_merge_fn fn;
680+
const char *recursive;
680681
struct ll_merge_driver *next;
681682
char *cmdline;
682683
};
@@ -934,6 +935,13 @@ static int read_merge_config(const char *var, const char *value)
934935
return 0;
935936
}
936937

938+
if (!strcmp("recursive", ep)) {
939+
if (!value)
940+
return error("%s: lacks value", var);
941+
fn->recursive = strdup(value);
942+
return 0;
943+
}
944+
937945
return 0;
938946
}
939947

@@ -1013,6 +1021,10 @@ static int ll_merge(mmbuffer_t *result_buf,
10131021
merge_attr = git_path_check_merge(a->path);
10141022
driver = find_ll_merge_driver(merge_attr);
10151023

1024+
if (index_only && driver->recursive) {
1025+
merge_attr = git_attr(driver->recursive, strlen(driver->recursive));
1026+
driver = find_ll_merge_driver(merge_attr);
1027+
}
10161028
merge_status = driver->fn(driver, a->path,
10171029
&orig, &src1, name1, &src2, name2,
10181030
result_buf);

0 commit comments

Comments
 (0)