feat(nix-compat/narinfo): drop .drv from Narinfo.deriver field

We always know this needs to end with a .drv, and fail parsing if it
doesn't, so there's no need to hang onto these 4 bytes.

This will make it much easier to synthesize a NarInfo<'_> later on from
a PathInfo proto, because we don't have to make this ".drv" appear out
of thin air.

Change-Id: Id95e7fd937d7c9a420a39b5a4bab73985640ca3b
Reviewed-on: https://cl.tvl.fyi/c/depot/+/10084
Tested-by: BuildkiteCI
Reviewed-by: edef <edef@edef.eu>
Reviewed-by: raitobezarius <tvl@lahfa.xyz>
Autosubmit: flokli <flokli@flokli.de>
This commit is contained in:
Florian Klink 2023-11-22 20:11:22 +02:00 committed by clbot
parent ef8a8af0bf
commit eb84898c17
2 changed files with 15 additions and 15 deletions

View file

@ -53,7 +53,7 @@ pub struct NarInfo<'a> {
// derivation metadata
/// Nix system triple of [deriver]
pub system: Option<&'a str>,
/// Store path of the derivation that produced this
/// Store path of the derivation that produced this. The last .drv suffix is stripped.
pub deriver: Option<StorePathRef<'a>>,
// cache-specific untrusted metadata
/// Relative URL of the compressed NAR file
@ -227,16 +227,19 @@ impl<'a> NarInfo<'a> {
}
}
"Deriver" => {
let val = StorePathRef::from_bytes(val.as_bytes())
.map_err(Error::InvalidDeriverStorePath)?;
match val.strip_suffix(".drv") {
Some(val) => {
let val = StorePathRef::from_bytes(val.as_bytes())
.map_err(Error::InvalidDeriverStorePath)?;
if !val.name().ends_with(".drv") {
return Err(Error::InvalidDeriverStorePathMissingSuffix);
}
if deriver.replace(val).is_some() {
return Err(Error::DuplicateField(tag.to_string()));
}
if deriver.replace(val).is_some() {
return Err(Error::DuplicateField(tag.to_string()));
}
}
None => {
return Err(Error::InvalidDeriverStorePathMissingSuffix);
}
};
}
"Sig" => {
let val = Signature::parse(val)
@ -325,7 +328,7 @@ impl Display for NarInfo<'_> {
writeln!(w)?;
if let Some(deriver) = &self.deriver {
writeln!(w, "Deriver: {deriver}")?;
writeln!(w, "Deriver: {deriver}.drv")?;
}
if let Some(system) = self.system {

View file

@ -212,10 +212,7 @@ impl From<&nix_compat::narinfo::NarInfo<'_>> for NarInfo {
signatures,
reference_names: value.references.iter().map(|r| r.to_string()).collect(),
deriver: value.deriver.as_ref().map(|sp| StorePath {
// The parser already errors out with an error if the .drv suffix was missing,
// so you can only miss the suffix if you're manually constructing,
// which means we can unwrap here.
name: sp.name().strip_suffix(".drv").unwrap().to_owned(),
name: sp.name().to_owned(),
digest: Bytes::copy_from_slice(sp.digest()),
}),
ca,