Merge changes I07d2da41,I864d7340,I86612c64 into main

* changes:
  Change error messages about 'invalid paths' to 'path does not exist'.
  Add a clearer error message for InvalidPathError during evaluation
  Harmonise the Store::queryPathInfoUncached interface
This commit is contained in:
julia
2024-06-16 04:29:13 +00:00
committed by Gerrit Code Review
9 changed files with 55 additions and 25 deletions
+5 -1
View File
@@ -47,12 +47,16 @@ MakeError(MissingArgumentError, EvalError);
MakeError(RestrictedPathError, Error);
MakeError(InfiniteRecursionError, EvalError);
/**
* Represents an exception due to an invalid path; that is, it does not exist.
* It corresponds to `!Store::validPath()`.
*/
struct InvalidPathError : public EvalError
{
public:
Path path;
InvalidPathError(EvalState & state, const Path & path)
: EvalError(state, "path '%s' is not valid", path)
: EvalError(state, "path '%s' did not exist in the store during evaluation", path)
{
}
};
+2 -1
View File
@@ -383,7 +383,8 @@ void prim_exec(EvalState & state, const PosIdx pos, Value * * args, Value & v)
try {
auto _ = state.realiseContext(context); // FIXME: Handle CA derivations
} catch (InvalidPathError & e) {
state.error<EvalError>("cannot execute '%1%', since path '%2%' is not valid", program, e.path).atPos(pos).debugThrow();
e.addTrace(state.positions[pos], "while realising the context for builtins.exec");
throw;
}
auto output = runProgram(program, true, commandArgs);