aboutsummaryrefslogtreecommitdiff
path: root/src/nix/installables.cc
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2017-09-25 13:43:35 +0200
committerEelco Dolstra <edolstra@gmail.com>2017-09-25 13:43:35 +0200
commite8d6ee7c1b90a2fe6d824f1a875acc56799ae6e2 (patch)
treebbb6f9c3443aa2b25a630a84da5e3bd864c92c0f /src/nix/installables.cc
parente350671737fc7bb1093cc89cc89ec9884dbbb6c2 (diff)
Add "nix show-derivation"
This debug command prints a store derivation in JSON format. For example: $ nix show-derivation nixpkgs.hello { "/nix/store/ayjwpwwiyy04nh9z71rsdgd3q7bra7ch-hello-2.10.drv": { "outputs": { "out": { "path": "/nix/store/w5w4v29ql0qwqhczkdxs94ix2lh7ibgs-hello-2.10" } }, "inputSrcs": [ "/nix/store/9krlzvny65gdc8s7kpb6lkx8cd02c25b-default-builder.sh" ], "inputDrvs": { "/nix/store/13839aqdf6x4k3b785rw5f2l7857l6y3-bash-4.4-p12.drv": [ "out" ], "/nix/store/vgdx7fdc7d4iirmnwj2py1nrvr5qwzj7-hello-2.10.tar.gz.drv": [ "out" ], "/nix/store/x3kkd0vsqfflbvwf1055l9mr39bg0ms0-stdenv.drv": [ "out" ] }, "platform": "x86_64-linux", "builder": "/nix/store/qp5fw57d38bd1n07ss4zxh88zg67c3vg-bash-4.4-p12/bin/bash", "args": [ "-e", "/nix/store/9krlzvny65gdc8s7kpb6lkx8cd02c25b-default-builder.sh" ], "env": { "buildInputs": "", "builder": "/nix/store/qp5fw57d38bd1n07ss4zxh88zg67c3vg-bash-4.4-p12/bin/bash", "configureFlags": "", "doCheck": "1", "name": "hello-2.10", "nativeBuildInputs": "", "out": "/nix/store/w5w4v29ql0qwqhczkdxs94ix2lh7ibgs-hello-2.10", "propagatedBuildInputs": "", "propagatedNativeBuildInputs": "", "src": "/nix/store/3x7dwzq014bblazs7kq20p9hyzz0qh8g-hello-2.10.tar.gz", "stdenv": "/nix/store/6zngq1rdh0ans9qyckqimqibgnlvlfrm-stdenv", "system": "x86_64-linux" } } } This removes the need for pp-aterm.
Diffstat (limited to 'src/nix/installables.cc')
-rw-r--r--src/nix/installables.cc24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/nix/installables.cc b/src/nix/installables.cc
index 76df05fa3..b60f71b14 100644
--- a/src/nix/installables.cc
+++ b/src/nix/installables.cc
@@ -303,6 +303,30 @@ Path toStorePath(ref<Store> store, RealiseMode mode,
return *paths.begin();
}
+PathSet toDerivations(ref<Store> store,
+ std::vector<std::shared_ptr<Installable>> installables, bool useDeriver)
+{
+ PathSet drvPaths;
+
+ for (auto & i : installables)
+ for (auto & b : i->toBuildables()) {
+ if (b.drvPath.empty()) {
+ if (!useDeriver)
+ throw Error("argument '%s' did not evaluate to a derivation", i->what());
+ for (auto & output : b.outputs) {
+ auto derivers = store->queryValidDerivers(output.second);
+ if (derivers.empty())
+ throw Error("'%s' does not have a known deriver", i->what());
+ // FIXME: use all derivers?
+ drvPaths.insert(*derivers.begin());
+ }
+ } else
+ drvPaths.insert(b.drvPath);
+ }
+
+ return drvPaths;
+}
+
void InstallablesCommand::prepare()
{
installables = parseInstallables(*this, getStore(), _installables, useDefaultInstallables());