diff options
author | Eelco Dolstra <edolstra@gmail.com> | 2017-04-25T09·23+0200 |
---|---|---|
committer | Eelco Dolstra <edolstra@gmail.com> | 2017-04-25T09·23+0200 |
commit | 6267d748891b3c6e6a41b5bd1f6684ae8b88f31c (patch) | |
tree | e669d3f28ccb4682882e106799c6c27004801261 /src/nix/eval.cc | |
parent | bcecc990071fd36bb88c8fd29cb009ed4c04d6a2 (diff) |
Add "nix eval" command
This replaces "nix-instantiate --eval". The result is evaluated strictly since this seems more useful.
Diffstat (limited to 'src/nix/eval.cc')
-rw-r--r-- | src/nix/eval.cc | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/nix/eval.cc b/src/nix/eval.cc new file mode 100644 index 000000000000..7a6bf07c3535 --- /dev/null +++ b/src/nix/eval.cc @@ -0,0 +1,44 @@ +#include "command.hh" +#include "common-args.hh" +#include "installables.hh" +#include "shared.hh" +#include "store-api.hh" +#include "eval.hh" +#include "json.hh" +#include "value-to-json.hh" + +using namespace nix; + +struct CmdEval : MixJSON, MixInstallables +{ + std::string name() override + { + return "eval"; + } + + std::string description() override + { + return "evaluate a Nix expression"; + } + + void run(ref<Store> store) override + { + auto state = getEvalState(); + + auto jsonOut = json ? std::make_unique<JSONList>(std::cout) : nullptr; + + for (auto & i : installables) { + auto v = i->toValue(*state); + if (json) { + PathSet context; + auto jsonElem = jsonOut->placeholder(); + printValueAsJSON(*state, true, *v, jsonElem, context); + } else { + state->forceValueDeep(*v); + std::cout << *v << "\n"; + } + } + } +}; + +static RegisterCommand r1(make_ref<CmdEval>()); |