pub struct IndexSnapshot {
pub active: bool,
pub resumed: bool,
pub pack_id: u64,
pub objects_done: u64,
pub objects_total: u64,
pub bytes_done: u64,
pub bytes_total: u64,
pub phase: &'static str,
pub started_at_ms: u64,
pub reinflations: u64,
pub pauses: u64,
}Expand description
One repository, opened on whichever engine this process carries.
The value Engine::open_repo hands back, and the only implementor of
RepoStore in gunnar. It is a value, not a seam: nothing in it can be
implemented by a backend and no engine can behave differently through it —
the engine-specific part is the one line in each adapter that constructs it.
It replaced two near-identical RepoStore impls (ZnippyRepo, GixRepo)
that differed only in which concrete store they held.
§Why it exists at all
gunnar-server is a serving process, and everything it does with a
repository needs the reading contract:
UploadPack::new and
ReceivePack::new take &dyn GitServe,
gunnar-policy’s ancestry walk and signature gate take &dyn GitServe, and
HEAD is reachable only through GitServe::head / GitServe::set_head
because the GitServe HEAD ruling settled that it is not a row in GitOps::refs.
§ONE handle, since RepoStore::git widened — 2026-08-10
This struct carried two fat pointers to the same store, ops and
serve, for one day: RepoStore::git() returned Arc<dyn GitOps>, the
hand-off from the reading half to the storage half is one-way, and dyn has
no downcast — so a server that had only the narrow handle could not serve a
clone from it. The fix was one line in gunnar-store:
git() hands out Arc<dyn GitServe>, which is still one method and still
One repository’s index work, engine-neutral. See
znippy_plugin_git::progress::Snapshot for the source of every field.
Fields§
§active: bool§resumed: bool§pack_id: u64§objects_done: u64§objects_total: u64§bytes_done: u64§bytes_total: u64§phase: &'static str§started_at_ms: u64§reinflations: u64§pauses: u64Implementations§
Trait Implementations§
Source§impl Clone for IndexSnapshot
impl Clone for IndexSnapshot
Source§impl Debug for IndexSnapshot
impl Debug for IndexSnapshot
impl Eq for IndexSnapshot
Source§impl PartialEq for IndexSnapshot
impl PartialEq for IndexSnapshot
impl StructuralPartialEq for IndexSnapshot
Auto Trait Implementations§
impl Freeze for IndexSnapshot
impl RefUnwindSafe for IndexSnapshot
impl Send for IndexSnapshot
impl Sync for IndexSnapshot
impl Unpin for IndexSnapshot
impl UnsafeUnpin for IndexSnapshot
impl UnwindSafe for IndexSnapshot
Blanket Implementations§
impl<T> Allocation for T
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request