Accept tags in HEAD or MERGE_HEAD
HEAD and MERGE_HEAD (among other branch tips) should never hold a tag. That can only be caused by broken tools and is cumbersome to fix by an end user with: $ git update-ref HEAD $(git rev-parse HEAD^{commit}) which may look like a magic to a new person. Be easy, warn users (so broken tools can be fixed if they bother to report) and move on. Be robust, if the given SHA-1 cannot be resolved to a commit object, die (therefore return value is always valid). Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
894642f68d
commit
baf18fc261
@ -1396,7 +1396,7 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
|
||||
if (get_sha1("HEAD", sha1))
|
||||
current_head = NULL;
|
||||
else {
|
||||
current_head = lookup_commit(sha1);
|
||||
current_head = lookup_commit_or_die(sha1, "HEAD");
|
||||
if (!current_head || parse_commit(current_head))
|
||||
die(_("could not parse HEAD commit"));
|
||||
}
|
||||
@ -1431,6 +1431,7 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
|
||||
pptr = &commit_list_insert(c->item, pptr)->next;
|
||||
} else if (whence == FROM_MERGE) {
|
||||
struct strbuf m = STRBUF_INIT;
|
||||
struct commit *commit;
|
||||
FILE *fp;
|
||||
|
||||
if (!reflog_msg)
|
||||
@ -1444,7 +1445,8 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
|
||||
unsigned char sha1[20];
|
||||
if (get_sha1_hex(m.buf, sha1) < 0)
|
||||
die(_("Corrupt MERGE_HEAD file (%s)"), m.buf);
|
||||
pptr = &commit_list_insert(lookup_commit(sha1), pptr)->next;
|
||||
commit = lookup_commit_or_die(sha1, "MERGE_HEAD");
|
||||
pptr = &commit_list_insert(commit, pptr)->next;
|
||||
}
|
||||
fclose(fp);
|
||||
strbuf_release(&m);
|
||||
|
Reference in New Issue
Block a user