diff options
author | Junio C Hamano <gitster@pobox.com> | 2024-01-29 16:03:00 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2024-01-29 16:03:00 -0800 |
commit | 8282f9592838acd265491737e4d36636fc64b639 (patch) | |
tree | 775238c960cfb528e2ba78001e676d76d8ba39b3 /refs.c | |
parent | 9869e02a645babb91be500ea11eabddc551850e2 (diff) | |
parent | 8df4c5d205263c98378f0eea2b4ebab5e5c174aa (diff) | |
download | git-8282f9592838acd265491737e4d36636fc64b639.tar.gz |
Merge branch 'ps/not-so-many-refs-are-special'
Define "special ref" as a very narrow set that consists of
FETCH_HEAD and MERGE_HEAD, and clarify everything else that used to
be classified as such are actually just pseudorefs.
* ps/not-so-many-refs-are-special:
Documentation: add "special refs" to the glossary
refs: redefine special refs
refs: convert MERGE_AUTOSTASH to become a normal pseudo-ref
sequencer: introduce functions to handle autostashes via refs
refs: convert AUTO_MERGE to become a normal pseudo-ref
sequencer: delete REBASE_HEAD in correct repo when picking commits
sequencer: clean up pseudo refs with REF_NO_DEREF
Diffstat (limited to 'refs.c')
-rw-r--r-- | refs.c | 35 |
1 files changed, 7 insertions, 28 deletions
@@ -1839,13 +1839,10 @@ done: static int is_special_ref(const char *refname) { /* - * Special references get written and read directly via the filesystem - * by the subsystems that create them. Thus, they must not go through - * the reference backend but must instead be read directly. It is - * arguable whether this behaviour is sensible, or whether it's simply - * a leaky abstraction enabled by us only having a single reference - * backend implementation. But at least for a subset of references it - * indeed does make sense to treat them specially: + * Special references are refs that have different semantics compared + * to "normal" refs. These refs can thus not be stored in the ref + * backend, but must always be accessed via the filesystem. The + * following refs are special: * * - FETCH_HEAD may contain multiple object IDs, and each one of them * carries additional metadata like where it came from. @@ -1853,30 +1850,12 @@ static int is_special_ref(const char *refname) * - MERGE_HEAD may contain multiple object IDs when merging multiple * heads. * - * There are some exceptions that you might expect to see on this list - * but which are handled exclusively via the reference backend: - * - * - BISECT_EXPECTED_REV - * - * - CHERRY_PICK_HEAD - * - * - HEAD - * - * - ORIG_HEAD - * - * - "rebase-apply/" and "rebase-merge/" contain all of the state for - * rebases, including some reference-like files. These are - * exclusively read and written via the filesystem and never go - * through the refdb. - * - * Writing or deleting references must consistently go either through - * the filesystem (special refs) or through the reference backend - * (normal ones). + * Reading, writing or deleting references must consistently go either + * through the filesystem (special refs) or through the reference + * backend (normal ones). */ static const char * const special_refs[] = { - "AUTO_MERGE", "FETCH_HEAD", - "MERGE_AUTOSTASH", "MERGE_HEAD", }; size_t i; |