sequencer: fix empty commit check when amending

This fixes a regression introduced in 356ee4659b ("sequencer: try to
commit without forking 'git commit'", 2017-11-24). When amending a
commit try_to_commit() was using the wrong parent when checking if the
commit would be empty. When amending we need to check against HEAD^ not
HEAD.

t3403 may not seem like the natural home for the new tests but a further
patch series will improve the advice printed by `git commit`. That
series will mutate these tests to check that the advice includes
suggesting `rebase --skip` to skip the fixup that would empty the
commit.

Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Phillip Wood
2019-11-22 19:43:03 +00:00
committed by Junio C Hamano
parent 4627bc777e
commit 2d05ef2778
2 changed files with 53 additions and 5 deletions

View File

@ -1351,11 +1351,27 @@ static int try_to_commit(struct repository *r,
goto out;
}
if (!(flags & ALLOW_EMPTY) && oideq(current_head ?
get_commit_tree_oid(current_head) :
the_hash_algo->empty_tree, &tree)) {
res = 1; /* run 'git commit' to display error message */
goto out;
if (!(flags & ALLOW_EMPTY)) {
struct commit *first_parent = current_head;
if (flags & AMEND_MSG) {
if (current_head->parents) {
first_parent = current_head->parents->item;
if (repo_parse_commit(r, first_parent)) {
res = error(_("could not parse HEAD commit"));
goto out;
}
} else {
first_parent = NULL;
}
}
if (oideq(first_parent
? get_commit_tree_oid(first_parent)
: the_hash_algo->empty_tree,
&tree)) {
res = 1; /* run 'git commit' to display error message */
goto out;
}
}
if (find_hook("prepare-commit-msg")) {