aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2017-04-25 16:19:22 +0200
committerEelco Dolstra <edolstra@gmail.com>2017-04-25 16:19:22 +0200
commitc30330df6f67c81986dfb124631bc756c8e58c0d (patch)
treeae398eedf65b06cba340292893afce6a041e7299 /src
parentd48c973ece20875391bebde3c167d6e0cc1e666e (diff)
StorePathCommands: Build installables
So for instance "nix copy --to ... nixpkgs.hello" will build nixpkgs.hello first. It's debatable whether this is a good idea. It seems desirable for commands like "nix copy" but maybe not for commands like "nix path-info".
Diffstat (limited to 'src')
-rw-r--r--src/nix/command.cc12
-rw-r--r--src/nix/installables.cc11
-rw-r--r--src/nix/run.cc10
3 files changed, 13 insertions, 20 deletions
diff --git a/src/nix/command.cc b/src/nix/command.cc
index 2809a9b4f..a45f2888b 100644
--- a/src/nix/command.cc
+++ b/src/nix/command.cc
@@ -115,16 +115,8 @@ void StorePathsCommand::run(ref<Store> store)
}
else {
- for (auto & i : installables) {
- for (auto & path : i->toBuildable()) {
- if (isDerivation(path)) {
- Derivation drv = store->derivationFromPath(path);
- for (auto & output : drv.outputs)
- storePaths.push_back(output.second.path);
- } else
- storePaths.push_back(path);
- }
- }
+ for (auto & p : buildInstallables(store, false))
+ storePaths.push_back(p);
if (recursive) {
PathSet closure;
diff --git a/src/nix/installables.cc b/src/nix/installables.cc
index ff345c45d..57580049f 100644
--- a/src/nix/installables.cc
+++ b/src/nix/installables.cc
@@ -228,7 +228,16 @@ PathSet InstallablesCommand::buildInstallables(ref<Store> store, bool dryRun)
if (!dryRun)
store->buildPaths(buildables);
- return buildables;
+ PathSet outPaths;
+ for (auto & path : buildables)
+ if (isDerivation(path)) {
+ Derivation drv = store->derivationFromPath(path);
+ for (auto & output : drv.outputs)
+ outPaths.insert(output.second.path);
+ } else
+ outPaths.insert(path);
+
+ return outPaths;
}
ref<EvalState> InstallablesCommand::getEvalState()
diff --git a/src/nix/run.cc b/src/nix/run.cc
index a0ce56134..bcfa74eb5 100644
--- a/src/nix/run.cc
+++ b/src/nix/run.cc
@@ -30,7 +30,7 @@ struct CmdRun : InstallablesCommand
void run(ref<Store> store) override
{
- auto paths = buildInstallables(store, false);
+ auto outPaths = buildInstallables(store, false);
auto store2 = store.dynamic_pointer_cast<LocalStore>();
@@ -89,14 +89,6 @@ struct CmdRun : InstallablesCommand
#endif
}
- PathSet outPaths;
- for (auto & path : paths)
- if (isDerivation(path)) {
- Derivation drv = store->derivationFromPath(path);
- for (auto & output : drv.outputs)
- outPaths.insert(output.second.path);
- } else
- outPaths.insert(path);
auto unixPath = tokenizeString<Strings>(getEnv("PATH"), ":");
for (auto & path : outPaths)