pub struct RefCommand {
pub old: ObjectId,
pub new: ObjectId,
pub name: String,
}Expand description
One <old> <new> <ref> line from the client.
Fields§
§old: ObjectIdWhat the client believes the reference currently holds; null for a create.
new: ObjectIdWhat it should hold afterwards; null for a delete.
name: StringThe reference.
String, not the FullName newtype that died with RefStore, because
RefUpdate::name and RefRow::name on the contract are String and a
second validated name type in gunnar is the duplication the 2026-08-10
demolition removes.
The validation did not go with the type. It moved into
ReceivePack::parse_command, which routes every client-supplied name
through gunnar_store::refname::validate before one of these can
exist — and that is a path-traversal boundary
(refs/heads/../../etc/passwd), not a tidiness rule. What is gone is
only the compile-time guarantee that a value of this type was
checked; the runtime check is in one place and it is the same rule set.