Fix build against Nix master
[?]
Oct 26, 2017, 11:10 AM
STZE4KKRL2AGCPP2FOMBNZHJTRTKJQZSEKALWEV6FK5BII6H7EDACDependencies
- [2]
RLXDJAG2hydra-eval-jobs: Add --dry-run option - [3]
3LM2JRQCWhoops, misread signature - [4]
HNGPGVBTFix build - [5]
VU2OLHD2Move most of AddBuilds to hydra-eval-jobset - [6]
VTMBJVIShydra-eval-jobs: Disable the build hook. - [7]
SYN2GC3Oallow null values for jobs, meaning it should build - [8]
77VF5TC6* For ease of use during debugging, don't require --gc-roots-dir. - [9]
DKJFD6JNProcess Nix API changes - [10]
IZ2AHLM3* Export all relevant info about the derivation. - [11]
KD5237CU* eval-jobs now efficiently evaluates all Hydra jobs from a - [12]
SM5M2J3APass inputs to release expressions using -I - [13]
EBG4P4SYDoh - clear $NIX_PATH properly - [14]
A63IHCMX* Register GC roots properly. - [15]
4GTOWRFWhydra-eval-jobs: Fix build - [16]
HJYRK37A* Revert r27114, it seems to break stuff. - [17]
P45ANG5BFix build - [18]
MFRA2JX7Only pass the first value of each input in the inputs argument - [19]
AEFNBIIW* Merge the GC branch. - [20]
L4GM4MA6Call initGC() - [21]
FUB37KFUUse Nix's restricted evaluation mode - [22]
HOVPJBFF* Require every argument to be specified. - [23]
FMJMW4PU - [24]
4N5APGRG* Start of a helper tool to evaluate job expressions efficiently. - [25]
7BRTFGVYReally fix hydra-eval-jobs - [26]
HVXL2XUZ - [27]
4LWGZL33 - [28]
5X6FHW3Shydra-eval-jobs: Fix building against the latest unstable Nix - [29]
YNGIYQRFhydra-eval-jobs: Don't keep track of used inputs - [30]
IMQRX4MPhydra-eval-jobs: Use JSON instead of XML - [31]
GPZYBCJCaccidentally committed an = too little, which caused all unknown values to result in 'not building', which was not the intention - [32]
3PNG7NIBRemove trailing whitespace - [33]
FHXU6346hydra-eval-jobs: Pass all inputs as 'inputs' arg. - [34]
5MVWRWHThydra-evaluator: Don't use the "timeout" command - [35]
VTNP5KDO* Don't catch all errors. Some errors mess up the connection with the - [36]
YGRLM2SK* Export all relevant info about the derivation. - [37]
RFE6T5LG* Store jobset evaluations in the database explicitly. This includes - [38]
AEKIREIH* Updated hydra_eval_jobs for the new evaluator. - [39]
52JSLNC6* Build fix. - [40]
FGUL3HAZhydra-eval-jobs: Don't go into an infinite recursion - [41]
4XR2A7QD* Fix building hydra_eval_jobs against the sqlite branch. - [42]
7YCFGMZB* Report evaluation errors per job, and don't bail out if a job fails - [43]
5DYPEBSIhydra-eval-jobs: Use function argument default values - [44]
MIC2O6ZFUse evalFile() instead of parseExprFromFile() - [45]
7GKAIP3VFix build and handling of string inputs starting with a dash - [46]
WWEGP5ET* Use default values of job function arguments if they're not - [47]
WVD3YYONhydra-evaluator: Add some debug code - [*]
N22GPKYT* Put info about logs / build products in the DB.
Change contents
- edit in src/hydra-eval-jobs/hydra-eval-jobs.cc at line 13
#include "common-opts.hh" - edit in src/hydra-eval-jobs/hydra-eval-jobs.cc at line 14
#include "common-eval-args.hh" - edit in src/hydra-eval-jobs/hydra-eval-jobs.cc at line 20
typedef std::list<Value *, traceable_allocator<Value *> > ValueList;typedef std::map<Symbol, ValueList> AutoArgs; - replacement in src/hydra-eval-jobs/hydra-eval-jobs.cc at line 23[7.87]→[7.0:68](∅→∅),[7.218]→[7.0:68](∅→∅),[7.68]→[7.96:98](∅→∅),[7.217]→[7.96:98](∅→∅),[7.96]→[7.96:98](∅→∅),[7.98]→[7.88:148](∅→∅),[7.148]→[7.69:138](∅→∅),[7.157]→[7.69:138](∅→∅),[7.138]→[7.318:393](∅→∅),[7.318]→[7.318:393](∅→∅),[7.393]→[7.0:53](∅→∅),[7.53]→[7.306:308](∅→∅),[7.426]→[7.306:308](∅→∅),[7.306]→[7.306:308](∅→∅),[7.308]→[7.427:450](∅→∅),[7.450]→[7.536:613](∅→∅),[7.613]→[7.54:88](∅→∅),[7.88]→[7.647:676](∅→∅),[7.647]→[7.647:676](∅→∅),[7.676]→[7.149:202](∅→∅),[7.192]→[7.448:470](∅→∅),[7.202]→[7.448:470](∅→∅),[7.624]→[7.448:470](∅→∅),[7.448]→[7.448:470](∅→∅),[7.53]→[7.470:471](∅→∅),[7.470]→[7.470:471](∅→∅),[7.471]→[7.625:684](∅→∅)
const AutoArgs & argsLeft, Value & v, const string & attrPath);static void tryJobAlts(EvalState & state, JSONObject & top,const AutoArgs & argsLeft, const string & attrPath, Value & fun,Formals::Formals_::iterator cur,Formals::Formals_::iterator last,Bindings & actualArgs) // FIXME: should be const{if (cur == last) {Value v, * arg = state.allocValue();state.mkAttrs(*arg, 0);arg->attrs = &actualArgs;mkApp(v, fun, *arg);findJobs(state, top, argsLeft, v, attrPath);return;}AutoArgs::const_iterator a = argsLeft.find(cur->name);Bindings & autoArgs, Value & v, const string & attrPath); - edit in src/hydra-eval-jobs/hydra-eval-jobs.cc at line 25
Formals::Formals_::iterator next = cur; ++next; - edit in src/hydra-eval-jobs/hydra-eval-jobs.cc at line 26[7.1]→[7.1:177](∅→∅),[7.177]→[7.203:284](∅→∅),[7.274]→[7.268:290](∅→∅),[7.284]→[7.268:290](∅→∅),[7.268]→[7.268:290](∅→∅),[7.196]→[7.805:821](∅→∅),[7.290]→[7.805:821](∅→∅),[7.343]→[7.805:821](∅→∅),[7.805]→[7.805:821](∅→∅),[7.821]→[4.0:33](∅→∅),[4.33]→[7.89:185](∅→∅),[7.733]→[7.89:185](∅→∅),[7.185]→[4.34:108](∅→∅),[4.108]→[7.979:1017](∅→∅),[7.979]→[7.979:1017](∅→∅),[7.1017]→[4.109:160](∅→∅),[4.160]→[7.786:833](∅→∅),[7.786]→[7.786:833](∅→∅),[7.905]→[7.1130:1166](∅→∅),[7.1130]→[7.1130:1166](∅→∅),[7.1166]→[7.285:368](∅→∅),[7.358]→[7.1260:1273](∅→∅),[7.368]→[7.1260:1273](∅→∅),[7.1260]→[7.1260:1273](∅→∅),[7.306]→[7.211:221](∅→∅)
if (a == argsLeft.end()) {if (!cur->def)throw TypeError(format("job `%1%' requires an argument named `%2%'")% attrPath % cur->name);tryJobAlts(state, top, argsLeft, attrPath, fun, next, last, actualArgs);return;}int n = 0;for (auto & i : a->second) {Bindings & actualArgs2(*state.allocBindings(actualArgs.size() + 1)); // !!! inefficientfor (auto & j : actualArgs)actualArgs2.push_back(j);AutoArgs argsLeft2(argsLeft);actualArgs2.push_back(Attr(cur->name, i));actualArgs2.sort(); // !!! inefficientargsLeft2.erase(cur->name);tryJobAlts(state, top, argsLeft2, attrPath, fun, next, last, actualArgs2);++n;}} - replacement in src/hydra-eval-jobs/hydra-eval-jobs.cc at line 53
const AutoArgs & argsLeft, Value & v, const string & attrPath)Bindings & autoArgs, Value & vIn, const string & attrPath) - replacement in src/hydra-eval-jobs/hydra-eval-jobs.cc at line 59
state.forceValue(v);Value v;state.autoCallFunction(autoArgs, vIn, v); - replacement in src/hydra-eval-jobs/hydra-eval-jobs.cc at line 124
findJobs(state, top, argsLeft, *i.value,findJobs(state, top, autoArgs, *i.value, - edit in src/hydra-eval-jobs/hydra-eval-jobs.cc at line 130[7.1419]→[7.1986:2048](∅→∅),[7.2048]→[7.0:49](∅→∅),[7.49]→[7.1552:1606](∅→∅),[7.544]→[7.2112:2214](∅→∅),[7.1606]→[7.2112:2214](∅→∅),[7.2112]→[7.2112:2214](∅→∅),[7.2214]→[7.50:68](∅→∅),[7.68]→[7.0:7](∅→∅),[7.2239]→[7.0:7](∅→∅)
else if (v.type == tLambda && v.lambda.fun->matchAttrs) {Bindings & tmp(*state.allocBindings(0));tryJobAlts(state, top, argsLeft, attrPath, v,v.lambda.fun->formals->formals.begin(),v.lambda.fun->formals->formals.end(),tmp);} - replacement in src/hydra-eval-jobs/hydra-eval-jobs.cc at line 140
const AutoArgs & argsLeft, Value & v, const string & attrPath)Bindings & autoArgs, Value & v, const string & attrPath) - replacement in src/hydra-eval-jobs/hydra-eval-jobs.cc at line 143
findJobsWrapped(state, top, argsLeft, v, attrPath);findJobsWrapped(state, top, autoArgs, v, attrPath); - edit in src/hydra-eval-jobs/hydra-eval-jobs.cc at line 163
Strings searchPath; - edit in src/hydra-eval-jobs/hydra-eval-jobs.cc at line 164
std::map<string, Strings> autoArgs_; - replacement in src/hydra-eval-jobs/hydra-eval-jobs.cc at line 165
parseCmdLine(argc, argv, [&](Strings::iterator & arg, const Strings::iterator & end) {if (*arg == "--arg" || *arg == "--argstr") {/* This is like --arg in nix-instantiate, except that itsupports multiple versions for the same argument.That is, autoArgs is a mapping from variable names to*lists* of values. */auto what = *arg;string name = getArg(what, arg, end);string value = getArg(what, arg, end);autoArgs_[name].push_back((what == "--arg" ? 'E' : 'S') + value);}else if (parseSearchPathArg(arg, end, searchPath));else if (*arg == "--gc-roots-dir")struct MyArgs : LegacyArgs, MixEvalArgs{using LegacyArgs::LegacyArgs;};MyArgs myArgs(baseNameOf(argv[0]), [&](Strings::iterator & arg, const Strings::iterator & end) {if (*arg == "--gc-roots-dir") - edit in src/hydra-eval-jobs/hydra-eval-jobs.cc at line 181
myArgs.parseCmdline(argvToStrings(argc, argv)); - replacement in src/hydra-eval-jobs/hydra-eval-jobs.cc at line 185
settings.useBuildHook = false;settings.builders = ""; - replacement in src/hydra-eval-jobs/hydra-eval-jobs.cc at line 189
settings.set("restrict-eval", "true");settings.restrictEval = true; - replacement in src/hydra-eval-jobs/hydra-eval-jobs.cc at line 195
EvalState state(searchPath, openStore());EvalState state(myArgs.searchPath, openStore()); - replacement in src/hydra-eval-jobs/hydra-eval-jobs.cc at line 197[7.881]→[7.1405:1432](∅→∅),[7.1432]→[7.0:101](∅→∅),[7.101]→[7.1432:1469](∅→∅),[7.1432]→[7.1432:1469](∅→∅),[7.1469]→[7.102:164](∅→∅),[7.164]→[7.0:31](∅→∅),[7.31]→[7.1469:1750](∅→∅),[7.321]→[7.1469:1750](∅→∅),[7.1469]→[7.1469:1750](∅→∅),[7.1750]→[7.322:372](∅→∅),[7.372]→[7.32:61](∅→∅),[7.61]→[3.0:69](∅→∅),[3.69]→[7.131:184](∅→∅),[7.131]→[7.131:184](∅→∅),[7.184]→[7.1820:1844](∅→∅),[7.427]→[7.1820:1844](∅→∅),[7.1820]→[7.1820:1844](∅→∅),[7.1844]→[7.428:641](∅→∅)
AutoArgs autoArgs;Value * inputsSet = state.allocValue();state.mkAttrs(*inputsSet, autoArgs_.size());for (auto & i : autoArgs_) {Symbol inputName = state.symbols.create(i.first);bool first = true;for (auto & j : i.second) {Value * v = state.allocValue();if (j[0] == 'E')state.eval(state.parseExprFromString(string(j, 1), absPath(".")), *v);elsemkString(*v, string(j, 1));autoArgs[inputName].push_back(v);if (first) {inputsSet->attrs->push_back(Attr(inputName, v));first = false;}}}Symbol sInputs = state.symbols.create("inputs");if (autoArgs.find(sInputs) == autoArgs.end()) {inputsSet->attrs->sort();autoArgs[sInputs].push_back(inputsSet);}Bindings & autoArgs = *myArgs.getAutoArgs(state); - replacement in src/script/hydra-eval-jobset at line 306
foreach my $alt (@{$inputInfo->{$input}}) {if ($alt->{type} eq "string") {push @res, "--argstr", $input, $alt->{value};}elsif ($alt->{type} eq "boolean") {push @res, "--arg", $input, booleanToString($exprType, $alt->{value});}elsif ($alt->{type} eq "nix") {die "input type ‘nix’ only supported for Nix-based jobsets\n" unless $exprType eq "nix";push @res, "--arg", $input, $alt->{value};}elsif ($alt->{type} eq "eval") {die "input type ‘eval’ only supported for Nix-based jobsets\n" unless $exprType eq "nix";my $s = "{ ";# FIXME: escape $_. But dots should not be escaped.$s .= "$_ = builtins.storePath ${\$alt->{jobs}->{$_}}; "foreach keys %{$alt->{jobs}};$s .= "}";push @res, "--arg", $input, $s;}else {push @res, "--arg", $input, buildInputToString($exprType, $alt);}die "multiple jobset input alternatives are no longer supported"if scalar @{$inputInfo->{$input}} != 1;my $alt = $inputInfo->{$input}->[0];if ($alt->{type} eq "string") {push @res, "--argstr", $input, $alt->{value}; - edit in src/script/hydra-eval-jobset at line 315
elsif ($alt->{type} eq "boolean") {push @res, "--arg", $input, booleanToString($exprType, $alt->{value});}elsif ($alt->{type} eq "nix") {die "input type ‘nix’ only supported for Nix-based jobsets\n" unless $exprType eq "nix";push @res, "--arg", $input, $alt->{value};}elsif ($alt->{type} eq "eval") {die "input type ‘eval’ only supported for Nix-based jobsets\n" unless $exprType eq "nix";my $s = "{ ";# FIXME: escape $_. But dots should not be escaped.$s .= "$_ = builtins.storePath ${\$alt->{jobs}->{$_}}; "foreach keys %{$alt->{jobs}};$s .= "}";push @res, "--arg", $input, $s;}else {push @res, "--arg", $input, buildInputToString($exprType, $alt);}