summaryrefslogtreecommitdiff
path: root/sequencer.c
diff options
context:
space:
mode:
authorPhillip Wood <phillip.wood@dunelm.org.uk>2019-11-22 19:43:03 (GMT)
committerJunio C Hamano <gitster@pobox.com>2019-11-23 01:52:32 (GMT)
commit2d05ef2778b99e05e6a8a40c5b8d59a3c4ab1274 (patch)
tree763f4ea28732dc1f34ac0e7c4274ec272bbb0825 /sequencer.c
parent4627bc777e9ade5e3a85d6b8e8630fc4b6e2f8f6 (diff)
downloadgit-2d05ef2778b99e05e6a8a40c5b8d59a3c4ab1274.zip
git-2d05ef2778b99e05e6a8a40c5b8d59a3c4ab1274.tar.gz
git-2d05ef2778b99e05e6a8a40c5b8d59a3c4ab1274.tar.bz2
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>
Diffstat (limited to 'sequencer.c')
-rw-r--r--sequencer.c26
1 files changed, 21 insertions, 5 deletions
diff --git a/sequencer.c b/sequencer.c
index da2decb..f4f81cb 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -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")) {