diff options
author | Eelco Dolstra <edolstra@gmail.com> | 2019-07-30T09·33+0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-07-30T09·33+0200 |
commit | 7680357ccc7e7759244528334df81ebb71f9123b (patch) | |
tree | 1a43e2906116d5ea3bcc0a39b5cd14673c191407 | |
parent | 41a52466854ab3a7d4adedc3777c0b0585ef79fe (diff) | |
parent | 89865144c3ba0162cd37bcbe49b3095e9bab4164 (diff) |
Merge pull request #3012 from basvandijk/fix-pathExists
Allow builtins.pathExists to check the existence of /nix/store paths
-rw-r--r-- | src/libexpr/primops.cc | 10 | ||||
-rw-r--r-- | tests/import-derivation.nix | 5 |
2 files changed, 12 insertions, 3 deletions
diff --git a/src/libexpr/primops.cc b/src/libexpr/primops.cc index 070e72f3a966..350dba47409e 100644 --- a/src/libexpr/primops.cc +++ b/src/libexpr/primops.cc @@ -832,8 +832,14 @@ static void prim_pathExists(EvalState & state, const Pos & pos, Value * * args, { PathSet context; Path path = state.coerceToPath(pos, *args[0], context); - if (!context.empty()) - throw EvalError(format("string '%1%' cannot refer to other paths, at %2%") % path % pos); + try { + state.realiseContext(context); + } catch (InvalidPathError & e) { + throw EvalError(format( + "cannot check the existence of '%1%', since path '%2%' is not valid, at %3%") + % path % e.path % pos); + } + try { mkBool(v, pathExists(state.checkSourcePath(path))); } catch (SysError & e) { diff --git a/tests/import-derivation.nix b/tests/import-derivation.nix index 91adcd288f6e..44fa9a45d7e1 100644 --- a/tests/import-derivation.nix +++ b/tests/import-derivation.nix @@ -10,7 +10,10 @@ let ''; }; - value = import bar; + value = + # Test that pathExists can check the existence of /nix/store paths + assert builtins.pathExists bar; + import bar; in |