From 9ebe02a81e6ecb15abaa695c26b3773ce46ef155 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Tue, 12 Oct 2021 15:27:02 +0200 Subject: [PATCH] nix repl: Don't build in a child process Fixes #5356. This is a bit risky due to interrupts, but we have to deal with those anyway (#5353). --- src/nix/repl.cc | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/nix/repl.cc b/src/nix/repl.cc index c1233ab46..fb33fc23e 100644 --- a/src/nix/repl.cc +++ b/src/nix/repl.cc @@ -498,17 +498,11 @@ bool NixRepl::processLine(string line) Path drvPathRaw = state->store->printStorePath(drvPath); if (command == ":b") { - /* We could do the build in this process using buildPaths(), - but doing it in a child makes it easier to recover from - problems / SIGINT. */ - try { - runNix("nix", {"build", "--no-link", drvPathRaw}); - auto drv = state->store->readDerivation(drvPath); - std::cout << std::endl << "this derivation produced the following outputs:" << std::endl; - for (auto & i : drv.outputsAndOptPaths(*state->store)) - std::cout << fmt(" %s -> %s\n", i.first, state->store->printStorePath(*i.second.second)); - } catch (ExecError &) { - } + state->store->buildPaths({DerivedPath::Built{drvPath}}); + auto drv = state->store->readDerivation(drvPath); + logger->cout("\nThis derivation produced the following outputs:"); + for (auto & i : drv.outputsAndOptPaths(*state->store)) + logger->cout(" %s -> %s", i.first, state->store->printStorePath(*i.second.second)); } else if (command == ":i") { runNix("nix-env", {"-i", drvPathRaw}); } else {