Merge branch 'mg/merge-ff-config'
* mg/merge-ff-config: tests: check git does not barf on merge.ff values for future versions of git merge: introduce merge.ff configuration variable Conflicts: t/t7600-merge.sh
This commit is contained in:
commit
36a45b4fa4
@ -16,6 +16,16 @@ merge.defaultToUpstream::
|
|||||||
to their corresponding remote tracking branches, and the tips of
|
to their corresponding remote tracking branches, and the tips of
|
||||||
these tracking branches are merged.
|
these tracking branches are merged.
|
||||||
|
|
||||||
|
merge.ff::
|
||||||
|
By default, git does not create an extra merge commit when merging
|
||||||
|
a commit that is a descendant of the current commit. Instead, the
|
||||||
|
tip of the current branch is fast-forwarded. When set to `false`,
|
||||||
|
this variable tells git to create an extra merge commit in such
|
||||||
|
a case (equivalent to giving the `--no-ff` option from the command
|
||||||
|
line). When set to `only`, only such fast-forward merges are
|
||||||
|
allowed (equivalent to giving the `--ff-only` option from the
|
||||||
|
command line).
|
||||||
|
|
||||||
merge.log::
|
merge.log::
|
||||||
In addition to branch names, populate the log message with at
|
In addition to branch names, populate the log message with at
|
||||||
most the specified number of one-line descriptions from the
|
most the specified number of one-line descriptions from the
|
||||||
|
@ -550,6 +550,15 @@ static int git_merge_config(const char *k, const char *v, void *cb)
|
|||||||
if (is_bool && shortlog_len)
|
if (is_bool && shortlog_len)
|
||||||
shortlog_len = DEFAULT_MERGE_LOG_LEN;
|
shortlog_len = DEFAULT_MERGE_LOG_LEN;
|
||||||
return 0;
|
return 0;
|
||||||
|
} else if (!strcmp(k, "merge.ff")) {
|
||||||
|
int boolval = git_config_maybe_bool(k, v);
|
||||||
|
if (0 <= boolval) {
|
||||||
|
allow_fast_forward = boolval;
|
||||||
|
} else if (v && !strcmp(v, "only")) {
|
||||||
|
allow_fast_forward = 1;
|
||||||
|
fast_forward_only = 1;
|
||||||
|
} /* do not barf on values from future versions of git */
|
||||||
|
return 0;
|
||||||
} else if (!strcmp(k, "merge.defaulttoupstream")) {
|
} else if (!strcmp(k, "merge.defaulttoupstream")) {
|
||||||
default_to_upstream = git_config_bool(k, v);
|
default_to_upstream = git_config_bool(k, v);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -35,6 +35,7 @@ printf '%s\n' 1 2 3 4 5 6 7 8 '9 X' >file.9
|
|||||||
printf '%s\n' '1 X' 2 3 4 5 6 7 8 9 >result.1
|
printf '%s\n' '1 X' 2 3 4 5 6 7 8 9 >result.1
|
||||||
printf '%s\n' '1 X' 2 3 4 '5 X' 6 7 8 9 >result.1-5
|
printf '%s\n' '1 X' 2 3 4 '5 X' 6 7 8 9 >result.1-5
|
||||||
printf '%s\n' '1 X' 2 3 4 '5 X' 6 7 8 '9 X' >result.1-5-9
|
printf '%s\n' '1 X' 2 3 4 '5 X' 6 7 8 '9 X' >result.1-5-9
|
||||||
|
>empty
|
||||||
|
|
||||||
create_merge_msgs () {
|
create_merge_msgs () {
|
||||||
echo "Merge commit 'c2'" >msg.1-5 &&
|
echo "Merge commit 'c2'" >msg.1-5 &&
|
||||||
@ -224,12 +225,28 @@ test_expect_success 'merge c1 with c2 and c3' '
|
|||||||
|
|
||||||
test_debug 'git log --graph --decorate --oneline --all'
|
test_debug 'git log --graph --decorate --oneline --all'
|
||||||
|
|
||||||
test_expect_success 'failing merges with --ff-only' '
|
test_expect_success 'merges with --ff-only' '
|
||||||
git reset --hard c1 &&
|
git reset --hard c1 &&
|
||||||
test_tick &&
|
test_tick &&
|
||||||
test_must_fail git merge --ff-only c2 &&
|
test_must_fail git merge --ff-only c2 &&
|
||||||
test_must_fail git merge --ff-only c3 &&
|
test_must_fail git merge --ff-only c3 &&
|
||||||
test_must_fail git merge --ff-only c2 c3
|
test_must_fail git merge --ff-only c2 c3 &&
|
||||||
|
git reset --hard c0 &&
|
||||||
|
git merge c3 &&
|
||||||
|
verify_head $c3
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'merges with merge.ff=only' '
|
||||||
|
git reset --hard c1 &&
|
||||||
|
test_tick &&
|
||||||
|
test_when_finished "git config --unset merge.ff" &&
|
||||||
|
git config merge.ff only &&
|
||||||
|
test_must_fail git merge c2 &&
|
||||||
|
test_must_fail git merge c3 &&
|
||||||
|
test_must_fail git merge c2 c3 &&
|
||||||
|
git reset --hard c0 &&
|
||||||
|
git merge c3 &&
|
||||||
|
verify_head $c3
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'merge c0 with c1 (no-commit)' '
|
test_expect_success 'merge c0 with c1 (no-commit)' '
|
||||||
@ -338,10 +355,11 @@ test_expect_success 'merge c1 with c2 (log in config)' '
|
|||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'merge c1 with c2 (log in config gets overridden)' '
|
test_expect_success 'merge c1 with c2 (log in config gets overridden)' '
|
||||||
(
|
test_when_finished "git config --remove-section branch.master" &&
|
||||||
git config --remove-section branch.master
|
test_when_finished "git config --remove-section merge" &&
|
||||||
git config --remove-section merge
|
test_might_fail git config --remove-section branch.master &&
|
||||||
)
|
test_might_fail git config --remove-section merge &&
|
||||||
|
|
||||||
git reset --hard c1 &&
|
git reset --hard c1 &&
|
||||||
git merge c2 &&
|
git merge c2 &&
|
||||||
git show -s --pretty=tformat:%s%n%b >expect &&
|
git show -s --pretty=tformat:%s%n%b >expect &&
|
||||||
@ -446,7 +464,41 @@ test_expect_success 'merge c0 with c1 (no-ff)' '
|
|||||||
|
|
||||||
test_debug 'git log --graph --decorate --oneline --all'
|
test_debug 'git log --graph --decorate --oneline --all'
|
||||||
|
|
||||||
|
test_expect_success 'merge c0 with c1 (merge.ff=false)' '
|
||||||
|
git reset --hard c0 &&
|
||||||
|
git config merge.ff false &&
|
||||||
|
test_tick &&
|
||||||
|
git merge c1 &&
|
||||||
|
git config --remove-section merge &&
|
||||||
|
verify_merge file result.1 &&
|
||||||
|
verify_parents $c0 $c1
|
||||||
|
'
|
||||||
|
test_debug 'git log --graph --decorate --oneline --all'
|
||||||
|
|
||||||
|
test_expect_success 'combine branch.master.mergeoptions with merge.ff' '
|
||||||
|
git reset --hard c0 &&
|
||||||
|
git config branch.master.mergeoptions --ff &&
|
||||||
|
git config merge.ff false &&
|
||||||
|
test_tick &&
|
||||||
|
git merge c1 &&
|
||||||
|
git config --remove-section "branch.master" &&
|
||||||
|
git config --remove-section "merge" &&
|
||||||
|
verify_merge file result.1 &&
|
||||||
|
verify_parents "$c0"
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'tolerate unknown values for merge.ff' '
|
||||||
|
git reset --hard c0 &&
|
||||||
|
git config merge.ff something-new &&
|
||||||
|
test_tick &&
|
||||||
|
git merge c1 2>message &&
|
||||||
|
git config --remove-section "merge" &&
|
||||||
|
verify_head "$c1" &&
|
||||||
|
test_cmp empty message
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'combining --squash and --no-ff is refused' '
|
test_expect_success 'combining --squash and --no-ff is refused' '
|
||||||
|
git reset --hard c0 &&
|
||||||
test_must_fail git merge --squash --no-ff c1 &&
|
test_must_fail git merge --squash --no-ff c1 &&
|
||||||
test_must_fail git merge --no-ff --squash c1
|
test_must_fail git merge --no-ff --squash c1
|
||||||
'
|
'
|
||||||
|
Loading…
Reference in New Issue
Block a user