From 06f95dd07ce691a1f12c8ec7fa5ad84858d81cd0 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 21 Nov 2007 13:49:59 +0000 Subject: [PATCH] * New primop `readFile' to get the contents of a file as a string. --- doc/manual/builtins.xml | 9 +++++++++ src/libexpr/primops.cc | 12 ++++++++++++ tests/lang/eval-okay-readfile.exp | 1 + tests/lang/eval-okay-readfile.nix | 1 + 4 files changed, 23 insertions(+) create mode 100644 tests/lang/eval-okay-readfile.exp create mode 100644 tests/lang/eval-okay-readfile.nix diff --git a/doc/manual/builtins.xml b/doc/manual/builtins.xml index b6c88619..4c8e3163 100644 --- a/doc/manual/builtins.xml +++ b/doc/manual/builtins.xml @@ -441,6 +441,15 @@ in config.someSetting --> + builtins.readFile + path + + Return the contents of the file + path as a string. + + + + removeAttrs attrs list diff --git a/src/libexpr/primops.cc b/src/libexpr/primops.cc index 2a96e25a..bb919057 100644 --- a/src/libexpr/primops.cc +++ b/src/libexpr/primops.cc @@ -622,6 +622,17 @@ static Expr prim_dirOf(EvalState & state, const ATermVector & args) } +/* Return the contents of a file as a string. */ +static Expr prim_readFile(EvalState & state, const ATermVector & args) +{ + PathSet context; + Path path = coerceToPath(state, args[0], context); + if (!context.empty()) + throw EvalError(format("string `%1%' cannot refer to other paths") % path); + return makeStr(readFile(path)); +} + + /************************************************************* * Creating files *************************************************************/ @@ -968,6 +979,7 @@ void EvalState::addPrimOps() addPrimOp("__pathExists", 1, prim_pathExists); addPrimOp("baseNameOf", 1, prim_baseNameOf); addPrimOp("dirOf", 1, prim_dirOf); + addPrimOp("__readFile", 1, prim_readFile); // Creating files addPrimOp("__toXML", 1, prim_toXML); diff --git a/tests/lang/eval-okay-readfile.exp b/tests/lang/eval-okay-readfile.exp new file mode 100644 index 00000000..979771c7 --- /dev/null +++ b/tests/lang/eval-okay-readfile.exp @@ -0,0 +1 @@ +Str("builtins.readFile ./eval-okay-readfile.nix\n",[]) diff --git a/tests/lang/eval-okay-readfile.nix b/tests/lang/eval-okay-readfile.nix new file mode 100644 index 00000000..82f7cb17 --- /dev/null +++ b/tests/lang/eval-okay-readfile.nix @@ -0,0 +1 @@ +builtins.readFile ./eval-okay-readfile.nix