Message ID | a4b4dd51f81fdf65f79b9afc3bd85109817ea128.1705659748.git.ps@pks.im (mailing list archive) |
---|---|
State | Accepted |
Commit | 2cd33f44282853d77bea9c29d1a4f88d8c3b3e5a |
Headers | show |
Series | refs: convert special refs to become normal pseudo-refs | expand |
Patrick Steinhardt <ps@pks.im> writes: > Now that our list of special refs really only contains refs which have > actually-special semantics, let's redefine what makes a special ref. Yay. > > Signed-off-by: Patrick Steinhardt <ps@pks.im> > --- > refs.c | 33 +++++++-------------------------- > 1 file changed, 7 insertions(+), 26 deletions(-) > > diff --git a/refs.c b/refs.c > index 047c81b1c1..08a900a047 100644 > --- a/refs.c > +++ b/refs.c > @@ -1839,13 +1839,10 @@ static int refs_read_special_head(struct ref_store *ref_store, > 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,25 +1850,9 @@ 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[] = { > "FETCH_HEAD",
diff --git a/refs.c b/refs.c index 047c81b1c1..08a900a047 100644 --- a/refs.c +++ b/refs.c @@ -1839,13 +1839,10 @@ static int refs_read_special_head(struct ref_store *ref_store, 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,25 +1850,9 @@ 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[] = { "FETCH_HEAD",
Now that our list of special refs really only contains refs which have actually-special semantics, let's redefine what makes a special ref. Signed-off-by: Patrick Steinhardt <ps@pks.im> --- refs.c | 33 +++++++-------------------------- 1 file changed, 7 insertions(+), 26 deletions(-)