fix(tvix/eval): catchable-aware builtins
A bunch of operations in Tvix are not aware of catchable values and does not propagate them. In the meantime, as we wait for a better solution, we just offer this commit for moving the needle. Change-Id: Ic3f0e1550126b0847b597dfc1402c35e0eeef469 Reviewed-on: https://cl.tvl.fyi/c/depot/+/10473 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
This commit is contained in:
parent
37cc88897e
commit
2750e1e640
6 changed files with 328 additions and 41 deletions
|
|
@ -132,6 +132,10 @@ pub(crate) mod derivation_builtins {
|
|||
|
||||
#[builtin("placeholder")]
|
||||
async fn builtin_placeholder(co: GenCo, input: Value) -> Result<Value, ErrorKind> {
|
||||
if input.is_catchable() {
|
||||
return Ok(input);
|
||||
}
|
||||
|
||||
let placeholder = hash_placeholder(
|
||||
input
|
||||
.to_str()
|
||||
|
|
@ -152,11 +156,18 @@ pub(crate) mod derivation_builtins {
|
|||
co: GenCo,
|
||||
input: Value,
|
||||
) -> Result<Value, ErrorKind> {
|
||||
if input.is_catchable() {
|
||||
return Ok(input);
|
||||
}
|
||||
|
||||
let input = input.to_attrs()?;
|
||||
let name = generators::request_force(&co, input.select_required("name")?.clone())
|
||||
.await
|
||||
.to_str()
|
||||
.context("determining derivation name")?;
|
||||
let name = generators::request_force(&co, input.select_required("name")?.clone()).await;
|
||||
|
||||
if name.is_catchable() {
|
||||
return Ok(name);
|
||||
}
|
||||
|
||||
let name = name.to_str().context("determining derivation name")?;
|
||||
|
||||
if name.is_empty() {
|
||||
return Err(ErrorKind::Abort("derivation has empty name".to_string()));
|
||||
|
|
@ -480,6 +491,14 @@ pub(crate) mod derivation_builtins {
|
|||
|
||||
#[builtin("toFile")]
|
||||
async fn builtin_to_file(co: GenCo, name: Value, content: Value) -> Result<Value, ErrorKind> {
|
||||
if name.is_catchable() {
|
||||
return Ok(name);
|
||||
}
|
||||
|
||||
if content.is_catchable() {
|
||||
return Ok(content);
|
||||
}
|
||||
|
||||
let name = name
|
||||
.to_str()
|
||||
.context("evaluating the `name` parameter of builtins.toFile")?;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue