Merge branch 'jc/maint-branch-mergeoptions'
* jc/maint-branch-mergeoptions: merge: make branch.<name>.mergeoptions correctly override merge.<option> Conflicts: builtin/merge.c
This commit is contained in:
commit
c7fe5b61e1
@ -56,6 +56,7 @@ static size_t use_strategies_nr, use_strategies_alloc;
|
||||
static const char **xopts;
|
||||
static size_t xopts_nr, xopts_alloc;
|
||||
static const char *branch;
|
||||
static char *branch_mergeoptions;
|
||||
static int option_renormalize;
|
||||
static int verbosity;
|
||||
static int allow_rerere_auto;
|
||||
@ -503,26 +504,34 @@ cleanup:
|
||||
strbuf_release(&bname);
|
||||
}
|
||||
|
||||
static void parse_branch_merge_options(char *bmo)
|
||||
{
|
||||
const char **argv;
|
||||
int argc;
|
||||
|
||||
if (!bmo)
|
||||
return;
|
||||
argc = split_cmdline(bmo, &argv);
|
||||
if (argc < 0)
|
||||
die(_("Bad branch.%s.mergeoptions string: %s"), branch,
|
||||
split_cmdline_strerror(argc));
|
||||
argv = xrealloc(argv, sizeof(*argv) * (argc + 2));
|
||||
memmove(argv + 1, argv, sizeof(*argv) * (argc + 1));
|
||||
argc++;
|
||||
argv[0] = "branch.*.mergeoptions";
|
||||
parse_options(argc, argv, NULL, builtin_merge_options,
|
||||
builtin_merge_usage, 0);
|
||||
free(argv);
|
||||
}
|
||||
|
||||
static int git_merge_config(const char *k, const char *v, void *cb)
|
||||
{
|
||||
if (branch && !prefixcmp(k, "branch.") &&
|
||||
!prefixcmp(k + 7, branch) &&
|
||||
!strcmp(k + 7 + strlen(branch), ".mergeoptions")) {
|
||||
const char **argv;
|
||||
int argc;
|
||||
char *buf;
|
||||
|
||||
buf = xstrdup(v);
|
||||
argc = split_cmdline(buf, &argv);
|
||||
if (argc < 0)
|
||||
die(_("Bad branch.%s.mergeoptions string: %s"), branch,
|
||||
split_cmdline_strerror(argc));
|
||||
argv = xrealloc(argv, sizeof(*argv) * (argc + 2));
|
||||
memmove(argv + 1, argv, sizeof(*argv) * (argc + 1));
|
||||
argc++;
|
||||
parse_options(argc, argv, NULL, builtin_merge_options,
|
||||
builtin_merge_usage, 0);
|
||||
free(buf);
|
||||
free(branch_mergeoptions);
|
||||
branch_mergeoptions = xstrdup(v);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(k, "merge.diffstat") || !strcmp(k, "merge.stat"))
|
||||
@ -1010,6 +1019,8 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
|
||||
if (diff_use_color_default == -1)
|
||||
diff_use_color_default = git_use_color_default;
|
||||
|
||||
if (branch_mergeoptions)
|
||||
parse_branch_merge_options(branch_mergeoptions);
|
||||
argc = parse_options(argc, argv, prefix, builtin_merge_options,
|
||||
builtin_merge_usage, 0);
|
||||
|
||||
|
@ -323,6 +323,38 @@ test_expect_success 'merge c1 with c2 (no-commit in config)' '
|
||||
|
||||
test_debug 'git log --graph --decorate --oneline --all'
|
||||
|
||||
test_expect_success 'merge c1 with c2 (log in config)' '
|
||||
git config branch.master.mergeoptions "" &&
|
||||
git reset --hard c1 &&
|
||||
git merge --log c2 &&
|
||||
git show -s --pretty=tformat:%s%n%b >expect &&
|
||||
|
||||
git config branch.master.mergeoptions --log &&
|
||||
git reset --hard c1 &&
|
||||
git merge c2 &&
|
||||
git show -s --pretty=tformat:%s%n%b >actual &&
|
||||
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'merge c1 with c2 (log in config gets overridden)' '
|
||||
(
|
||||
git config --remove-section branch.master
|
||||
git config --remove-section merge
|
||||
)
|
||||
git reset --hard c1 &&
|
||||
git merge c2 &&
|
||||
git show -s --pretty=tformat:%s%n%b >expect &&
|
||||
|
||||
git config branch.master.mergeoptions "--no-log" &&
|
||||
git config merge.log true &&
|
||||
git reset --hard c1 &&
|
||||
git merge c2 &&
|
||||
git show -s --pretty=tformat:%s%n%b >actual &&
|
||||
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'merge c1 with c2 (squash in config)' '
|
||||
git reset --hard c1 &&
|
||||
git config branch.master.mergeoptions "--squash" &&
|
||||
|
Loading…
Reference in New Issue
Block a user