merge.conflictstyle: choose between "merge" and "diff3 -m" styles

This teaches "git merge-file" to honor merge.conflictstyle configuration
variable, whose value can be "merge" (default) or "diff3".

Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Junio C Hamano 2008-08-29 10:49:56 -07:00
Родитель 387c9d4981
Коммит b541248467
5 изменённых файлов: 47 добавлений и 1 удалений

Просмотреть файл

@ -889,6 +889,14 @@ man.<tool>.path::
Override the path for the given tool that may be used to Override the path for the given tool that may be used to
display help in the 'man' format. See linkgit:git-help[1]. display help in the 'man' format. See linkgit:git-help[1].
merge.conflictstyle::
Specify the style in which conflicted hunks are written out to
working tree files upon merge. The default is "merge", which
shows `<<<<<<<` conflict marker, change made by one side,
`=======` marker, change made by the other side, and then
`>>>>>>>` marker. An alternate style, "diff3", adds `|||||||`
marker and the original text before `=======` marker.
mergetool.<tool>.path:: mergetool.<tool>.path::
Override the path for the given tool. This is useful in case Override the path for the given tool. This is useful in case
your tool is not in the PATH. your tool is not in the PATH.

Просмотреть файл

@ -15,6 +15,15 @@ int cmd_merge_file(int argc, const char **argv, const char *prefix)
int ret = 0, i = 0, to_stdout = 0; int ret = 0, i = 0, to_stdout = 0;
int merge_level = XDL_MERGE_ZEALOUS_ALNUM; int merge_level = XDL_MERGE_ZEALOUS_ALNUM;
int merge_style = 0; int merge_style = 0;
int nongit;
prefix = setup_git_directory_gently(&nongit);
if (!nongit) {
/* Read the configuration file */
git_config(git_xmerge_config, NULL);
if (0 <= git_xmerge_style)
merge_style = git_xmerge_style;
}
while (argc > 4) { while (argc > 4) {
if (!strcmp(argv[1], "-L") && i < 3) { if (!strcmp(argv[1], "-L") && i < 3) {

Просмотреть файл

@ -192,10 +192,17 @@ non timebo mala, quoniam TU mecum es:
virga tua et baculus tuus ipsa me consolata sunt. virga tua et baculus tuus ipsa me consolata sunt.
EOF EOF
test_expect_success '"diff3 -m" style output' ' test_expect_success '"diff3 -m" style output (1)' '
test_must_fail git merge-file -p --diff3 \ test_must_fail git merge-file -p --diff3 \
new8.txt new5.txt new9.txt >actual && new8.txt new5.txt new9.txt >actual &&
test_cmp expect actual test_cmp expect actual
' '
test_expect_success '"diff3 -m" style output (2)' '
git config merge.conflictstyle diff3 &&
test_must_fail git merge-file -p \
new8.txt new5.txt new9.txt >actual &&
test_cmp expect actual
'
test_done test_done

Просмотреть файл

@ -237,3 +237,23 @@ void xdiff_set_find_func(xdemitconf_t *xecfg, const char *value)
value = ep + 1; value = ep + 1;
} }
} }
int git_xmerge_style = -1;
int git_xmerge_config(const char *var, const char *value, void *cb)
{
if (!strcasecmp(var, "merge.conflictstyle")) {
if (!value)
die("'%s' is not a boolean", var);
if (!strcmp(value, "diff3"))
git_xmerge_style = XDL_MERGE_DIFF3;
else if (!strcmp(value, "merge"))
git_xmerge_style = 0;
else
die("unknown style '%s' given for '%s'",
value, var);
return 0;
}
return git_default_config(var, value, cb);
}

Просмотреть файл

@ -22,5 +22,7 @@ int read_mmfile(mmfile_t *ptr, const char *filename);
int buffer_is_binary(const char *ptr, unsigned long size); int buffer_is_binary(const char *ptr, unsigned long size);
extern void xdiff_set_find_func(xdemitconf_t *xecfg, const char *line); extern void xdiff_set_find_func(xdemitconf_t *xecfg, const char *line);
extern int git_xmerge_config(const char *var, const char *value, void *cb);
extern int git_xmerge_style;
#endif #endif