diff options
author | Adam Joseph <adam@westernsemico.com> | 2022-12-12T18·33+0300 |
---|---|---|
committer | tazjin <tazjin@tvl.su> | 2022-12-21T22·59+0000 |
commit | 947a56c4b6c5d5ed4f25f229f5de6afde564bbf9 (patch) | |
tree | d078dba7958ebea8fbec20a2150c530d3291e322 /tvix | |
parent | 4cb9ada0df188ae8484965749a30a2a699a3102e (diff) |
feat(tvix/eval): builtins.storeDir r/5465
Returns the store directory through EvalIO::store_dir. Note that this is _optional_ in Tvix, as an evaluation can occur in a context where there simply is no store directory. In those contexts, `builtins.storeDir` returns `null` in Tvix. This would only happen in contexts like Tvixbolt (or completely unrelated use-cases) in practice. Co-Authored-By: Vincent Ambo <tazjin@tvl.su> Change-Id: I5a752c7e89b2f75bd7efb082dbfa5b25e3b1ff3b Reviewed-on: https://cl.tvl.fyi/c/depot/+/7452 Autosubmit: Adam Joseph <adam@westernsemico.com> Tested-by: BuildkiteCI Reviewed-by: grfn <grfn@gws.fyi>
Diffstat (limited to 'tvix')
-rw-r--r-- | tvix/eval/src/builtins/impure.rs | 12 | ||||
-rw-r--r-- | tvix/eval/src/io.rs | 6 |
2 files changed, 17 insertions, 1 deletions
diff --git a/tvix/eval/src/builtins/impure.rs b/tvix/eval/src/builtins/impure.rs index 01a09393720d..904706dc65d9 100644 --- a/tvix/eval/src/builtins/impure.rs +++ b/tvix/eval/src/builtins/impure.rs @@ -4,7 +4,7 @@ use smol_str::SmolStr; use std::{ collections::BTreeMap, env, - rc::Weak, + rc::{Rc, Weak}, time::{SystemTime, UNIX_EPOCH}, }; @@ -74,6 +74,16 @@ pub(super) fn builtins() -> BTreeMap<&'static str, Value> { .map(|b| (b.name(), Value::Builtin(b))) .collect(); + map.insert( + "storeDir", + Value::Thunk(Thunk::new_suspended_native(Rc::new(Box::new( + |vm: &mut VM| match vm.io().store_dir() { + None => Ok(Value::Null), + Some(dir) => Ok(Value::String(dir.into())), + }, + )))), + ); + // currentTime pins the time at which evaluation was started { let seconds = match SystemTime::now().duration_since(UNIX_EPOCH) { diff --git a/tvix/eval/src/io.rs b/tvix/eval/src/io.rs index 3215e5a7ddb7..4e7404ef9c53 100644 --- a/tvix/eval/src/io.rs +++ b/tvix/eval/src/io.rs @@ -41,6 +41,12 @@ pub trait EvalIO { /// Read the directory at the specified path and return the names /// of its entries associated with their [`FileType`]. fn read_dir(&self, path: PathBuf) -> Result<Vec<(SmolStr, FileType)>, ErrorKind>; + + /// Returns the root of the store directory, if such a thing + /// exists in the evaluation context. + fn store_dir(&self) -> Option<String> { + None + } } /// Implementation of [`EvalIO`] that simply uses the equivalent |