refactor(nix-compat/store_path): consistently use SP as type param
We also use S in other places in the same file, but that's for the string-like references. SP is now consistently used as the type parameter for StorePath<_> (and build_output_path) gets support for it). By being a bit more careful in the order of assignments in nix-compat/ src/derivation, we can nudge the compiler to use the type we want. Change-Id: Ia7c298e110dff98d3b113d2388674ce9e22b80e8 Reviewed-on: https://cl.tvl.fyi/c/depot/+/12590 Reviewed-by: flokli <flokli@flokli.de> Reviewed-by: Marijan Petričević <marijan.petricevic94@gmail.com> Tested-by: BuildkiteCI
This commit is contained in:
		
							parent
							
								
									e8040ec61f
								
							
						
					
					
						commit
						48fa320cf4
					
				
					 3 changed files with 13 additions and 10 deletions
				
			
		|  | @ -257,8 +257,8 @@ impl Derivation { | ||||||
| 
 | 
 | ||||||
|             // For fixed output derivation we use [build_ca_path], otherwise we
 |             // For fixed output derivation we use [build_ca_path], otherwise we
 | ||||||
|             // use [build_output_path] with [hash_derivation_modulo].
 |             // use [build_output_path] with [hash_derivation_modulo].
 | ||||||
|             let abs_store_path = if let Some(ref hwm) = output.ca_hash { |             let store_path = if let Some(ref hwm) = output.ca_hash { | ||||||
|                 build_ca_path(&path_name, hwm, Vec::<String>::new(), false).map_err(|e| { |                 build_ca_path(&path_name, hwm, Vec::<&str>::new(), false).map_err(|e| { | ||||||
|                     DerivationError::InvalidOutputDerivationPath(output_name.to_string(), e) |                     DerivationError::InvalidOutputDerivationPath(output_name.to_string(), e) | ||||||
|                 })? |                 })? | ||||||
|             } else { |             } else { | ||||||
|  | @ -270,11 +270,11 @@ impl Derivation { | ||||||
|                 })? |                 })? | ||||||
|             }; |             }; | ||||||
| 
 | 
 | ||||||
|             output.path = Some(abs_store_path.to_owned()); |  | ||||||
|             self.environment.insert( |             self.environment.insert( | ||||||
|                 output_name.to_string(), |                 output_name.to_string(), | ||||||
|                 abs_store_path.to_absolute_path().into(), |                 store_path.to_absolute_path().into(), | ||||||
|             ); |             ); | ||||||
|  |             output.path = Some(store_path); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         Ok(()) |         Ok(()) | ||||||
|  |  | ||||||
|  | @ -139,7 +139,7 @@ where | ||||||
|         S: From<&'a str>, |         S: From<&'a str>, | ||||||
|     { |     { | ||||||
|         Ok(Self { |         Ok(Self { | ||||||
|             name: validate_name(name.as_bytes())?.into(), |             name: validate_name(name)?.into(), | ||||||
|             digest, |             digest, | ||||||
|         }) |         }) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | @ -134,11 +134,14 @@ pub fn build_nar_based_store_path<'a>( | ||||||
| ///
 | ///
 | ||||||
| /// Input-addresed store paths are always derivation outputs, the "input" in question is the
 | /// Input-addresed store paths are always derivation outputs, the "input" in question is the
 | ||||||
| /// derivation and its closure.
 | /// derivation and its closure.
 | ||||||
| pub fn build_output_path<'a>( | pub fn build_output_path<'a, SP>( | ||||||
|     drv_sha256: &[u8; 32], |     drv_sha256: &[u8; 32], | ||||||
|     output_name: &str, |     output_name: &str, | ||||||
|     output_path_name: &'a str, |     output_path_name: &'a str, | ||||||
| ) -> Result<StorePathRef<'a>, Error> { | ) -> Result<StorePath<SP>, Error> | ||||||
|  | where | ||||||
|  |     SP: std::cmp::Eq + std::ops::Deref<Target = str> + std::convert::From<&'a str>, | ||||||
|  | { | ||||||
|     build_store_path_from_fingerprint_parts( |     build_store_path_from_fingerprint_parts( | ||||||
|         &(String::from("output:") + output_name), |         &(String::from("output:") + output_name), | ||||||
|         drv_sha256, |         drv_sha256, | ||||||
|  | @ -156,13 +159,13 @@ pub fn build_output_path<'a>( | ||||||
| /// bytes.
 | /// bytes.
 | ||||||
| /// Inside a StorePath, that digest is printed nixbase32-encoded
 | /// Inside a StorePath, that digest is printed nixbase32-encoded
 | ||||||
| /// (32 characters).
 | /// (32 characters).
 | ||||||
| fn build_store_path_from_fingerprint_parts<'a, S>( | fn build_store_path_from_fingerprint_parts<'a, SP>( | ||||||
|     ty: &str, |     ty: &str, | ||||||
|     inner_digest: &[u8; 32], |     inner_digest: &[u8; 32], | ||||||
|     name: &'a str, |     name: &'a str, | ||||||
| ) -> Result<StorePath<S>, Error> | ) -> Result<StorePath<SP>, Error> | ||||||
| where | where | ||||||
|     S: std::cmp::Eq + std::ops::Deref<Target = str> + std::convert::From<&'a str>, |     SP: std::cmp::Eq + std::ops::Deref<Target = str> + std::convert::From<&'a str>, | ||||||
| { | { | ||||||
|     let fingerprint = format!( |     let fingerprint = format!( | ||||||
|         "{ty}:sha256:{}:{STORE_DIR}:{name}", |         "{ty}:sha256:{}:{STORE_DIR}:{name}", | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue