aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2007-12-02 23:55:23 -0800
committerJunio C Hamano <gitster@pobox.com>2007-12-02 23:55:23 -0800
commit9663c3bc6a04b9b4f63a54b820d3edb16aa95e6d (patch)
treed71955c3aa9b04fec7b11564edff1106913cbbe0
parent69e7491835a0aa4e1a793a7c131783d8bb1cbb2b (diff)
downloadgit-9663c3bc6a04b9b4f63a54b820d3edb16aa95e6d.tar.gz
git-9663c3bc6a04b9b4f63a54b820d3edb16aa95e6d.tar.xz
git-commit: Allow to amend a merge commit that does not change the tree
Normally, it should not be allowed to generate an empty commit. A merge commit generated with git 'merge -s ours' does not change the tree (along the first parent), but merges are not "empty" even if they do not change the tree. Hence, we should be careful not to forbid this case. Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--builtin-commit.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/builtin-commit.c b/builtin-commit.c
index f37a90f07..6c2dc390c 100644
--- a/builtin-commit.c
+++ b/builtin-commit.c
@@ -676,6 +676,14 @@ int git_commit_config(const char *k, const char *v)
return git_status_config(k, v);
}
+static int is_a_merge(const unsigned char *sha1)
+{
+ struct commit *commit = lookup_commit(sha1);
+ if (!commit || parse_commit(commit))
+ die("could not parse HEAD commit");
+ return !!(commit->parents && commit->parents->next);
+}
+
static const char commit_utf8_warn[] =
"Warning: commit message does not conform to UTF-8.\n"
"You may want to amend it after fixing the message, or set the config\n"
@@ -701,7 +709,8 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
return 1;
}
- if (!prepare_log_message(index_file, prefix) && !in_merge) {
+ if (!prepare_log_message(index_file, prefix) && !in_merge &&
+ !(amend && is_a_merge(head_sha1))) {
run_status(stdout, index_file, prefix);
rollback_index_files();
unlink(commit_editmsg);