feat(tvix/eval): coerce values to paths when importing

This enables the use of string paths (and, in the future,
derivations), as long as their string values represent an absolute
path.

Change-Id: I4b198efeb70415ed52f58bd1da6fa79a24dad14c
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6866
Reviewed-by: sterni <sternenseemann@systemli.org>
Tested-by: BuildkiteCI
This commit is contained in:
Vincent Ambo 2022-10-04 23:21:49 +03:00 committed by tazjin
parent 07e03498f2
commit 2478a6c5ba
2 changed files with 2 additions and 13 deletions

View file

@ -52,18 +52,7 @@ pub fn builtins_import(
"import",
&[true],
move |mut args: Vec<Value>, vm: &mut VM| {
let path = match args.pop().unwrap() {
Value::Path(path) => path,
Value::String(_) => {
return Err(ErrorKind::NotImplemented("importing from string-paths"))
}
other => {
return Err(ErrorKind::TypeError {
expected: "path or string",
actual: other.type_of(),
})
}
};
let path = super::coerce_value_to_path(&args.pop().unwrap(), vm)?;
let contents =
std::fs::read_to_string(&path).map_err(|err| ErrorKind::ReadFileError {

View file

@ -262,7 +262,7 @@ to a missing value in the attribute set(s) included via `with`."#,
ErrorKind::NotAnAbsolutePath(given) => {
format!(
"string {} doesn't represent an absolute path",
"string '{}' does not represent an absolute path",
given.to_string_lossy()
)
}