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);
|
&sb, &ctx);
|
||||||
hook_arg1 = "message";
|
hook_arg1 = "message";
|
||||||
} else if (!stat(git_path_merge_msg(), &statbuf)) {
|
} 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)
|
if (strbuf_read_file(&sb, git_path_merge_msg(), 0) < 0)
|
||||||
die_errno(_("could not read MERGE_MSG"));
|
die_errno(_("could not read MERGE_MSG"));
|
||||||
hook_arg1 = "merge";
|
|
||||||
} else if (!stat(git_path_squash_msg(), &statbuf)) {
|
} else if (!stat(git_path_squash_msg(), &statbuf)) {
|
||||||
if (strbuf_read_file(&sb, git_path_squash_msg(), 0) < 0)
|
if (strbuf_read_file(&sb, git_path_squash_msg(), 0) < 0)
|
||||||
die_errno(_("could not read SQUASH_MSG"));
|
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 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 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 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 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
|
||||||
|
printf '%s\n' 1 2 3 4 5 6 7 8 '9 Z' >result.9z
|
||||||
>empty
|
>empty
|
||||||
|
|
||||||
create_merge_msgs () {
|
create_merge_msgs () {
|
||||||
@ -128,6 +130,12 @@ test_expect_success 'setup' '
|
|||||||
git tag c2 &&
|
git tag c2 &&
|
||||||
c2=$(git rev-parse HEAD) &&
|
c2=$(git rev-parse HEAD) &&
|
||||||
git reset --hard "$c0" &&
|
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 &&
|
cp file.9 file &&
|
||||||
git add file &&
|
git add file &&
|
||||||
test_tick &&
|
test_tick &&
|
||||||
@ -218,6 +226,26 @@ test_expect_success 'merge c1 with c2' '
|
|||||||
verify_parents $c1 $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_debug 'git log --graph --decorate --oneline --all'
|
||||||
|
|
||||||
test_expect_success 'merge c1 with c2 and c3' '
|
test_expect_success 'merge c1 with c2 and c3' '
|
||||||
|
Loading…
Reference in New Issue
Block a user