diff options
author | Nguyễn Thái Ngọc Duy <pclouds@gmail.com> | 2011-09-17 21:57:45 +1000 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2011-09-18 14:11:40 -0700 |
commit | baf18fc261ca475343fe3cb9cd2c0dded4bc1bb7 (patch) | |
tree | 666474a67f25d9906b2eace5692d1613beab21a6 /builtin | |
parent | 894642f68d3160db9116ca350da83c4a78cff8f2 (diff) | |
download | git-baf18fc261ca475343fe3cb9cd2c0dded4bc1bb7.tar.gz git-baf18fc261ca475343fe3cb9cd2c0dded4bc1bb7.tar.xz |
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>
Diffstat (limited to 'builtin')
-rw-r--r-- | builtin/commit.c | 6 | ||||
-rw-r--r-- | builtin/fmt-merge-msg.c | 2 | ||||
-rw-r--r-- | builtin/merge.c | 7 |
3 files changed, 7 insertions, 8 deletions
diff --git a/builtin/commit.c b/builtin/commit.c index 1a653190b..402eb5af5 100644 --- a/builtin/commit.c +++ b/builtin/commit.c @@ -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); diff --git a/builtin/fmt-merge-msg.c b/builtin/fmt-merge-msg.c index 75816329d..7e2f22589 100644 --- a/builtin/fmt-merge-msg.c +++ b/builtin/fmt-merge-msg.c @@ -293,7 +293,7 @@ static int do_fmt_merge_msg(int merge_title, struct strbuf *in, struct commit *head; struct rev_info rev; - head = lookup_commit(head_sha1); + head = lookup_commit_or_die(head_sha1, "HEAD"); init_revisions(&rev, NULL); rev.commit_format = CMIT_FMT_ONELINE; rev.ignore_merges = 1; diff --git a/builtin/merge.c b/builtin/merge.c index f5eb3f549..9567d60ba 100644 --- a/builtin/merge.c +++ b/builtin/merge.c @@ -1036,11 +1036,8 @@ int cmd_merge(int argc, const char **argv, const char *prefix) branch += 11; if (!branch || is_null_sha1(head_sha1)) head_commit = NULL; - else { - head_commit = lookup_commit(head_sha1); - if (!head_commit) - die(_("could not parse HEAD")); - } + else + head_commit = lookup_commit_or_die(head_sha1, "HEAD"); git_config(git_merge_config, NULL); |