diff options
author | Han-Wen Nienhuys <hanwen@google.com> | 2022-09-19 19:34:50 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2022-09-19 21:11:11 +0300 |
commit | 71e5473493612f74244e2fa7a257a868df98be53 (patch) | |
tree | d749311ef5041031f8a5c569a680837d862990f8 /reflog.c | |
parent | d3fa443f97e3a8d75b51341e2d5bac380b7422df (diff) |
refs: unify parse_worktree_ref() and ref_type()
The logic to handle worktree refs (worktrees/NAME/REF and
main-worktree/REF) existed in two places:
* ref_type() in refs.c
* parse_worktree_ref() in worktree.c
Collapse this logic together in one function parse_worktree_ref():
this avoids having to cross-check the result of parse_worktree_ref()
and ref_type().
Introduce enum ref_worktree_type, which is slightly different from
enum ref_type. The latter is a misleading name (one would think that
'ref_type' would have the symref option).
Instead, enum ref_worktree_type only makes explicit how a refname
relates to a worktree. From this point of view, HEAD and
refs/bisect/abc are the same: they specify the current worktree
implicitly.
The files-backend must avoid packing refs/bisect/* and friends into
packed-refs, so expose is_per_worktree_ref() separately.
Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'reflog.c')
-rw-r--r-- | reflog.c | 13 |
1 files changed, 3 insertions, 10 deletions
@@ -312,16 +312,9 @@ static int push_tip_to_list(const char *refname UNUSED, static int is_head(const char *refname) { - switch (ref_type(refname)) { - case REF_TYPE_OTHER_PSEUDOREF: - case REF_TYPE_MAIN_PSEUDOREF: - if (parse_worktree_ref(refname, NULL, NULL, &refname)) - BUG("not a worktree ref: %s", refname); - break; - default: - break; - } - return !strcmp(refname, "HEAD"); + const char *stripped_refname; + parse_worktree_ref(refname, NULL, NULL, &stripped_refname); + return !strcmp(stripped_refname, "HEAD"); } void reflog_expiry_prepare(const char *refname, |