forked from lix-project/lix
* Primop `toPath' to convert a string to a path.
* Primop `pathExists' to check for path existence.
This commit is contained in:
parent
e47e0c2dbe
commit
0e705391db
|
@ -49,13 +49,6 @@ static Expr primImport(EvalState & state, const ATermVector & args)
|
||||||
if (matchPath(arg, arg2))
|
if (matchPath(arg, arg2))
|
||||||
path = aterm2String(arg2);
|
path = aterm2String(arg2);
|
||||||
|
|
||||||
else if (matchStr(arg, arg2)) {
|
|
||||||
path = aterm2String(arg2);
|
|
||||||
if (path == "" || path[0] != '/')
|
|
||||||
throw EvalError("`import' requires an absolute path name");
|
|
||||||
path = canonPath(path);
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (matchAttrs(arg, es)) {
|
else if (matchAttrs(arg, es)) {
|
||||||
Expr a = queryAttr(arg, "type");
|
Expr a = queryAttr(arg, "type");
|
||||||
|
|
||||||
|
@ -80,6 +73,17 @@ static Expr primImport(EvalState & state, const ATermVector & args)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static Expr primPathExists(EvalState & state, const ATermVector & args)
|
||||||
|
{
|
||||||
|
Expr arg = evalExpr(state, args[0]), arg2;
|
||||||
|
|
||||||
|
if (!matchPath(arg, arg2))
|
||||||
|
throw TypeError("`pathExists' requires a path as its argument");
|
||||||
|
|
||||||
|
return makeBool(pathExists(aterm2String(arg2)));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void flattenList(EvalState & state, Expr e, ATermList & result)
|
static void flattenList(EvalState & state, Expr e, ATermList & result)
|
||||||
{
|
{
|
||||||
ATermList es;
|
ATermList es;
|
||||||
|
@ -476,6 +480,19 @@ static Expr primToString(EvalState & state, const ATermVector & args)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Convert the argument to a path. */
|
||||||
|
static Expr primToPath(EvalState & state, const ATermVector & args)
|
||||||
|
{
|
||||||
|
Expr e = evalExpr(state, args[0]);
|
||||||
|
ATerm t = coerceToString(e);
|
||||||
|
if (!t) throw TypeError(format("cannot coerce %1% to a path in `toPath'") % showType(e));
|
||||||
|
Path path = aterm2String(t);
|
||||||
|
if (path == "" || path[0] != '/')
|
||||||
|
throw EvalError("string doesn't represent an absolute path in `toPath'");
|
||||||
|
return makePath(toATerm(canonPath(path)));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Convert the argument (which can be any Nix expression) to an XML
|
/* Convert the argument (which can be any Nix expression) to an XML
|
||||||
representation returned in a string. Not all Nix expressions can
|
representation returned in a string. Not all Nix expressions can
|
||||||
be sensibly or completely represented (e.g., functions). */
|
be sensibly or completely represented (e.g., functions). */
|
||||||
|
@ -809,11 +826,13 @@ void EvalState::addPrimOps()
|
||||||
addPrimOp("__currentTime", 0, primCurrentTime);
|
addPrimOp("__currentTime", 0, primCurrentTime);
|
||||||
|
|
||||||
addPrimOp("import", 1, primImport);
|
addPrimOp("import", 1, primImport);
|
||||||
|
addPrimOp("__pathExists", 1, primPathExists);
|
||||||
addPrimOp("derivation!", 1, primDerivationStrict);
|
addPrimOp("derivation!", 1, primDerivationStrict);
|
||||||
addPrimOp("derivation", 1, primDerivationLazy);
|
addPrimOp("derivation", 1, primDerivationLazy);
|
||||||
addPrimOp("baseNameOf", 1, primBaseNameOf);
|
addPrimOp("baseNameOf", 1, primBaseNameOf);
|
||||||
addPrimOp("dirOf", 1, primDirOf);
|
addPrimOp("dirOf", 1, primDirOf);
|
||||||
addPrimOp("toString", 1, primToString);
|
addPrimOp("toString", 1, primToString);
|
||||||
|
addPrimOp("__toPath", 1, primToPath);
|
||||||
addPrimOp("__toXML", 1, primToXML);
|
addPrimOp("__toXML", 1, primToXML);
|
||||||
addPrimOp("__toFile", 1, primToFile);
|
addPrimOp("__toFile", 1, primToFile);
|
||||||
addPrimOp("isNull", 1, primIsNull);
|
addPrimOp("isNull", 1, primIsNull);
|
||||||
|
|
1
tests/lang/eval-okay-pathexists.exp
Normal file
1
tests/lang/eval-okay-pathexists.exp
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Bool(True)
|
3
tests/lang/eval-okay-pathexists.nix
Normal file
3
tests/lang/eval-okay-pathexists.nix
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
builtins.pathExists (builtins.toPath ./lib.nix)
|
||||||
|
&& builtins.pathExists ./lib.nix
|
||||||
|
&& !builtins.pathExists ./bla.nix
|
Loading…
Reference in a new issue