mirror of
https://github.com/git/git
synced 2024-08-25 02:35:46 +00:00
Merge branch 'ss/commit-squash-msg' into maint
When "git merge --squash" stopped due to conflict, the concluding "git commit" failed to read in the SQUASH_MSG that shows the log messages from all the squashed commits. * ss/commit-squash-msg: commit: do not lose SQUASH_MSG contents
This commit is contained in:
commit
ea7fefbd7b
|
@ -726,9 +726,18 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
|
|||
&sb, &ctx);
|
||||
hook_arg1 = "message";
|
||||
} else if (!stat(git_path_merge_msg(), &statbuf)) {
|
||||
/*
|
||||
* prepend SQUASH_MSG here if it exists and a
|
||||
* "merge --squash" was originally performed
|
||||
*/
|
||||
if (!stat(git_path_squash_msg(), &statbuf)) {
|
||||
if (strbuf_read_file(&sb, git_path_squash_msg(), 0) < 0)
|
||||
die_errno(_("could not read SQUASH_MSG"));
|
||||
hook_arg1 = "squash";
|
||||
} else
|
||||
hook_arg1 = "merge";
|
||||
if (strbuf_read_file(&sb, git_path_merge_msg(), 0) < 0)
|
||||
die_errno(_("could not read MERGE_MSG"));
|
||||
hook_arg1 = "merge";
|
||||
} else if (!stat(git_path_squash_msg(), &statbuf)) {
|
||||
if (strbuf_read_file(&sb, git_path_squash_msg(), 0) < 0)
|
||||
die_errno(_("could not read SQUASH_MSG"));
|
||||
|
|
|
@ -33,9 +33,11 @@ printf '%s\n' 1 2 3 4 5 6 7 8 9 >file
|
|||
printf '%s\n' '1 X' 2 3 4 5 6 7 8 9 >file.1
|
||||
printf '%s\n' 1 2 3 4 '5 X' 6 7 8 9 >file.5
|
||||
printf '%s\n' 1 2 3 4 5 6 7 8 '9 X' >file.9
|
||||
printf '%s\n' 1 2 3 4 5 6 7 8 '9 Y' >file.9y
|
||||
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 X' >result.1-5-9
|
||||
printf '%s\n' 1 2 3 4 5 6 7 8 '9 Z' >result.9z
|
||||
>empty
|
||||
|
||||
create_merge_msgs () {
|
||||
|
@ -128,6 +130,12 @@ test_expect_success 'setup' '
|
|||
git tag c2 &&
|
||||
c2=$(git rev-parse HEAD) &&
|
||||
git reset --hard "$c0" &&
|
||||
cp file.9y file &&
|
||||
git add file &&
|
||||
test_tick &&
|
||||
git commit -m "commit 7" &&
|
||||
git tag c7 &&
|
||||
git reset --hard "$c0" &&
|
||||
cp file.9 file &&
|
||||
git add file &&
|
||||
test_tick &&
|
||||
|
@ -218,6 +226,26 @@ test_expect_success 'merge c1 with c2' '
|
|||
verify_parents $c1 $c2
|
||||
'
|
||||
|
||||
test_expect_success 'merge --squash c3 with c7' '
|
||||
git reset --hard c3 &&
|
||||
test_must_fail git merge --squash c7 &&
|
||||
cat result.9z >file &&
|
||||
git commit --no-edit -a &&
|
||||
|
||||
{
|
||||
cat <<-EOF
|
||||
Squashed commit of the following:
|
||||
|
||||
$(git show -s c7)
|
||||
|
||||
# Conflicts:
|
||||
# file
|
||||
EOF
|
||||
} >expect &&
|
||||
git cat-file commit HEAD | sed -e '1,/^$/d' >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_debug 'git log --graph --decorate --oneline --all'
|
||||
|
||||
test_expect_success 'merge c1 with c2 and c3' '
|
||||
|
|
Loading…
Reference in a new issue