diff options
author | Eelco Dolstra <edolstra@gmail.com> | 2017-04-25 16:19:22 +0200 |
---|---|---|
committer | Eelco Dolstra <edolstra@gmail.com> | 2017-04-25 16:19:22 +0200 |
commit | c30330df6f67c81986dfb124631bc756c8e58c0d (patch) | |
tree | ae398eedf65b06cba340292893afce6a041e7299 /src | |
parent | d48c973ece20875391bebde3c167d6e0cc1e666e (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.cc | 12 | ||||
-rw-r--r-- | src/nix/installables.cc | 11 | ||||
-rw-r--r-- | src/nix/run.cc | 10 |
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) |