feat(nix-compat/store_path): impl [Partial]Ord for StorePathRef
Move the code implementing it from StorePath to StorePathRef, and have the StorePath impls use that too. Drop the debug_assert in every comparison - we have tests for this to ensure it keeps working, and built up some confidence by piping a lot of other store paths through it in the meantime. Change-Id: I288bad3dfa597f68d63c4bcda7791f722b7a8ced Reviewed-on: https://cl.tvl.fyi/c/depot/+/11392 Reviewed-by: raitobezarius <tvl@lahfa.xyz> Tested-by: BuildkiteCI
This commit is contained in:
		
							parent
							
								
									fd4c7c10a8
								
							
						
					
					
						commit
						57fba1f167
					
				
					 1 changed files with 15 additions and 16 deletions
				
			
		|  | @ -86,22 +86,7 @@ impl PartialOrd for StorePath { | |||
| /// of the nixbase32-encoded string.
 | ||||
| impl Ord for StorePath { | ||||
|     fn cmp(&self, other: &Self) -> std::cmp::Ordering { | ||||
|         let order = self.digest.iter().rev().cmp(other.digest.iter().rev()); | ||||
| 
 | ||||
|         // This order must match the order of the nixbase32 encoded digests.
 | ||||
|         #[cfg(debug_assertions)] | ||||
|         { | ||||
|             let self_hash = nixbase32::encode(&self.digest); | ||||
|             let other_hash = nixbase32::encode(&other.digest); | ||||
|             let canonical_order = self_hash.cmp(&other_hash); | ||||
|             assert_eq!( | ||||
|                 order, canonical_order, | ||||
|                 "Ordering of nixbase32 differs, {:?} instead of {:?}:\n{:?}\n{:?}", | ||||
|                 order, canonical_order, self_hash, other_hash | ||||
|             ); | ||||
|         } | ||||
| 
 | ||||
|         order | ||||
|         self.as_ref().cmp(&other.as_ref()) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  | @ -198,6 +183,20 @@ impl<'a> From<&'a StorePath> for StorePathRef<'a> { | |||
|     } | ||||
| } | ||||
| 
 | ||||
| impl<'a> PartialOrd for StorePathRef<'a> { | ||||
|     fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> { | ||||
|         Some(self.cmp(other)) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| /// `StorePathRef`s are sorted by their reverse digest to match the sorting order
 | ||||
| /// of the nixbase32-encoded string.
 | ||||
| impl<'a> Ord for StorePathRef<'a> { | ||||
|     fn cmp(&self, other: &Self) -> std::cmp::Ordering { | ||||
|         self.digest.iter().rev().cmp(other.digest.iter().rev()) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| impl<'a> StorePathRef<'a> { | ||||
|     pub fn digest(&self) -> &[u8; DIGEST_SIZE] { | ||||
|         &self.digest | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue