This allows Hydra to use binaries from available binary caches. It makes the queue monitor thread quite a bit slower, so if you don't want to use binary caches, it's better to add "–option build-use-substitutes false" to the hydra-queue-runner invocation.
Fixed #243.
VQISTKOPNAEUS2K2F73CMNNLGZATWUYIURD5CSVNBNF7Q5ZF4PXQC OG3Z3QGCG2FNDGF4VQYWOXLZCF7LGTZCUMGKUCBNAPAQ5FRFHQ2AC MHVIT4JYWUYD4UCGB2AHLXWLX6B5SYE22BREERNGANT7RGGDUFOAC 24BMQDZAWDQ7VNIA7TIROXSOYLOJBNZ2E4264WHWNJAEN6ZB3UOAC KBZHIGLGHGLST5AZZDEJTYBJSQNE2XYNHEN2FN6XMAMY5BJYZR6QC MSIHMO45JO5V5ICZ7SKVWH6CLINKQY3UTA7274Q5OZCKPRX7SUNQC HUUZFPPKGHTXFZMZCO2UGWYNGEED3E2CFHQRFQVVBJGPQVGVY4UAC HJOEIMLRDVQ2KZI5HGL2HKGBM3AHP7YIKGKDAGFUNKRUXVRB24NAC int State::createBuildStep(pqxx::work & txn, time_t startTime, Build::ptr build, Step::ptr step,const std::string & machine, BuildStepStatus status, const std::string & errorMsg, BuildID propagatedFrom)
int State::allocBuildStep(pqxx::work & txn, Build::ptr build)
int stepNr = res[0][0].is_null() ? 1 : res[0][0].as<int>() + 1;
return res[0][0].is_null() ? 1 : res[0][0].as<int>() + 1;}int State::createBuildStep(pqxx::work & txn, time_t startTime, Build::ptr build, Step::ptr step,const std::string & machine, BuildStepStatus status, const std::string & errorMsg, BuildID propagatedFrom){int stepNr = allocBuildStep(txn, build);
int State::createSubstitutionStep(pqxx::work & txn, time_t startTime, time_t stopTime,Build::ptr build, const Path & drvPath, const string & outputName, const Path & storePath){int stepNr = allocBuildStep(txn, build);txn.parameterized("insert into BuildSteps (build, stepnr, type, drvPath, busy, status, startTime, stopTime) values ($1, $2, $3, $4, $5, $6, $7, $8)")(build->id)(stepNr)(1) // == substitution(drvPath)(0)(0)(startTime)(stopTime).exec();txn.parameterized("insert into BuildStepOutputs (build, stepnr, name, path) values ($1, $2, $3, $4)")(build->id)(stepNr)(outputName)(storePath).exec();return stepNr;}
break;
missing[i.first] = i.second;missingPaths.insert(i.second.path);}/* Try to substitute the missing paths. Note: can't use the moreefficient querySubstitutablePaths() here because upstream Hydraservers don't allow it (they have "WantMassQuery: 0"). */assert(missing.size() == missingPaths.size());if (!missing.empty() && settings.useSubstitutes) {SubstitutablePathInfos infos;store->querySubstitutablePathInfos(missingPaths, infos);if (infos.size() == missingPaths.size()) {valid = true;for (auto & i : missing) {try {printMsg(lvlInfo, format("substituting output ‘%1%’ of ‘%2%’") % i.second.path % drvPath);time_t startTime = time(0);store->ensurePath(i.second.path);time_t stopTime = time(0);{pqxx::work txn(conn);createSubstitutionStep(txn, startTime, stopTime, build, drvPath, "out", i.second.path);txn.commit();}} catch (Error & e) {valid = false;break;}}