revision: ensure MERGE_HEAD is a ref in prepare_show_merge

This is done to

 (1) ensure MERGE_HEAD is a ref,
 (2) obtain the oid without any prefixing by refs.c:repo_dwim_ref()
 (3) error out when MERGE_HEAD is a symref.

Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Michael Lohmann <mi.al.lohmann@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Philippe Blain <levraiphilippeblain@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Michael Lohmann
2024-02-28 08:54:53 -05:00
committed by Junio C Hamano
parent 186b115d30
commit f476143ee6

View File

@ -1973,8 +1973,12 @@ static void prepare_show_merge(struct rev_info *revs)
if (repo_get_oid(the_repository, "HEAD", &oid)) if (repo_get_oid(the_repository, "HEAD", &oid))
die("--merge without HEAD?"); die("--merge without HEAD?");
head = lookup_commit_or_die(&oid, "HEAD"); head = lookup_commit_or_die(&oid, "HEAD");
if (repo_get_oid(the_repository, "MERGE_HEAD", &oid)) if (read_ref_full("MERGE_HEAD",
RESOLVE_REF_READING | RESOLVE_REF_NO_RECURSE,
&oid, NULL))
die("--merge without MERGE_HEAD?"); die("--merge without MERGE_HEAD?");
if (is_null_oid(&oid))
die(_("MERGE_HEAD exists but is a symbolic ref"));
other = lookup_commit_or_die(&oid, "MERGE_HEAD"); other = lookup_commit_or_die(&oid, "MERGE_HEAD");
add_pending_object(revs, &head->object, "HEAD"); add_pending_object(revs, &head->object, "HEAD");
add_pending_object(revs, &other->object, "MERGE_HEAD"); add_pending_object(revs, &other->object, "MERGE_HEAD");