pub struct Caps {
pub thin: bool,
pub ofs_delta: bool,
}Expand description
What the client said it can parse, as far as pack emission is concerned.
Deliberately not “the capability line”: a capability that does not change
which bytes come out of GitServe::emit_pack does not belong here, and
side-band, progress, agent strings and shallow negotiation all change the
transport, which is the caller’s.
There is no Default, on purpose. A caller that forgets a field would
otherwise send a pack the client cannot parse, and it would look like a
working server producing a corrupt clone — the failure nobody notices. Both
fields are stated at every call site or the code does not compile. Use
Caps::modern in a test that does not care.
Fields§
§thin: boolThe client accepts a thin pack: one whose deltas may name bases it already holds and this pack does not carry.
It is an allowance, never a requirement. A backend that always closes
its emission over every delta base is correct for thin: true as well —
it costs bytes, never correctness — so ignoring this flag is a
performance decision an implementation may take and should document.
ofs_delta: boolThe client accepts OFS_DELTA entries (bases named by backwards
distance). Every git since 1.5.5 advertises it.
When this is false a backend that stores entries verbatim cannot
copy an OFS_DELTA out: the distance means nothing to a reader that
will not parse it. The honest answers are to rewrite the entry as a
REF_DELTA or to refuse. Silently emitting one anyway is not an answer.
Implementations§
Trait Implementations§
impl Copy for Caps
impl Eq for Caps
impl StructuralPartialEq for Caps
Auto Trait Implementations§
impl Freeze for Caps
impl RefUnwindSafe for Caps
impl Send for Caps
impl Sync for Caps
impl Unpin for Caps
impl UnsafeUnpin for Caps
impl UnwindSafe for Caps
Blanket Implementations§
impl<T> Allocation for T
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.