pub struct RefSnapshot { /* private fields */ }Expand description
The reference namespace as of one call to refs().
Implementations§
Source§impl RefSnapshot
impl RefSnapshot
Sourcepub fn with_prefix<'s>(
&'s self,
prefix: Option<&'s str>,
) -> impl Iterator<Item = &'s RefRow> + 's
pub fn with_prefix<'s>( &'s self, prefix: Option<&'s str>, ) -> impl Iterator<Item = &'s RefRow> + 's
The rows whose name starts with prefix; all of them for None.
Sourcepub fn resolve(&self, name: &str) -> Result<Option<ObjectId>>
pub fn resolve(&self, name: &str) -> Result<Option<ObjectId>>
What name resolves to, following symbolic references.
None for a name this snapshot does not hold, and for a symbolic
reference pointing at one — an unborn branch is the ordinary case of
the second, not an error.
Sourcepub fn head(&self, git: &dyn GitServe) -> Result<Option<ObjectId>>
pub fn head(&self, git: &dyn GitServe) -> Result<Option<ObjectId>>
What HEAD points at, asked through the accessor pair and resolved
against this snapshot.
HEAD is not a row, so this is the only honest way to ask, and
it is two questions rather than one: the pair answers what HEAD is,
and the target of a symbolic answer resolves against the same
snapshot, so a control-plane answer cannot name an oid for a reference
that had already moved.
A repository whose HEAD names a branch that does not exist answers
None, and that is the state
ServerStores::adopt_default_branch_if_unborn exists to repair: stock
git clone against it writes an empty worktree and exits 0.
Sourcepub fn resolve_row(&self, row: &RefRow) -> Result<Option<ObjectId>>
pub fn resolve_row(&self, row: &RefRow) -> Result<Option<ObjectId>>
RefSnapshot::resolve for a row already in hand.
A depth cap rather than a seen set, matching
gunnar_store::refname::MAX_SYMREF_DEPTH: a cycle and a chain fifty
deep are the same refusal, and the cap is a number an operator can be
told. A cycle must not hang the advertisement, which is the whole
reason this is not a while let.
Sourcepub fn peeled(row: &RefRow) -> Result<Option<ObjectId>>
pub fn peeled(row: &RefRow) -> Result<Option<ObjectId>>
The peeled target a row already carries, when it has one.
RefRow::peeled is “for an annotated tag, the commit it peels to” and
a backend that keeps a peel column answers it for free. None means
“this backend does not say”, never “this tag peels to nothing”, so
the caller falls back to peeling the object itself rather than
advertising an unpeeled tag.