diff --git a/src/lib/Hydra/Helper/AddBuilds.pm b/src/lib/Hydra/Helper/AddBuilds.pm index 5749a73a..3eff4f75 100644 --- a/src/lib/Hydra/Helper/AddBuilds.pm +++ b/src/lib/Hydra/Helper/AddBuilds.pm @@ -788,11 +788,14 @@ sub addBuildProducts { } -# Return the most recent evaluation of the given jobset that had new -# builds, or undefined if no such evaluation exists. +# Return the most recent evaluation of the given jobset (that +# optionally had new builds), or undefined if no such evaluation +# exists. sub getPrevJobsetEval { - my ($db, $jobset) = @_; - my ($prevEval) = $jobset->jobsetevals({ hasnewbuilds => 1 }, { order_by => "id DESC", rows => 1 }); + my ($db, $jobset, $hasNewBuilds) = @_; + my ($prevEval) = $jobset->jobsetevals( + ($hasNewBuilds ? { hasnewbuilds => 1 } : { }), + { order_by => "id DESC", rows => 1 }); return $prevEval; } diff --git a/src/script/hydra-evaluator b/src/script/hydra-evaluator index 7f76f02a..f41e98fa 100755 --- a/src/script/hydra-evaluator +++ b/src/script/hydra-evaluator @@ -110,8 +110,7 @@ sub checkJobset { # inputs. If so, bail out. my @args = ($jobset->nixexprinput, $jobset->nixexprpath, inputsToArgs($inputInfo)); my $argsHash = sha256_hex("@args"); - my $prevEval = getPrevJobsetEval($db, $jobset); - if ($prevEval->hash eq $argsHash) { + if (getPrevJobsetEval($db, $jobset, 0)->hash eq $argsHash) { print STDERR " jobset is unchanged, skipping\n"; txn_do($db, sub { $jobset->update({lastcheckedtime => time}); @@ -126,6 +125,8 @@ sub checkJobset { txn_do($db, sub { + my $prevEval = getPrevJobsetEval($db, $jobset, 1); + # Clear the "current" flag on all builds. Since we're in a # transaction this will only become visible after the new # current builds have been added. @@ -166,6 +167,9 @@ sub checkJobset { while (my ($id, $new) = each %buildIds) { $ev->jobsetevalmembers->create({ build => $id, isnew => $new }); } + print STDERR " created new eval ", $ev->id, "\n"; + } else { + print STDERR " created cached eval ", $ev->id, "\n"; } });