BuildDiff: split out from JobsetEval GET impl

[?]
Jan 10, 2022, 7:40 PM
NYIIFA32IHFJIHC5IEAJKOCHXQ7QNR4SN3DDUUPM2GYL3SZNWFDAC

Dependencies

  • [2] HCZ4B6VV PerlCritic: MoreUtils -> SomeUtils
  • [3] LOFYJAHG JobsetEval: allow restarting failed builds even with no eval to compare to
  • [4] K7V2CCD7 Fix an uninitialized value warning
  • [5] L7NUCXKS Show new and removed jobs
  • [6] 3PNG7NIB Remove trailing whitespace
  • [7] X46KWQFN Fix incorrect removed jobs in eval pages
  • [8] EAN5HLLR Jobset eval page: Show all aborted builds under the "aborted jobs" tab
  • [9] 2S7UHICM Allow filtering jobs in eval pages
  • [10] JWFZGHKP Jobset eval page: Fix handling of aborted/cancelled builds
  • [11] DE2DNCOI Allow comparing an evaluation with an arbitrary other evaluation
  • [12] RHUAFTJA Show aborted/cancelled builds separately in jobset eval pages
  • [13] U4TD3AIQ Add support for viewing jobset evaluations
  • [14] WZZOOYCH Show queued builds in jobset evaluation pages
  • [*] D5QIOJGP * Move everything up one directory.

Change contents

  • edit in src/lib/Hydra/Controller/JobsetEval.pm at line 9
    [4.1460]
    [2.91]
    use Hydra::Helper::BuildDiff;
  • replacement in src/lib/Hydra/Controller/JobsetEval.pm at line 79
    [4.474][4.2476:2610](),[4.2476][4.2476:2610](),[4.2610][4.0:58](),[4.58][4.0:34](),[4.34][4.218:249](),[4.249][3.0:30]()
    $c->stash->{stillSucceed} = [];
    $c->stash->{stillFail} = [];
    $c->stash->{nowSucceed} = [];
    $c->stash->{nowFail} = [];
    $c->stash->{new} = [];
    $c->stash->{removed} = [];
    $c->stash->{unfinished} = [];
    $c->stash->{aborted} = [];
    $c->stash->{failed} = [];
    [4.474]
    [4.2610]
    buildDiff(@builds, @builds2);
  • edit in src/lib/Hydra/Controller/JobsetEval.pm at line 81
    [4.2611][4.2611:2660](),[4.2660][4.0:103](),[4.103][4.2660:2675](),[4.173][4.2660:2675](),[4.2660][4.2660:2675](),[4.2675][4.1475:1498](),[4.1498][4.2675:2754](),[4.2675][4.2675:2754](),[4.2754][4.475:523](),[4.523][4.1499:1529](),[4.2914][4.1499:1529](),[4.1529][4.3051:3078](),[4.3051][4.3051:3078](),[4.3078][4.59:81](),[4.81][4.1530:1558](),[4.1558][4.104:245](),[4.245][4.106:249](),[4.245][4.106:249](),[4.460][4.106:249](),[4.106][4.106:249](),[4.249][4.3270:3758](),[4.3270][4.3270:3758](),[4.3758][4.82:136](),[4.3798][4.3798:3812](),[4.3812][4.220:342](),[4.342][4.3812:3840](),[4.3812][4.3812:3840](),[4.3840][4.246:394](),[4.394][3.31:130](),[3.130][4.394:404](),[4.394][4.394:404](),[4.404][4.3840:3846](),[4.1612][4.3840:3846](),[4.3840][4.3840:3846](),[4.3846][4.2210:2211]()
    my $n = 0;
    foreach my $build (@builds) {
    my $aborted = $build->finished != 0 && ($build->buildstatus == 3 || $build->buildstatus == 4);
    my $d;
    my $found = 0;
    while ($n < scalar(@builds2)) {
    my $build2 = $builds2[$n];
    my $d = cmpBuilds($build, $build2);
    last if $d == -1;
    if ($d == 0) {
    $n++;
    $found = 1;
    if ($aborted) {
    # do nothing
    } elsif ($build->finished == 0 || $build2->finished == 0) {
    push @{$c->stash->{unfinished}}, $build;
    } elsif ($build->buildstatus == 0 && $build2->buildstatus == 0) {
    push @{$c->stash->{stillSucceed}}, $build;
    } elsif ($build->buildstatus != 0 && $build2->buildstatus != 0) {
    push @{$c->stash->{stillFail}}, $build;
    } elsif ($build->buildstatus == 0 && $build2->buildstatus != 0) {
    push @{$c->stash->{nowSucceed}}, $build;
    } elsif ($build->buildstatus != 0 && $build2->buildstatus == 0) {
    push @{$c->stash->{nowFail}}, $build;
    } else { die; }
    last;
    }
    push @{$c->stash->{removed}}, { job => $build2->get_column('job'), system => $build2->get_column('system') };
    $n++;
    }
    if ($aborted) {
    push @{$c->stash->{aborted}}, $build;
    } else {
    push @{$c->stash->{new}}, $build if !$found;
    }
    if ($build->buildstatus != 0) {
    push @{$c->stash->{failed}}, $build;
    }
    }
  • file addition: BuildDiff.pm (----------)
    [16.339]
    package Hydra::Helper::BuildDiff;
    use utf8;
    use strict;
    use warnings;
    use base 'Hydra::Base::Controller::NixChannel';
    use Hydra::Helper::Nix;
    use Hydra::Helper::CatalystUtils;
    use List::SomeUtils qw(uniq);
    our @ISA = qw(Exporter);
    our @EXPORT = qw(
    buildDiff
    );
    use Data::Dumper;
    sub buildDiff {
    my ($builds, $builds2) = @_;
    my $ret = [
    stillSucceed => [],
    stillFail => [],
    nowSucceed => [],
    nowFail => [],
    new => [],
    removed => [],
    unfinished => [],
    aborted => [],
    failed => [],
    ];
    my $n = 0;
    foreach my $build (@{$builds}) {
    my $aborted = $build->finished != 0 && ($build->buildstatus == 3 || $build->buildstatus == 4);
    my $d;
    my $found = 0;
    while ($n < scalar($builds2)) {
    my $build2 = @{$builds2}[$n];
    my $d = cmpBuilds($build, $build2);
    last if $d == -1;
    if ($d == 0) {
    $n++;
    $found = 1;
    if ($aborted) {
    # do nothing
    } elsif ($build->finished == 0 || $build2->finished == 0) {
    push @{$ret->{unfinished}}, $build;
    } elsif ($build->buildstatus == 0 && $build2->buildstatus == 0) {
    push @{$ret->{stillSucceed}}, $build;
    } elsif ($build->buildstatus != 0 && $build2->buildstatus != 0) {
    push @{$ret->{stillFail}}, $build;
    } elsif ($build->buildstatus == 0 && $build2->buildstatus != 0) {
    push @{$ret->{nowSucceed}}, $build;
    } elsif ($build->buildstatus != 0 && $build2->buildstatus == 0) {
    push @{$ret->{nowFail}}, $build;
    } else { die; }
    last;
    }
    push @{$ret->{removed}}, { job => $build2->get_column('job'), system => $build2->get_column('system') };
    $n++;
    }
    if ($aborted) {
    push @{$ret->{aborted}}, $build;
    } else {
    push @{$ret->{new}}, $build if !$found;
    }
    if ($build->buildstatus != 0) {
    push @{$ret->{failed}}, $build;
    }
    }
    return $ret;
    }
    1;