diff --git a/src/Hydra/lib/Hydra/Base/Controller/ListBuilds.pm b/src/Hydra/lib/Hydra/Base/Controller/ListBuilds.pm index 363b2438..95d91b26 100644 --- a/src/Hydra/lib/Hydra/Base/Controller/ListBuilds.pm +++ b/src/Hydra/lib/Hydra/Base/Controller/ListBuilds.pm @@ -2,7 +2,7 @@ package Hydra::Base::Controller::ListBuilds; use strict; use warnings; -use base 'Catalyst::Controller'; +use base 'Hydra::Base::Controller::NixChannel'; use Hydra::Helper::Nix; use Hydra::Helper::CatalystUtils; @@ -35,4 +35,23 @@ sub all : Chained('get_builds') PathPart { } +sub nix : Chained('get_builds') PathPart('channel') CaptureArgs(1) { + my ($self, $c, $channelName) = @_; + eval { + if ($channelName eq "latest") { + $c->stash->{channelName} = $c->stash->{channelBaseName} . "-latest"; + getChannelData($c, getLatestBuilds($c, $c->stash->{allBuilds}, {buildStatus => 0})); + } + elsif ($channelName eq "all") { + $c->stash->{channelName} = $c->stash->{channelBaseName} . "-all"; + getChannelData($c, [$c->stash->{allBuilds}->all]); + } + else { + error($c, "Unknown channel `$channelName'."); + } + }; + error($c, $@) if $@; +} + + 1; diff --git a/src/Hydra/lib/Hydra/Controller/Project.pm b/src/Hydra/lib/Hydra/Controller/Project.pm index c0a16587..a8b007b0 100644 --- a/src/Hydra/lib/Hydra/Controller/Project.pm +++ b/src/Hydra/lib/Hydra/Controller/Project.pm @@ -3,7 +3,6 @@ package Hydra::Controller::Project; use strict; use warnings; use base 'Hydra::Base::Controller::ListBuilds'; -use base 'Hydra::Base::Controller::NixChannel'; use Hydra::Helper::Nix; use Hydra::Helper::CatalystUtils; @@ -225,21 +224,11 @@ sub updateProject { } -# Hydra::Base::Controller::NixChannel needs this. -sub nix : Chained('project') PathPart('channel/latest') CaptureArgs(0) { - my ($self, $c) = @_; - eval { - $c->stash->{channelName} = $c->stash->{curProject}->name . "-latest"; - getChannelData($c, scalar $c->stash->{curProject}->builds); - }; - error($c, $@) if $@; -} - - # Hydra::Base::Controller::ListBuilds needs this. sub get_builds : Chained('project') PathPart('') CaptureArgs(0) { my ($self, $c) = @_; $c->stash->{allBuilds} = $c->stash->{curProject}->builds; + $c->stash->{channelBaseName} = $c->stash->{curProject}->name; } diff --git a/src/Hydra/lib/Hydra/Controller/Root.pm b/src/Hydra/lib/Hydra/Controller/Root.pm index fa2e41f7..6ffd29cd 100644 --- a/src/Hydra/lib/Hydra/Controller/Root.pm +++ b/src/Hydra/lib/Hydra/Controller/Root.pm @@ -2,7 +2,6 @@ package Hydra::Controller::Root; use strict; use warnings; -use base 'Hydra::Base::Controller::NixChannel'; use base 'Hydra::Base::Controller::ListBuilds'; use Hydra::Helper::Nix; use Hydra::Helper::CatalystUtils; @@ -235,20 +234,11 @@ sub job :Local { } -sub nix : Chained('/') PathPart('channel/latest') CaptureArgs(0) { - my ($self, $c) = @_; - eval { - $c->stash->{channelName} = "hydra-all-latest"; - getChannelData($c, $c->model('DB::Builds')); - }; - error($c, $@) if $@; -} - - # Hydra::Base::Controller::ListBuilds needs this. sub get_builds : Chained('/') PathPart('') CaptureArgs(0) { my ($self, $c) = @_; $c->stash->{allBuilds} = $c->model('DB::Builds'); + $c->stash->{channelBaseName} = "everything"; } diff --git a/src/Hydra/lib/Hydra/Helper/CatalystUtils.pm b/src/Hydra/lib/Hydra/Helper/CatalystUtils.pm index e08f93d8..78170922 100644 --- a/src/Hydra/lib/Hydra/Helper/CatalystUtils.pm +++ b/src/Hydra/lib/Hydra/Helper/CatalystUtils.pm @@ -70,10 +70,8 @@ sub getLatestBuilds { sub getChannelData { my ($c, $builds) = @_; - my @builds = @{getLatestBuilds($c, $builds, {buildStatus => 0})}; - my @storePaths = (); - foreach my $build (@builds) { + foreach my $build (@{$builds}) { # !!! better do this in getLatestBuilds with a join. next unless $build->buildproducts->find({type => "nix-build"}); next unless isValidPath($build->outpath);