fix(tvix/eval): use realpaths for import cache

I've noticed this behavior when writing the admittedly cursed test case
included in this CL. Alternatively we could use some sort of machinery
using `builtins.trace`, but I don't think we capture stderr anywhere.

I've elected to put this into the eval cache itself while C++ Nix does
it in builtins.import already, namely via `realisePath`. We don't have
an equivalent for this yet, since we don't support any kind of IfD, but
we could revise that later. In any case, it seems good to encapsulate
`ImportCache` in this way, as it'll also allow using file hashes as
identifiers, for example.

C++ Nix also does our equivalent of canon_path in `builtins.import`
which we still don't, but I suspect it hardly makes a difference.

Change-Id: I05004737ca2458a4c67359d9e7d9a2f2154a0a0f
Reviewed-on: https://cl.tvl.fyi/c/depot/+/8839
Autosubmit: sterni <sternenseemann@systemli.org>
Reviewed-by: tazjin <tazjin@tvl.su>
Tested-by: BuildkiteCI
This commit is contained in:
sterni 2023-06-20 16:21:26 +02:00 committed by clbot
parent 399d23eaf6
commit 66047063e0
8 changed files with 51 additions and 3 deletions

View file

@ -0,0 +1 @@
[ true true false false true ]

View file

@ -0,0 +1,7 @@
[
(import ./observable-eval-cache1.nix == import ./observable-eval-cache1.nix)
(import ./observable-eval-cache1.nix == import ./observable-eval-cache2.nix)
(import ./observable-eval-cache1.nix == import ./observable-eval-cache3.nix)
(import ./observable-eval-cache2.nix == import ./observable-eval-cache3.nix)
(import ./observable-eval-cache3.nix == import ./observable-eval-cache3.nix)
]

View file

@ -0,0 +1 @@
let id = x: x; in { inherit id; }

View file

@ -0,0 +1 @@
observable-eval-cache1.nix

View file

@ -0,0 +1 @@
let id = x: x; in { inherit id; }