forked from lix-project/hydra
fix build against nix 2.7.0
fix build after such commits as df552ff53e68dff8ca360adbdbea214ece1d08ee and e862833ec662c1bffbe31b9a229147de391e801a
This commit is contained in:
parent
c64c5f0a7e
commit
089da272c7
|
@ -63,13 +63,13 @@ struct MyArgs : MixEvalArgs, MixCommonArgs
|
||||||
|
|
||||||
static MyArgs myArgs;
|
static MyArgs myArgs;
|
||||||
|
|
||||||
static std::string queryMetaStrings(EvalState & state, DrvInfo & drv, const string & name, const string & subAttribute)
|
static std::string queryMetaStrings(EvalState & state, DrvInfo & drv, const std::string & name, const std::string & subAttribute)
|
||||||
{
|
{
|
||||||
Strings res;
|
Strings res;
|
||||||
std::function<void(Value & v)> rec;
|
std::function<void(Value & v)> rec;
|
||||||
|
|
||||||
rec = [&](Value & v) {
|
rec = [&](Value & v) {
|
||||||
state.forceValue(v);
|
state.forceValue(v, noPos);
|
||||||
if (v.type() == nString)
|
if (v.type() == nString)
|
||||||
res.push_back(v.string.s);
|
res.push_back(v.string.s);
|
||||||
else if (v.isList())
|
else if (v.isList())
|
||||||
|
@ -78,7 +78,7 @@ static std::string queryMetaStrings(EvalState & state, DrvInfo & drv, const stri
|
||||||
else if (v.type() == nAttrs) {
|
else if (v.type() == nAttrs) {
|
||||||
auto a = v.attrs->find(state.symbols.create(subAttribute));
|
auto a = v.attrs->find(state.symbols.create(subAttribute));
|
||||||
if (a != v.attrs->end())
|
if (a != v.attrs->end())
|
||||||
res.push_back(state.forceString(*a->value));
|
res.push_back(std::string(state.forceString(*a->value)));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -113,7 +113,7 @@ static void worker(
|
||||||
callFlake(state, lockedFlake, *vFlake);
|
callFlake(state, lockedFlake, *vFlake);
|
||||||
|
|
||||||
auto vOutputs = vFlake->attrs->get(state.symbols.create("outputs"))->value;
|
auto vOutputs = vFlake->attrs->get(state.symbols.create("outputs"))->value;
|
||||||
state.forceValue(*vOutputs);
|
state.forceValue(*vOutputs, noPos);
|
||||||
|
|
||||||
auto aHydraJobs = vOutputs->attrs->get(state.symbols.create("hydraJobs"));
|
auto aHydraJobs = vOutputs->attrs->get(state.symbols.create("hydraJobs"));
|
||||||
if (!aHydraJobs)
|
if (!aHydraJobs)
|
||||||
|
@ -157,7 +157,7 @@ static void worker(
|
||||||
if (drv->querySystem() == "unknown")
|
if (drv->querySystem() == "unknown")
|
||||||
throw EvalError("derivation must have a 'system' attribute");
|
throw EvalError("derivation must have a 'system' attribute");
|
||||||
|
|
||||||
auto drvPath = drv->queryDrvPath();
|
auto drvPath = state.store->printStorePath(drv->requireDrvPath());
|
||||||
|
|
||||||
nlohmann::json job;
|
nlohmann::json job;
|
||||||
|
|
||||||
|
@ -186,13 +186,13 @@ static void worker(
|
||||||
for (auto & i : context)
|
for (auto & i : context)
|
||||||
if (i.at(0) == '!') {
|
if (i.at(0) == '!') {
|
||||||
size_t index = i.find("!", 1);
|
size_t index = i.find("!", 1);
|
||||||
job["constituents"].push_back(string(i, index + 1));
|
job["constituents"].push_back(std::string(i, index + 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
state.forceList(*a->value, *a->pos);
|
state.forceList(*a->value, *a->pos);
|
||||||
for (unsigned int n = 0; n < a->value->listSize(); ++n) {
|
for (unsigned int n = 0; n < a->value->listSize(); ++n) {
|
||||||
auto v = a->value->listElems()[n];
|
auto v = a->value->listElems()[n];
|
||||||
state.forceValue(*v);
|
state.forceValue(*v, noPos);
|
||||||
if (v->type() == nString)
|
if (v->type() == nString)
|
||||||
job["namedConstituents"].push_back(state.forceStringNoCtx(*v));
|
job["namedConstituents"].push_back(state.forceStringNoCtx(*v));
|
||||||
}
|
}
|
||||||
|
@ -210,7 +210,7 @@ static void worker(
|
||||||
|
|
||||||
nlohmann::json out;
|
nlohmann::json out;
|
||||||
for (auto & j : outputs)
|
for (auto & j : outputs)
|
||||||
out[j.first] = j.second;
|
out[j.first] = state.store->printStorePath(j.second);
|
||||||
job["outputs"] = std::move(out);
|
job["outputs"] = std::move(out);
|
||||||
|
|
||||||
reply["job"] = std::move(job);
|
reply["job"] = std::move(job);
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
|
||||||
|
#include "build-result.hh"
|
||||||
#include "serve-protocol.hh"
|
#include "serve-protocol.hh"
|
||||||
#include "state.hh"
|
#include "state.hh"
|
||||||
#include "util.hh"
|
#include "util.hh"
|
||||||
|
@ -49,7 +50,7 @@ static Strings extraStoreArgs(std::string & machine)
|
||||||
|
|
||||||
static void openConnection(Machine::ptr machine, Path tmpDir, int stderrFD, Child & child)
|
static void openConnection(Machine::ptr machine, Path tmpDir, int stderrFD, Child & child)
|
||||||
{
|
{
|
||||||
string pgmName;
|
std::string pgmName;
|
||||||
Pipe to, from;
|
Pipe to, from;
|
||||||
to.create();
|
to.create();
|
||||||
from.create();
|
from.create();
|
||||||
|
@ -81,7 +82,7 @@ static void openConnection(Machine::ptr machine, Path tmpDir, int stderrFD, Chil
|
||||||
if (machine->sshPublicHostKey != "") {
|
if (machine->sshPublicHostKey != "") {
|
||||||
Path fileName = tmpDir + "/host-key";
|
Path fileName = tmpDir + "/host-key";
|
||||||
auto p = machine->sshName.find("@");
|
auto p = machine->sshName.find("@");
|
||||||
string host = p != string::npos ? string(machine->sshName, p + 1) : machine->sshName;
|
std::string host = p != std::string::npos ? std::string(machine->sshName, p + 1) : machine->sshName;
|
||||||
writeFile(fileName, host + " " + machine->sshPublicHostKey + "\n");
|
writeFile(fileName, host + " " + machine->sshPublicHostKey + "\n");
|
||||||
append(argv, {"-oUserKnownHostsFile=" + fileName});
|
append(argv, {"-oUserKnownHostsFile=" + fileName});
|
||||||
}
|
}
|
||||||
|
@ -185,8 +186,8 @@ void State::buildRemote(ref<Store> destStore,
|
||||||
{
|
{
|
||||||
assert(BuildResult::TimedOut == 8);
|
assert(BuildResult::TimedOut == 8);
|
||||||
|
|
||||||
string base(step->drvPath.to_string());
|
std::string base(step->drvPath.to_string());
|
||||||
result.logFile = logDir + "/" + string(base, 0, 2) + "/" + string(base, 2);
|
result.logFile = logDir + "/" + std::string(base, 0, 2) + "/" + std::string(base, 2);
|
||||||
AutoDelete autoDelete(result.logFile, false);
|
AutoDelete autoDelete(result.logFile, false);
|
||||||
|
|
||||||
createDirs(dirOf(result.logFile));
|
createDirs(dirOf(result.logFile));
|
||||||
|
@ -249,7 +250,7 @@ void State::buildRemote(ref<Store> destStore,
|
||||||
|
|
||||||
} catch (EndOfFile & e) {
|
} catch (EndOfFile & e) {
|
||||||
child.pid.wait();
|
child.pid.wait();
|
||||||
string s = chomp(readFile(result.logFile));
|
std::string s = chomp(readFile(result.logFile));
|
||||||
throw Error("cannot connect to ‘%1%’: %2%", machine->sshName, s);
|
throw Error("cannot connect to ‘%1%’: %2%", machine->sshName, s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -78,7 +78,7 @@ BuildOutput getBuildOutput(
|
||||||
product.type = match[1];
|
product.type = match[1];
|
||||||
product.subtype = match[2];
|
product.subtype = match[2];
|
||||||
std::string s(match[3]);
|
std::string s(match[3]);
|
||||||
product.path = s[0] == '"' ? string(s, 1, s.size() - 2) : s;
|
product.path = s[0] == '"' ? std::string(s, 1, s.size() - 2) : s;
|
||||||
product.defaultPath = match[5];
|
product.defaultPath = match[5];
|
||||||
|
|
||||||
/* Ensure that the path exists and points into the Nix
|
/* Ensure that the path exists and points into the Nix
|
||||||
|
|
|
@ -87,7 +87,7 @@ void State::parseMachines(const std::string & contents)
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto line : tokenizeString<Strings>(contents, "\n")) {
|
for (auto line : tokenizeString<Strings>(contents, "\n")) {
|
||||||
line = trim(string(line, 0, line.find('#')));
|
line = trim(std::string(line, 0, line.find('#')));
|
||||||
auto tokens = tokenizeString<std::vector<std::string>>(line);
|
auto tokens = tokenizeString<std::vector<std::string>>(line);
|
||||||
if (tokens.size() < 3) continue;
|
if (tokens.size() < 3) continue;
|
||||||
tokens.resize(8);
|
tokens.resize(8);
|
||||||
|
@ -95,7 +95,7 @@ void State::parseMachines(const std::string & contents)
|
||||||
auto machine = std::make_shared<Machine>();
|
auto machine = std::make_shared<Machine>();
|
||||||
machine->sshName = tokens[0];
|
machine->sshName = tokens[0];
|
||||||
machine->systemTypes = tokenizeString<StringSet>(tokens[1], ",");
|
machine->systemTypes = tokenizeString<StringSet>(tokens[1], ",");
|
||||||
machine->sshKey = tokens[2] == "-" ? string("") : tokens[2];
|
machine->sshKey = tokens[2] == "-" ? std::string("") : tokens[2];
|
||||||
if (tokens[3] != "")
|
if (tokens[3] != "")
|
||||||
machine->maxJobs = string2Int<decltype(machine->maxJobs)>(tokens[3]).value();
|
machine->maxJobs = string2Int<decltype(machine->maxJobs)>(tokens[3]).value();
|
||||||
else
|
else
|
||||||
|
@ -149,7 +149,7 @@ void State::parseMachines(const std::string & contents)
|
||||||
|
|
||||||
void State::monitorMachinesFile()
|
void State::monitorMachinesFile()
|
||||||
{
|
{
|
||||||
string defaultMachinesFile = "/etc/nix/machines";
|
std::string defaultMachinesFile = "/etc/nix/machines";
|
||||||
auto machinesFiles = tokenizeString<std::vector<Path>>(
|
auto machinesFiles = tokenizeString<std::vector<Path>>(
|
||||||
getEnv("NIX_REMOTE_SYSTEMS").value_or(pathExists(defaultMachinesFile) ? defaultMachinesFile : ""), ":");
|
getEnv("NIX_REMOTE_SYSTEMS").value_or(pathExists(defaultMachinesFile) ? defaultMachinesFile : ""), ":");
|
||||||
|
|
||||||
|
@ -191,7 +191,7 @@ void State::monitorMachinesFile()
|
||||||
|
|
||||||
debug("reloading machines files");
|
debug("reloading machines files");
|
||||||
|
|
||||||
string contents;
|
std::string contents;
|
||||||
for (auto & machinesFile : machinesFiles) {
|
for (auto & machinesFile : machinesFiles) {
|
||||||
try {
|
try {
|
||||||
contents += readFile(machinesFile);
|
contents += readFile(machinesFile);
|
||||||
|
@ -308,7 +308,7 @@ void State::finishBuildStep(pqxx::work & txn, const RemoteResult & result,
|
||||||
|
|
||||||
|
|
||||||
int State::createSubstitutionStep(pqxx::work & txn, time_t startTime, time_t stopTime,
|
int State::createSubstitutionStep(pqxx::work & txn, time_t startTime, time_t stopTime,
|
||||||
Build::ptr build, const StorePath & drvPath, const string & outputName, const StorePath & storePath)
|
Build::ptr build, const StorePath & drvPath, const std::string & outputName, const StorePath & storePath)
|
||||||
{
|
{
|
||||||
restart:
|
restart:
|
||||||
auto stepNr = allocBuildStep(txn, build->id);
|
auto stepNr = allocBuildStep(txn, build->id);
|
||||||
|
@ -683,14 +683,14 @@ void State::showStatus()
|
||||||
auto conn(dbPool.get());
|
auto conn(dbPool.get());
|
||||||
receiver statusDumped(*conn, "status_dumped");
|
receiver statusDumped(*conn, "status_dumped");
|
||||||
|
|
||||||
string status;
|
std::string status;
|
||||||
bool barf = false;
|
bool barf = false;
|
||||||
|
|
||||||
/* Get the last JSON status dump from the database. */
|
/* Get the last JSON status dump from the database. */
|
||||||
{
|
{
|
||||||
pqxx::work txn(*conn);
|
pqxx::work txn(*conn);
|
||||||
auto res = txn.exec("select status from SystemStatus where what = 'queue-runner'");
|
auto res = txn.exec("select status from SystemStatus where what = 'queue-runner'");
|
||||||
if (res.size()) status = res[0][0].as<string>();
|
if (res.size()) status = res[0][0].as<std::string>();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (status != "") {
|
if (status != "") {
|
||||||
|
@ -710,7 +710,7 @@ void State::showStatus()
|
||||||
{
|
{
|
||||||
pqxx::work txn(*conn);
|
pqxx::work txn(*conn);
|
||||||
auto res = txn.exec("select status from SystemStatus where what = 'queue-runner'");
|
auto res = txn.exec("select status from SystemStatus where what = 'queue-runner'");
|
||||||
if (res.size()) status = res[0][0].as<string>();
|
if (res.size()) status = res[0][0].as<std::string>();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,7 +64,7 @@ struct Extractor : ParseSink
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void createSymlink(const Path & path, const string & target) override
|
void createSymlink(const Path & path, const std::string & target) override
|
||||||
{
|
{
|
||||||
members.insert_or_assign(prefix + path, NarMemberData { .type = FSAccessor::Type::tSymlink });
|
members.insert_or_assign(prefix + path, NarMemberData { .type = FSAccessor::Type::tSymlink });
|
||||||
}
|
}
|
||||||
|
|
|
@ -111,12 +111,12 @@ bool State::getQueuedBuilds(Connection & conn,
|
||||||
if (builds_->count(id)) continue;
|
if (builds_->count(id)) continue;
|
||||||
|
|
||||||
auto build = std::make_shared<Build>(
|
auto build = std::make_shared<Build>(
|
||||||
localStore->parseStorePath(row["drvPath"].as<string>()));
|
localStore->parseStorePath(row["drvPath"].as<std::string>()));
|
||||||
build->id = id;
|
build->id = id;
|
||||||
build->jobsetId = row["jobset_id"].as<JobsetID>();
|
build->jobsetId = row["jobset_id"].as<JobsetID>();
|
||||||
build->projectName = row["project"].as<string>();
|
build->projectName = row["project"].as<std::string>();
|
||||||
build->jobsetName = row["jobset"].as<string>();
|
build->jobsetName = row["jobset"].as<std::string>();
|
||||||
build->jobName = row["job"].as<string>();
|
build->jobName = row["job"].as<std::string>();
|
||||||
build->maxSilentTime = row["maxsilent"].as<int>();
|
build->maxSilentTime = row["maxsilent"].as<int>();
|
||||||
build->buildTimeout = row["timeout"].as<int>();
|
build->buildTimeout = row["timeout"].as<int>();
|
||||||
build->timestamp = row["timestamp"].as<time_t>();
|
build->timestamp = row["timestamp"].as<time_t>();
|
||||||
|
@ -620,7 +620,7 @@ void State::processJobsetSharesChange(Connection & conn)
|
||||||
auto res = txn.exec("select project, name, schedulingShares from Jobsets");
|
auto res = txn.exec("select project, name, schedulingShares from Jobsets");
|
||||||
for (auto const & row : res) {
|
for (auto const & row : res) {
|
||||||
auto jobsets_(jobsets.lock());
|
auto jobsets_(jobsets.lock());
|
||||||
auto i = jobsets_->find(std::make_pair(row["project"].as<string>(), row["name"].as<string>()));
|
auto i = jobsets_->find(std::make_pair(row["project"].as<std::string>(), row["name"].as<std::string>()));
|
||||||
if (i == jobsets_->end()) continue;
|
if (i == jobsets_->end()) continue;
|
||||||
i->second->setShares(row["schedulingShares"].as<unsigned int>());
|
i->second->setShares(row["schedulingShares"].as<unsigned int>());
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include "parsed-derivations.hh"
|
#include "parsed-derivations.hh"
|
||||||
#include "pathlocks.hh"
|
#include "pathlocks.hh"
|
||||||
#include "pool.hh"
|
#include "pool.hh"
|
||||||
|
#include "build-result.hh"
|
||||||
#include "store-api.hh"
|
#include "store-api.hh"
|
||||||
#include "sync.hh"
|
#include "sync.hh"
|
||||||
#include "nar-extractor.hh"
|
#include "nar-extractor.hh"
|
||||||
|
|
|
@ -18,7 +18,7 @@ struct Connection : pqxx::connection
|
||||||
std::string upper_prefix = "DBI:Pg:";
|
std::string upper_prefix = "DBI:Pg:";
|
||||||
|
|
||||||
if (hasPrefix(s, lower_prefix) || hasPrefix(s, upper_prefix)) {
|
if (hasPrefix(s, lower_prefix) || hasPrefix(s, upper_prefix)) {
|
||||||
return concatStringsSep(" ", tokenizeString<Strings>(string(s, lower_prefix.size()), ";"));
|
return concatStringsSep(" ", tokenizeString<Strings>(std::string(s, lower_prefix.size()), ";"));
|
||||||
}
|
}
|
||||||
|
|
||||||
throw Error("$HYDRA_DBI does not denote a PostgreSQL database");
|
throw Error("$HYDRA_DBI does not denote a PostgreSQL database");
|
||||||
|
|
|
@ -17,7 +17,7 @@ struct HydraConfig
|
||||||
if (hydraConfigFile && pathExists(*hydraConfigFile)) {
|
if (hydraConfigFile && pathExists(*hydraConfigFile)) {
|
||||||
|
|
||||||
for (auto line : tokenizeString<Strings>(readFile(*hydraConfigFile), "\n")) {
|
for (auto line : tokenizeString<Strings>(readFile(*hydraConfigFile), "\n")) {
|
||||||
line = trim(string(line, 0, line.find('#')));
|
line = trim(std::string(line, 0, line.find('#')));
|
||||||
|
|
||||||
auto eq = line.find('=');
|
auto eq = line.find('=');
|
||||||
if (eq == std::string::npos) continue;
|
if (eq == std::string::npos) continue;
|
||||||
|
|
Loading…
Reference in a new issue