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.