Merge branch 'ps/pseudo-ref-terminology' into ps/ref-storage-migration

* ps/pseudo-ref-terminology:
  refs: refuse to write pseudorefs
  ref-filter: properly distinuish pseudo and root refs
  refs: pseudorefs are no refs
  refs: classify HEAD as a root ref
  refs: do not check ref existence in `is_root_ref()`
  refs: rename `is_special_ref()` to `is_pseudo_ref()`
  refs: rename `is_pseudoref()` to `is_root_ref()`
  Documentation/glossary: define root refs as refs
  Documentation/glossary: clarify limitations of pseudorefs
  Documentation/glossary: redefine pseudorefs as special refs
This commit is contained in:
Junio C Hamano
2024-05-23 09:14:32 -07:00
10 changed files with 169 additions and 117 deletions

48
refs.h
View File

@ -1006,8 +1006,52 @@ extern struct ref_namespace_info ref_namespace[NAMESPACE__COUNT];
*/
void update_ref_namespace(enum ref_namespace namespace, char *ref);
int is_pseudoref(struct ref_store *refs, const char *refname);
int is_headref(struct ref_store *refs, const char *refname);
/*
* Check whether the provided name names a root reference. This function only
* performs a syntactic check.
*
* A root ref is a reference that lives in the root of the reference hierarchy.
* These references must conform to special syntax:
*
* - Their name must be all-uppercase or underscores ("_").
*
* - Their name must end with "_HEAD". As a special rule, "HEAD" is a root
* ref, as well.
*
* - Their name may not contain a slash.
*
* There is a special set of irregular root refs that exist due to historic
* reasons, only. This list shall not be expanded in the future:
*
* - AUTO_MERGE
*
* - BISECT_EXPECTED_REV
*
* - NOTES_MERGE_PARTIAL
*
* - NOTES_MERGE_REF
*
* - MERGE_AUTOSTASH
*/
int is_root_ref(const char *refname);
/*
* Pseudorefs 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 pseudorefs:
*
* - FETCH_HEAD may contain multiple object IDs, and each one of them
* carries additional metadata like where it came from.
*
* - MERGE_HEAD may contain multiple object IDs when merging multiple
* heads.
*
* Reading, writing or deleting references must consistently go either
* through the filesystem (pseudorefs) or through the reference
* backend (normal ones).
*/
int is_pseudo_ref(const char *refname);
/*
* The following functions have been removed in Git v2.45 in favor of functions