diff options
author | Eelco Dolstra <edolstra@gmail.com> | 2020-02-18 19:26:11 +0100 |
---|---|---|
committer | Eelco Dolstra <edolstra@gmail.com> | 2020-02-18 19:26:11 +0100 |
commit | 1351101c2875982557fd8ed6ccbe19a4df9d613b (patch) | |
tree | 411092227525909c4dc052a6cc652d109a033b71 /src/nix | |
parent | 8f9dcfc67175992dbfe8e5cfb10b8716dcad89a8 (diff) |
nix eval-hydra-jobs: Check aggregate jobs in --dry-run mode
Diffstat (limited to 'src/nix')
-rw-r--r-- | src/nix/eval-hydra-jobs.cc | 57 |
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"); } |