feat(tvix/nix-compat): have StorePath accept bytes
The primary constructor for this is now from_bytes, from_string is simply calling .as_bytes() on the string, passing it along. The InvalidName error now contains a Vec<u8>, to encode the invalid name (which might not be a string anymore). from_absolute_path now accepts a &[u8] (even though we might want to make this a OSString of some sort). StorePath::validate_name has been degraded to a pub(crate) function. It's still used in src/derivation, even though it probably shouldn't at all - that cleanup is left for cl/8412 though. Change-Id: I6b4e62a6fa5c4bec13b535279e73444f0b83ad35 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8973 Autosubmit: flokli <flokli@flokli.de> Tested-by: BuildkiteCI Reviewed-by: raitobezarius <tvl@lahfa.xyz>
This commit is contained in:
parent
5364fcb127
commit
42dc18353d
8 changed files with 84 additions and 68 deletions
|
|
@ -27,7 +27,7 @@ impl Output {
|
|||
}
|
||||
}
|
||||
if validate_output_paths {
|
||||
if let Err(e) = StorePath::from_absolute_path(&self.path) {
|
||||
if let Err(e) = StorePath::from_absolute_path(self.path.as_bytes()) {
|
||||
return Err(OutputError::InvalidOutputPath(self.path.to_string(), e));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ use std::collections::BTreeSet;
|
|||
use std::fs::File;
|
||||
use std::io::Read;
|
||||
use std::path::Path;
|
||||
use std::str::FromStr;
|
||||
use test_case::test_case;
|
||||
use test_generator::test_resources;
|
||||
|
||||
|
|
@ -67,7 +68,7 @@ fn derivation_path(name: &str, expected_path: &str) {
|
|||
|
||||
assert_eq!(
|
||||
derivation.calculate_derivation_path(name).unwrap(),
|
||||
StorePath::from_string(expected_path).unwrap()
|
||||
StorePath::from_str(expected_path).unwrap()
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -307,7 +308,7 @@ fn output_path_construction() {
|
|||
assert_eq!(foo_drv_expected, foo_drv);
|
||||
|
||||
assert_eq!(
|
||||
StorePath::from_string("4wvvbi4jwn0prsdxb7vs673qa5h9gr7x-foo.drv").expect("must succeed"),
|
||||
StorePath::from_str("4wvvbi4jwn0prsdxb7vs673qa5h9gr7x-foo.drv").expect("must succeed"),
|
||||
foo_drv
|
||||
.calculate_derivation_path("foo")
|
||||
.expect("must succeed")
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
use crate::derivation::{Derivation, DerivationError};
|
||||
use crate::store_path::StorePath;
|
||||
use crate::store_path::{self, StorePath};
|
||||
|
||||
impl Derivation {
|
||||
/// validate ensures a Derivation struct is properly populated,
|
||||
|
|
@ -26,10 +26,10 @@ impl Derivation {
|
|||
// meaning.
|
||||
//
|
||||
// Other output names that don't match the name restrictions from
|
||||
// [StorePath] will fail the [StorePath::validate_name] check.
|
||||
// [StorePath] will fail the [store_path::validate_name] check.
|
||||
if output_name.is_empty()
|
||||
|| output_name == "drv"
|
||||
|| StorePath::validate_name(output_name).is_err()
|
||||
|| store_path::validate_name(output_name.as_bytes()).is_err()
|
||||
{
|
||||
return Err(DerivationError::InvalidOutputName(output_name.to_string()));
|
||||
}
|
||||
|
|
@ -55,7 +55,7 @@ impl Derivation {
|
|||
// Validate all input_derivations
|
||||
for (input_derivation_path, output_names) in &self.input_derivations {
|
||||
// Validate input_derivation_path
|
||||
if let Err(e) = StorePath::from_absolute_path(input_derivation_path) {
|
||||
if let Err(e) = StorePath::from_absolute_path(input_derivation_path.as_bytes()) {
|
||||
return Err(DerivationError::InvalidInputDerivationPath(
|
||||
input_derivation_path.to_string(),
|
||||
e,
|
||||
|
|
@ -86,7 +86,7 @@ impl Derivation {
|
|||
// [StorePath] will fail the [StorePath::validate_name] check.
|
||||
if output_name.is_empty()
|
||||
|| output_name == "drv"
|
||||
|| StorePath::validate_name(output_name).is_err()
|
||||
|| store_path::validate_name(output_name.as_bytes()).is_err()
|
||||
{
|
||||
return Err(DerivationError::InvalidInputDerivationOutputName(
|
||||
input_derivation_path.to_string(),
|
||||
|
|
@ -98,7 +98,7 @@ impl Derivation {
|
|||
|
||||
// Validate all input_sources
|
||||
for input_source in self.input_sources.iter() {
|
||||
if let Err(e) = StorePath::from_absolute_path(input_source) {
|
||||
if let Err(e) = StorePath::from_absolute_path(input_source.as_bytes()) {
|
||||
return Err(DerivationError::InvalidInputSourcesPath(
|
||||
input_source.to_string(),
|
||||
e,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue