diff options
author | Junio C Hamano <gitster@pobox.com> | 2024-01-02 22:51:30 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2024-01-02 22:51:30 +0100 |
commit | dbf668a1b7d814b4fcb57c292934cbbc2d926490 (patch) | |
tree | 147f6a9d23df350ae6c8e24094a4c973e306ad2c /wt-status.c | |
parent | Merge branch 'jc/orphan-unborn' (diff) | |
parent | bisect: consistently write BISECT_EXPECTED_REV via the refdb (diff) | |
download | git-dbf668a1b7d814b4fcb57c292934cbbc2d926490.tar.xz git-dbf668a1b7d814b4fcb57c292934cbbc2d926490.zip |
Merge branch 'ps/pseudo-refs'
Assorted changes around pseudoref handling.
* ps/pseudo-refs:
bisect: consistently write BISECT_EXPECTED_REV via the refdb
refs: complete list of special refs
refs: propagate errno when reading special refs fails
wt-status: read HEAD and ORIG_HEAD via the refdb
Diffstat (limited to 'wt-status.c')
-rw-r--r-- | wt-status.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/wt-status.c b/wt-status.c index 9e8c08003b..b5a29083df 100644 --- a/wt-status.c +++ b/wt-status.c @@ -1296,26 +1296,32 @@ static char *read_line_from_git_path(const char *filename) static int split_commit_in_progress(struct wt_status *s) { int split_in_progress = 0; - char *head, *orig_head, *rebase_amend, *rebase_orig_head; + struct object_id head_oid, orig_head_oid; + char *rebase_amend, *rebase_orig_head; + int head_flags, orig_head_flags; if ((!s->amend && !s->nowarn && !s->workdir_dirty) || !s->branch || strcmp(s->branch, "HEAD")) return 0; - head = read_line_from_git_path("HEAD"); - orig_head = read_line_from_git_path("ORIG_HEAD"); + if (read_ref_full("HEAD", RESOLVE_REF_READING | RESOLVE_REF_NO_RECURSE, + &head_oid, &head_flags) || + read_ref_full("ORIG_HEAD", RESOLVE_REF_READING | RESOLVE_REF_NO_RECURSE, + &orig_head_oid, &orig_head_flags)) + return 0; + if (head_flags & REF_ISSYMREF || orig_head_flags & REF_ISSYMREF) + return 0; + rebase_amend = read_line_from_git_path("rebase-merge/amend"); rebase_orig_head = read_line_from_git_path("rebase-merge/orig-head"); - if (!head || !orig_head || !rebase_amend || !rebase_orig_head) + if (!rebase_amend || !rebase_orig_head) ; /* fall through, no split in progress */ else if (!strcmp(rebase_amend, rebase_orig_head)) - split_in_progress = !!strcmp(head, rebase_amend); - else if (strcmp(orig_head, rebase_orig_head)) + split_in_progress = !!strcmp(oid_to_hex(&head_oid), rebase_amend); + else if (strcmp(oid_to_hex(&orig_head_oid), rebase_orig_head)) split_in_progress = 1; - free(head); - free(orig_head); free(rebase_amend); free(rebase_orig_head); |