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:
		
							parent
							
								
									ef8a8af0bf
								
							
						
					
					
						commit
						eb84898c17
					
				
					 2 changed files with 15 additions and 15 deletions
				
			
		| 
						 | 
				
			
			@ -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,17 +227,20 @@ impl<'a> NarInfo<'a> {
 | 
			
		|||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                "Deriver" => {
 | 
			
		||||
                    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()));
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        None => {
 | 
			
		||||
                            return Err(Error::InvalidDeriverStorePathMissingSuffix);
 | 
			
		||||
                        }
 | 
			
		||||
                    };
 | 
			
		||||
                }
 | 
			
		||||
                "Sig" => {
 | 
			
		||||
                    let val = Signature::parse(val)
 | 
			
		||||
                        .map_err(|e| Error::UnableToParseSignature(signatures.len(), e))?;
 | 
			
		||||
| 
						 | 
				
			
			@ -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 {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue