aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2020-02-18 19:26:11 +0100
committerEelco Dolstra <edolstra@gmail.com>2020-02-18 19:26:11 +0100
commit1351101c2875982557fd8ed6ccbe19a4df9d613b (patch)
tree411092227525909c4dc052a6cc652d109a033b71 /src
parent8f9dcfc67175992dbfe8e5cfb10b8716dcad89a8 (diff)
nix eval-hydra-jobs: Check aggregate jobs in --dry-run mode
Diffstat (limited to 'src')
-rw-r--r--src/nix/eval-hydra-jobs.cc57
1 files changed, 34 insertions, 23 deletions
diff --git a/src/nix/eval-hydra-jobs.cc b/src/nix/eval-hydra-jobs.cc
index b04e6df7b..57edfc70c 100644
--- a/src/nix/eval-hydra-jobs.cc
+++ b/src/nix/eval-hydra-jobs.cc
@@ -361,32 +361,43 @@ struct CmdEvalHydraJobs : MixJSON, MixDryRun, InstallableCommand
auto & job = i.value();
auto named = job.find("namedConstituents");
- if (named == job.end() || dryRun) continue;
-
- std::string drvPath = job["drvPath"];
- auto drv = readDerivation(*store, drvPath);
-
- for (std::string jobName2 : *named) {
- auto job2 = state->jobs.find(jobName2);
- if (job2 == state->jobs.end())
- throw Error("aggregate job '%s' references non-existent job '%s'", jobName, jobName2);
- std::string drvPath2 = (*job2)["drvPath"];
- auto drv2 = readDerivation(*store, drvPath2);
- job["constituents"].push_back(drvPath2);
- drv.inputDrvs[store->parseStorePath(drvPath2)] = {drv2.outputs.begin()->first};
- }
+ if (named == job.end()) continue;
+
+ if (dryRun) {
+ for (std::string jobName2 : *named) {
+ auto job2 = state->jobs.find(jobName2);
+ if (job2 == state->jobs.end())
+ throw Error("aggregate job '%s' references non-existent job '%s'", jobName, jobName2);
+ std::string drvPath2 = (*job2)["drvPath"];
+ job["constituents"].push_back(drvPath2);
+ }
+ } else {
+ std::string drvPath = job["drvPath"];
+ auto drv = readDerivation(*store, drvPath);
+
+ for (std::string jobName2 : *named) {
+ auto job2 = state->jobs.find(jobName2);
+ if (job2 == state->jobs.end())
+ throw Error("aggregate job '%s' references non-existent job '%s'", jobName, jobName2);
+ std::string drvPath2 = (*job2)["drvPath"];
+ auto drv2 = readDerivation(*store, drvPath2);
+ job["constituents"].push_back(drvPath2);
+ drv.inputDrvs[store->parseStorePath(drvPath2)] = {drv2.outputs.begin()->first};
+ }
- std::string drvName(store->parseStorePath(drvPath).name());
- auto h = hashDerivationModulo(*store, drv, true);
- auto outPath = store->makeOutputPath("out", h, drvName);
- drv.env["out"] = store->printStorePath(outPath);
- drv.outputs.insert_or_assign("out", DerivationOutput(outPath.clone(), "", ""));
- auto newDrvPath = store->printStorePath(writeDerivation(store, drv, drvName));
+ std::string drvName(store->parseStorePath(drvPath).name());
+ auto h = hashDerivationModulo(*store, drv, true);
+ auto outPath = store->makeOutputPath("out", h, drvName);
+ drv.env["out"] = store->printStorePath(outPath);
+ drv.outputs.insert_or_assign("out", DerivationOutput(outPath.clone(), "", ""));
+ auto newDrvPath = store->printStorePath(writeDerivation(store, drv, drvName));
- debug("rewrote aggregate derivation %s -> %s", drvPath, newDrvPath);
+ debug("rewrote aggregate derivation %s -> %s", drvPath, newDrvPath);
+
+ job["drvPath"] = newDrvPath;
+ job["outputs"]["out"] = store->printStorePath(outPath);
+ }
- job["drvPath"] = newDrvPath;
- job["outputs"]["out"] = store->printStorePath(outPath);
job.erase("namedConstituents");
}