refactor(nix-compat/store_path): make digest and name private
Change-Id: I62cbe883afcf3dd0c8d4de0e3b845069eb750c97 Reviewed-on: https://cl.tvl.fyi/c/depot/+/9855 Reviewed-by: flokli <flokli@flokli.de> Tested-by: BuildkiteCI
This commit is contained in:
parent
36f2b69de5
commit
7f7c1ae7be
6 changed files with 27 additions and 21 deletions
|
@ -61,10 +61,10 @@ impl TvixStoreIO {
|
|||
sub_path: &Path,
|
||||
) -> Result<Option<Node>, io::Error> {
|
||||
let path_info_service = self.path_info_service.clone();
|
||||
let digest = store_path.digest;
|
||||
let task = self
|
||||
.tokio_handle
|
||||
.spawn(async move { path_info_service.get(digest).await });
|
||||
let task = self.tokio_handle.spawn({
|
||||
let digest = *store_path.digest();
|
||||
async move { path_info_service.get(digest).await }
|
||||
});
|
||||
let path_info = match self.tokio_handle.block_on(task).unwrap()? {
|
||||
// If there's no PathInfo found, early exit
|
||||
None => return Ok(None),
|
||||
|
|
|
@ -52,8 +52,18 @@ pub enum Error {
|
|||
/// path.
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
|
||||
pub struct StorePath {
|
||||
pub digest: [u8; DIGEST_SIZE],
|
||||
pub name: String,
|
||||
digest: [u8; DIGEST_SIZE],
|
||||
name: String,
|
||||
}
|
||||
|
||||
impl StorePath {
|
||||
pub fn digest(&self) -> &[u8; DIGEST_SIZE] {
|
||||
&self.digest
|
||||
}
|
||||
|
||||
pub fn name(&self) -> &str {
|
||||
self.name.as_ref()
|
||||
}
|
||||
}
|
||||
|
||||
impl PartialOrd for StorePath {
|
||||
|
@ -187,14 +197,6 @@ pub(crate) fn validate_name(s: &[u8]) -> Result<String, Error> {
|
|||
Ok(String::from_utf8(s.to_vec()).unwrap())
|
||||
}
|
||||
|
||||
/// Ensures the StorePath fulfils the requirements for store paths.
|
||||
/// Useful when populating the struct manually instead of parsing.
|
||||
pub fn validate(s: &StorePath) -> Result<(), Error> {
|
||||
validate_name(s.name.as_bytes())?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
impl fmt::Display for StorePath {
|
||||
/// The string representation of a store path starts with a digest (20
|
||||
/// bytes), [crate::nixbase32]-encoded, followed by a `-`,
|
||||
|
|
|
@ -169,9 +169,10 @@ impl TvixStoreFs {
|
|||
} else {
|
||||
// If we don't have it, look it up in PathInfoService.
|
||||
let path_info_service = self.path_info_service.clone();
|
||||
let task = self
|
||||
.tokio_handle
|
||||
.spawn(async move { path_info_service.get(store_path.digest).await });
|
||||
let task = self.tokio_handle.spawn({
|
||||
let digest = *store_path.digest();
|
||||
async move { path_info_service.get(digest).await }
|
||||
});
|
||||
match self.tokio_handle.block_on(task).unwrap()? {
|
||||
// the pathinfo doesn't exist, so the file doesn't exist.
|
||||
None => Ok(None),
|
||||
|
|
|
@ -74,7 +74,7 @@ impl PathInfoService for MemoryPathInfoService {
|
|||
// This overwrites existing PathInfo objects.
|
||||
Ok(nix_path) => {
|
||||
let mut db = self.db.write().unwrap();
|
||||
db.insert(nix_path.digest, path_info.clone());
|
||||
db.insert(*nix_path.digest(), path_info.clone());
|
||||
|
||||
Ok(path_info)
|
||||
}
|
||||
|
|
|
@ -119,7 +119,10 @@ impl PathInfoService for SledPathInfoService {
|
|||
))),
|
||||
// In case the PathInfo is valid, and we were able to extract a NixPath, store it in the database.
|
||||
// This overwrites existing PathInfo objects.
|
||||
Ok(nix_path) => match self.db.insert(nix_path.digest, path_info.encode_to_vec()) {
|
||||
Ok(nix_path) => match self
|
||||
.db
|
||||
.insert(*nix_path.digest(), path_info.encode_to_vec())
|
||||
{
|
||||
Ok(_) => Ok(path_info),
|
||||
Err(e) => {
|
||||
warn!("failed to insert PathInfo: {}", e);
|
||||
|
|
|
@ -130,12 +130,12 @@ impl PathInfo {
|
|||
// This is safe, because we ensured the proper length earlier already.
|
||||
let reference_digest = self.references[i].to_vec().try_into().unwrap();
|
||||
|
||||
if reference_names_store_path.digest != reference_digest {
|
||||
if reference_names_store_path.digest() != &reference_digest {
|
||||
return Err(
|
||||
ValidatePathInfoError::InconsistentNarinfoReferenceNameDigest(
|
||||
i,
|
||||
reference_digest,
|
||||
reference_names_store_path.digest,
|
||||
*reference_names_store_path.digest(),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue