Merge branch 'jc/merge-tag-object' into maint
"git merge $(git rev-parse v1.8.2)" behaved quite differently from "git merge v1.8.2", as if v1.8.2 were written as v1.8.2^0 and did not pay much attention to the annotated tag payload. Make the code notice the type of the tag object, in addition to the dwim_ref() based classification the current code uses (i.e. the name appears in refs/tags/) to decide when to special case merging of tags. * jc/merge-tag-object: t6200: test message for merging of an annotated tag t6200: use test_config/test_unconfig merge: a random object may not necssarily be a commit
This commit is contained in:
commit
499231d9f1
@ -516,6 +516,19 @@ static void merge_name(const char *remote, struct strbuf *msg)
|
||||
strbuf_release(&line);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (remote_head->util) {
|
||||
struct merge_remote_desc *desc;
|
||||
desc = merge_remote_util(remote_head);
|
||||
if (desc && desc->obj && desc->obj->type == OBJ_TAG) {
|
||||
strbuf_addf(msg, "%s\t\t%s '%s'\n",
|
||||
sha1_to_hex(desc->obj->sha1),
|
||||
typename(desc->obj->type),
|
||||
remote);
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
|
||||
strbuf_addf(msg, "%s\t\tcommit '%s'\n",
|
||||
sha1_to_hex(remote_head->object.sha1), remote);
|
||||
cleanup:
|
||||
|
@ -112,8 +112,8 @@ test_expect_success '[merge] summary/log configuration' '
|
||||
Common #1
|
||||
EOF
|
||||
|
||||
git config merge.log true &&
|
||||
test_might_fail git config --unset-all merge.summary &&
|
||||
test_config merge.log true &&
|
||||
test_unconfig merge.summary &&
|
||||
|
||||
git checkout master &&
|
||||
test_tick &&
|
||||
@ -121,8 +121,8 @@ test_expect_success '[merge] summary/log configuration' '
|
||||
|
||||
git fmt-merge-msg <.git/FETCH_HEAD >actual1 &&
|
||||
|
||||
test_might_fail git config --unset-all merge.log &&
|
||||
git config merge.summary true &&
|
||||
test_unconfig merge.log &&
|
||||
test_config merge.summary true &&
|
||||
|
||||
git checkout master &&
|
||||
test_tick &&
|
||||
@ -134,11 +134,6 @@ test_expect_success '[merge] summary/log configuration' '
|
||||
test_cmp expected actual2
|
||||
'
|
||||
|
||||
test_expect_success 'setup: clear [merge] configuration' '
|
||||
test_might_fail git config --unset-all merge.log &&
|
||||
test_might_fail git config --unset-all merge.summary
|
||||
'
|
||||
|
||||
test_expect_success 'setup FETCH_HEAD' '
|
||||
git checkout master &&
|
||||
test_tick &&
|
||||
@ -248,14 +243,14 @@ test_expect_success 'fmt-merge-msg -m' '
|
||||
Common #1
|
||||
EOF
|
||||
|
||||
test_might_fail git config --unset merge.log &&
|
||||
test_might_fail git config --unset merge.summary &&
|
||||
test_unconfig merge.log &&
|
||||
test_unconfig merge.summary &&
|
||||
git checkout master &&
|
||||
git fetch "$(pwd)" left &&
|
||||
git fmt-merge-msg -m "Sync with left" <.git/FETCH_HEAD >actual &&
|
||||
git fmt-merge-msg --log -m "Sync with left" \
|
||||
<.git/FETCH_HEAD >actual.log &&
|
||||
git config merge.log true &&
|
||||
test_config merge.log true &&
|
||||
git fmt-merge-msg -m "Sync with left" \
|
||||
<.git/FETCH_HEAD >actual.log-config &&
|
||||
git fmt-merge-msg --no-log -m "Sync with left" \
|
||||
@ -290,29 +285,29 @@ test_expect_success 'setup: expected shortlog for two branches' '
|
||||
'
|
||||
|
||||
test_expect_success 'shortlog for two branches' '
|
||||
git config merge.log true &&
|
||||
test_might_fail git config --unset-all merge.summary &&
|
||||
test_config merge.log true &&
|
||||
test_unconfig merge.summary &&
|
||||
git checkout master &&
|
||||
test_tick &&
|
||||
git fetch . left right &&
|
||||
git fmt-merge-msg <.git/FETCH_HEAD >actual1 &&
|
||||
|
||||
test_might_fail git config --unset-all merge.log &&
|
||||
git config merge.summary true &&
|
||||
test_unconfig merge.log &&
|
||||
test_config merge.summary true &&
|
||||
git checkout master &&
|
||||
test_tick &&
|
||||
git fetch . left right &&
|
||||
git fmt-merge-msg <.git/FETCH_HEAD >actual2 &&
|
||||
|
||||
git config merge.log yes &&
|
||||
test_might_fail git config --unset-all merge.summary &&
|
||||
test_config merge.log yes &&
|
||||
test_unconfig merge.summary &&
|
||||
git checkout master &&
|
||||
test_tick &&
|
||||
git fetch . left right &&
|
||||
git fmt-merge-msg <.git/FETCH_HEAD >actual3 &&
|
||||
|
||||
test_might_fail git config --unset-all merge.log &&
|
||||
git config merge.summary yes &&
|
||||
test_unconfig merge.log &&
|
||||
test_config merge.summary yes &&
|
||||
git checkout master &&
|
||||
test_tick &&
|
||||
git fetch . left right &&
|
||||
@ -325,8 +320,8 @@ test_expect_success 'shortlog for two branches' '
|
||||
'
|
||||
|
||||
test_expect_success 'merge-msg -F' '
|
||||
test_might_fail git config --unset-all merge.log &&
|
||||
git config merge.summary yes &&
|
||||
test_unconfig merge.log &&
|
||||
test_config merge.summary yes &&
|
||||
git checkout master &&
|
||||
test_tick &&
|
||||
git fetch . left right &&
|
||||
@ -335,8 +330,8 @@ test_expect_success 'merge-msg -F' '
|
||||
'
|
||||
|
||||
test_expect_success 'merge-msg -F in subdirectory' '
|
||||
test_might_fail git config --unset-all merge.log &&
|
||||
git config merge.summary yes &&
|
||||
test_unconfig merge.log &&
|
||||
test_config merge.summary yes &&
|
||||
git checkout master &&
|
||||
test_tick &&
|
||||
git fetch . left right &&
|
||||
@ -350,8 +345,8 @@ test_expect_success 'merge-msg -F in subdirectory' '
|
||||
'
|
||||
|
||||
test_expect_success 'merge-msg with nothing to merge' '
|
||||
test_might_fail git config --unset-all merge.log &&
|
||||
git config merge.summary yes &&
|
||||
test_unconfig merge.log &&
|
||||
test_config merge.summary yes &&
|
||||
|
||||
>empty &&
|
||||
|
||||
@ -376,8 +371,8 @@ test_expect_success 'merge-msg tag' '
|
||||
Common #1
|
||||
EOF
|
||||
|
||||
test_might_fail git config --unset-all merge.log &&
|
||||
git config merge.summary yes &&
|
||||
test_unconfig merge.log &&
|
||||
test_config merge.summary yes &&
|
||||
|
||||
git checkout master &&
|
||||
test_tick &&
|
||||
@ -406,8 +401,8 @@ test_expect_success 'merge-msg two tags' '
|
||||
Common #1
|
||||
EOF
|
||||
|
||||
test_might_fail git config --unset-all merge.log &&
|
||||
git config merge.summary yes &&
|
||||
test_unconfig merge.log &&
|
||||
test_config merge.summary yes &&
|
||||
|
||||
git checkout master &&
|
||||
test_tick &&
|
||||
@ -436,8 +431,8 @@ test_expect_success 'merge-msg tag and branch' '
|
||||
Common #1
|
||||
EOF
|
||||
|
||||
test_might_fail git config --unset-all merge.log &&
|
||||
git config merge.summary yes &&
|
||||
test_unconfig merge.log &&
|
||||
test_config merge.summary yes &&
|
||||
|
||||
git checkout master &&
|
||||
test_tick &&
|
||||
@ -464,6 +459,8 @@ test_expect_success 'merge-msg lots of commits' '
|
||||
echo " ..."
|
||||
} >expected &&
|
||||
|
||||
test_config merge.summary yes &&
|
||||
|
||||
git checkout master &&
|
||||
test_tick &&
|
||||
git fetch . long &&
|
||||
@ -472,4 +469,43 @@ test_expect_success 'merge-msg lots of commits' '
|
||||
test_cmp expected actual
|
||||
'
|
||||
|
||||
test_expect_success 'merge-msg with "merging" an annotated tag' '
|
||||
test_config merge.log true &&
|
||||
|
||||
git checkout master^0 &&
|
||||
git commit --allow-empty -m "One step ahead" &&
|
||||
git tag -a -m "An annotated one" annote HEAD &&
|
||||
|
||||
git checkout master &&
|
||||
git fetch . annote &&
|
||||
|
||||
git fmt-merge-msg <.git/FETCH_HEAD >actual &&
|
||||
{
|
||||
cat <<-\EOF
|
||||
Merge tag '\''annote'\''
|
||||
|
||||
An annotated one
|
||||
|
||||
* tag '\''annote'\'':
|
||||
One step ahead
|
||||
EOF
|
||||
} >expected &&
|
||||
test_cmp expected actual &&
|
||||
|
||||
test_when_finished "git reset --hard" &&
|
||||
annote=$(git rev-parse annote) &&
|
||||
git merge --no-commit $annote &&
|
||||
{
|
||||
cat <<-EOF
|
||||
Merge tag '\''$annote'\''
|
||||
|
||||
An annotated one
|
||||
|
||||
* tag '\''$annote'\'':
|
||||
One step ahead
|
||||
EOF
|
||||
} >expected &&
|
||||
test_cmp expected .git/MERGE_MSG
|
||||
'
|
||||
|
||||
test_done
|
||||
|
Loading…
Reference in New Issue
Block a user