diff options
author | Florian Klink <flokli@flokli.de> | 2023-10-17T22·27+0100 |
---|---|---|
committer | clbot <clbot@tvl.fyi> | 2023-10-22T17·04+0000 |
commit | 9118dc8a5056ad0cdb91a0688f50ac5d6e28a1ec (patch) | |
tree | 5d705773016676896bfe35a2da17581ba4827e61 /tvix/store/src/proto | |
parent | ba9a62ca9f82f00aec1b8ad163252476cbb5322a (diff) |
refactor(tvix/store): move deriver field into narinfo submessage r/6869
This information is present in the .narinfo files, it should have gone there. Change-Id: Ib43d0cf30c2795bf1fe77c46646174353ade0458 Reviewed-on: https://cl.tvl.fyi/c/depot/+/9794 Autosubmit: flokli <flokli@flokli.de> Reviewed-by: Connor Brewster <cbrewster@hey.com> Tested-by: BuildkiteCI
Diffstat (limited to 'tvix/store/src/proto')
-rw-r--r-- | tvix/store/src/proto/mod.rs | 23 | ||||
-rw-r--r-- | tvix/store/src/proto/tests/pathinfo.rs | 10 |
2 files changed, 19 insertions, 14 deletions
diff --git a/tvix/store/src/proto/mod.rs b/tvix/store/src/proto/mod.rs index a982d71f8886..4b5bf4f59479 100644 --- a/tvix/store/src/proto/mod.rs +++ b/tvix/store/src/proto/mod.rs @@ -140,6 +140,19 @@ impl PathInfo { ); } } + + // If the Deriver field is populated, ensure it parses to a + // [store_path::StorePath]. + // We can't check for it to *not* end with .drv, as the .drv files produced by + // recursive Nix end with multiple .drv suffixes, and only one is popped when + // converting to this field. + if let Some(deriver) = &narinfo.deriver { + store_path::StorePath::from_name_and_digest( + deriver.name.clone(), + &deriver.digest, + ) + .map_err(ValidatePathInfoError::InvalidDeriverField)?; + } } } @@ -156,16 +169,6 @@ impl PathInfo { } }; - // If the Deriver field is populated, ensure it parses to a - // [store_path::StorePath]. - // We can't check for it to *not* end with .drv, as the .drv files produced by - // recursive Nix end with multiple .drv suffixes, and only one is popped when - // converting to this field. - if let Some(deriver) = &self.deriver { - store_path::StorePath::from_name_and_digest(deriver.name.clone(), &deriver.digest) - .map_err(ValidatePathInfoError::InvalidDeriverField)?; - } - // return the root nix path Ok(root_nix_path) } diff --git a/tvix/store/src/proto/tests/pathinfo.rs b/tvix/store/src/proto/tests/pathinfo.rs index 03094ed734ce..392d5d8127b4 100644 --- a/tvix/store/src/proto/tests/pathinfo.rs +++ b/tvix/store/src/proto/tests/pathinfo.rs @@ -266,10 +266,11 @@ fn validate_symlink_target_null_byte_invalid() { /// Create a PathInfo with a correct deriver field and ensure it succeeds. #[test] fn validate_valid_deriver() { - let mut path_info = PATH_INFO_WITHOUT_NARINFO.clone(); + let mut path_info = PATH_INFO_WITH_NARINFO.clone(); // add a valid deriver - path_info.deriver = Some(crate::proto::StorePath { + let narinfo = path_info.narinfo.as_mut().unwrap(); + narinfo.deriver = Some(crate::proto::StorePath { name: "foo".to_string(), digest: DUMMY_OUTPUT_HASH.clone(), }); @@ -280,10 +281,11 @@ fn validate_valid_deriver() { /// Create a PathInfo with a broken deriver field and ensure it fails. #[test] fn validate_invalid_deriver() { - let mut path_info = PATH_INFO_WITHOUT_NARINFO.clone(); + let mut path_info = PATH_INFO_WITH_NARINFO.clone(); // add a broken deriver (invalid digest) - path_info.deriver = Some(crate::proto::StorePath { + let narinfo = path_info.narinfo.as_mut().unwrap(); + narinfo.deriver = Some(crate::proto::StorePath { name: "foo".to_string(), digest: vec![].into(), }); |