From 6267d748891b3c6e6a41b5bd1f6684ae8b88f31c Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Tue, 25 Apr 2017 11:23:47 +0200 Subject: [PATCH] Add "nix eval" command This replaces "nix-instantiate --eval". The result is evaluated strictly since this seems more useful. --- src/nix/eval.cc | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/nix/eval.cc diff --git a/src/nix/eval.cc b/src/nix/eval.cc new file mode 100644 index 000000000..7a6bf07c3 --- /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) override + { + auto state = getEvalState(); + + auto jsonOut = json ? std::make_unique(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());