* More release -> view.

[?]
Oct 20, 2009, 12:26 PM
2BUX775ILK47LEDXNPSVUAKVLEKG54ODCXRG3474DHY5PHJJBNBQC

Dependencies

  • [2] P5X4P6VK * Renaming "release sets" to "views" (not finished yet). Having
  • [3] 5IK6NYKF
  • [4] H7CNGK4O * Log evaluation errors etc. in the DB.
  • [5] OIUIYIV2 * Give releases a timestamp.
  • [6] ODNCGFQ5 * Improved the navigation bar: don't include all projects (since that
  • [7] IE3SRMWZ * Show global and per-project statistics.
  • [8] G6HJY2V4
  • [9] D5QIOJGP * Move everything up one directory.
  • [10] QU5I5GCL
  • [11] H3DLVNCJ * Support redirecting to some job of a release. For instance, this
  • [12] JFZNAYJX * Showing releases.
  • [13] FHF6IZJQ * Basic release management: releases are now dynamically computed as
  • [14] 75XUS62Y * Added a page to quickly see all failed builds and failed evaluations
  • [15] H5REHM3M
  • [16] JLDUSNUO * Unify rendering of finished and scheduled builds.
  • [17] UWVMQIAC * Refactoring.
  • [*] FPK5LF53 * Put the project-related actions in a separate controller. Put the
  • [*] IK53RV4V

Change contents

  • edit in src/lib/Hydra/Controller/Project.pm at line 180
    [3.1097]
    [19.9369]
    }
    sub create_view_submit : Chained('project') PathPart('create-view/submit') Args(0) {
    my ($self, $c) = @_;
    requireProjectOwner($c, $c->stash->{project});
    my $viewName = $c->request->params->{name};
    my $view;
    txn_do($c->model('DB')->schema, sub {
    # Note: $viewName is validated in updateView, which will abort
    # the transaction if the name isn't valid.
    $view = $c->stash->{project}->views->create({name => $viewName});
    Hydra::Controller::View::updateView($c, $view);
    });
    $c->res->redirect($c->uri_for($c->controller('View')->action_for('view_view'),
    [$c->stash->{project}->name, $view->name]));
  • edit in src/lib/Hydra/Controller/Project.pm at line 201
    [19.9371]
    [19.9371]
  • edit in src/lib/Hydra/Controller/Project.pm at line 203
    [19.9372]
    [19.9372]
    sub create_view : Chained('project') PathPart('create-view') Args(0) {
    my ($self, $c) = @_;
  • edit in src/lib/Hydra/Controller/Project.pm at line 206
    [19.9373]
    [19.9373]
    requireProjectOwner($c, $c->stash->{project});
    $c->stash->{template} = 'edit-view.tt';
    $c->stash->{create} = 1;
    }
  • replacement in src/lib/Hydra/Controller/View.pm at line 33
    [2.1311][2.1311:1365]()
    sub updateReleaseSet {
    my ($c, $releaseSet) = @_;
    [2.1311]
    [2.1365]
    sub updateView {
    my ($c, $view) = @_;
  • replacement in src/lib/Hydra/Controller/View.pm at line 36
    [2.1370][2.1370:1546]()
    my $releaseSetName = trim $c->request->params->{name};
    error($c, "Invalid release set name: $releaseSetName")
    unless $releaseSetName =~ /^[[:alpha:]][\w\-]*$/;
    [2.1370]
    [2.1546]
    my $viewName = trim $c->request->params->{name};
    error($c, "Invalid view name: $viewName")
    unless $viewName =~ /^[[:alpha:]][\w\-]*$/;
  • replacement in src/lib/Hydra/Controller/View.pm at line 40
    [2.1551][2.1551:1610]()
    $releaseSet->update(
    { name => $releaseSetName
    [2.1551]
    [2.1610]
    $view->update(
    { name => $viewName
  • replacement in src/lib/Hydra/Controller/View.pm at line 44
    [2.1680][2.1680:1725]()
    $releaseSet->releasesetjobs->delete_all;
    [2.1680]
    [2.1725]
    $view->viewjobs->delete_all;
  • replacement in src/lib/Hydra/Controller/View.pm at line 59
    [2.2277][2.2277:2356]()
    unless $releaseSet->project->jobsets->find({name => $jobsetName});
    [2.2277]
    [2.2356]
    unless $view->project->jobsets->find({name => $jobsetName});
  • replacement in src/lib/Hydra/Controller/View.pm at line 65
    [2.2525][2.2525:2570]()
    $releaseSet->releasesetjobs->create(
    [2.2525]
    [2.2570]
    $view->viewjobs->create(
  • replacement in src/lib/Hydra/Controller/View.pm at line 75
    [2.2860][2.2860:2938]()
    if $releaseSet->releasesetjobs->search({isprimary => 1})->count != 1;
    [2.2860]
    [2.2938]
    if $view->viewjobs->search({isprimary => 1})->count != 1;
  • replacement in src/lib/Hydra/Controller/View.pm at line 101
    [2.3675][2.3675:3795]()
    $c->stash->{baseUri} = $c->uri_for($self->action_for("view"), $c->stash->{project}->name, $c->stash->{view}->name);
    [2.3675]
    [2.3795]
    $c->stash->{baseUri} = $c->uri_for($self->action_for("view_view"), $c->req->captures);
  • edit in src/lib/Hydra/Controller/View.pm at line 113
    [2.4195]
    [2.4195]
    }
    sub submit : Chained('view') PathPart('submit') Args(0) {
    my ($self, $c) = @_;
    requireProjectOwner($c, $c->stash->{project});
    txn_do($c->model('DB')->schema, sub {
    updateView($c, $c->stash->{view});
    });
    $c->res->redirect($c->uri_for($self->action_for("view_view"), $c->req->captures));
  • edit in src/lib/Hydra/Controller/View.pm at line 126
    [2.4203]
    [2.4203]
    sub delete : Chained('view') PathPart('delete') Args(0) {
    my ($self, $c) = @_;
    requireProjectOwner($c, $c->stash->{project});
    txn_do($c->model('DB')->schema, sub {
    $c->stash->{view}->delete;
    });
    $c->res->redirect($c->uri_for($c->controller('Project')->action_for('view'), [$c->stash->{project}->name]));
    }
  • replacement in src/lib/Hydra/Controller/View.pm at line 144
    [2.4583][2.4583:4708]()
    return $c->res->redirect($c->uri_for("/view", $c->stash->{project}->name, $c->stash->{view}->name, $latest->id, @args));
    [2.4583]
    [2.4708]
    $c->res->redirect($c->uri_for($self->action_for("view_view"), $c->req->captures, $latest->id, @args));
  • replacement in src/lib/Hydra/Controller/View.pm at line 151
    [2.4798][2.4798:4840]()
    $c->stash->{template} = 'release.tt';
    [2.4798]
    [2.4840]
    $c->stash->{template} = 'view-result.tt';
  • replacement in src/lib/Hydra/Controller/View.pm at line 161
    [2.5205][2.5205:5278]()
    $c->stash->{release} = getRelease($primaryBuild, $c->stash->{jobs});
    [2.5205]
    [2.5278]
    $c->stash->{result} = getRelease($primaryBuild, $c->stash->{jobs});
  • replacement in src/lib/Hydra/Controller/View.pm at line 163
    [2.5279][2.5279:5634]()
    # Provide a redirect to the specified job of this release. !!!
    # This isn't uniquely defined if there are multiple jobs with the
    # same name (e.g. builds for different platforms). However, this
    # mechanism is primarily to allow linking to resources of which
    # there is only one build, such as the manual of the latest
    # release.
    [2.5279]
    [2.5634]
    # Provide a redirect to the specified job of this view result.
    # !!! This isn't uniquely defined if there are multiple jobs with
    # the same name (e.g. builds for different platforms). However,
    # this mechanism is primarily to allow linking to resources of
    # which there is only one build, such as the manual of the latest
    # view result.
  • replacement in src/lib/Hydra/Controller/View.pm at line 171
    [2.5698][2.5698:5869]()
    (my $build, my @others) = grep { $_->{job}->job eq $jobName } @{$c->stash->{release}->{jobs}};
    notFound($c, "Release doesn't have a job named `$jobName'")
    [2.5698]
    [2.5869]
    (my $build, my @others) = grep { $_->{job}->job eq $jobName } @{$c->stash->{result}->{jobs}};
    notFound($c, "View doesn't have a job named `$jobName'")
  • replacement in src/root/common.tt at line 162
    [3.1509][3.2830:2864]()
    [% BLOCK renderReleaseJobName -%]
    [3.1509]
    [3.2864]
    [% BLOCK renderViewJobName -%]
  • replacement in src/root/edit-view.tt at line 24
    [3.940][2.10005:10179]()
    <form action="[% IF create %][% c.uri_for('/create-view' project.name 'submit') %][% ELSE %][% c.uri_for('/view' project.name view.name 'submit') %][% END %]" method="post">
    [3.940]
    [3.2208]
    <form action="[% IF create %][% c.uri_for('/project' project.name 'create-view/submit') %][% ELSE %][% c.uri_for('/view' project.name view.name 'submit') %][% END %]" method="post">
  • file move: release.tt (----------)view-result.tt (----------)
    [3.1486]
    [3.7246]
  • replacement in src/root/view-result.tt at line 1
    [3.7246][3.7247:7358]()
    [% releaseName = (release.releasename || "(No name)") -%]
    [% WRAPPER layout.tt title="Release $releaseName" %]
    [3.7246]
    [3.7358]
    [% releaseName = (result.releasename || "(No name)") -%]
    [% WRAPPER layout.tt title="View $releaseName" %]
  • replacement in src/root/view-result.tt at line 7
    [3.7430][3.7430:7474]()
    <h1>Release <tt>[% releaseName %]</tt></h1>
    [3.7430]
    [3.91]
    <h1>View <tt>[% view.project.name %]:[% view.name %]</tt> result [% result.id %][% IF result.releasename %] (<tt>[% result.releasename %]</tt>)[% END %]</h1>
  • replacement in src/root/view-result.tt at line 9
    [3.92][3.92:180]()
    <p><em>Released on [% INCLUDE renderDateTime timestamp = release.timestamp %].</em></p>
    [3.92]
    [3.7474]
    <p><em>Finished building on [% INCLUDE renderDateTime timestamp = result.timestamp %].</em></p>
  • replacement in src/root/view-result.tt at line 11
    [3.7475][3.7475:7755]()
    [% IF release.status == 1 %]
    <p class="error">This is a failed release. One of its jobs has failed. See below for details.</p>
    [% ELSIF release.status == 2 %]
    <p class="error">This is an incomplete release. One of its jobs has not been built (yet). See below for details.</p>
    [3.7475]
    [3.7755]
    [% IF result.status == 1 %]
    <p class="error">Note: One or more of the jobs in the view did not build correctly. See below for details.</p>
    [% ELSIF result.status == 2 %]
    <p class="error">Note: One or more of the jobs in the view have not been built (yet). See below for details.</p>
  • replacement in src/root/view-result.tt at line 17
    [3.7766][3.22703:22735]()
    [% FOREACH j IN release.jobs %]
    [3.7766]
    [3.7800]
    [% FOREACH j IN result.jobs %]
  • replacement in src/root/view-result.tt at line 21
    [3.1426][3.22815:22864](),[3.22815][3.22815:22864]()
    [% INCLUDE renderReleaseJobName job=j.job %]
    [3.1426]
    [3.22864]
    [% INCLUDE renderViewJobName job=j.job %]
  • replacement in src/root/view-result.tt at line 29
    [3.8059][3.1427:1551]()
    [% INCLUDE renderProductList build=j.build latestRoot=['/release' project.name releaseSet.name 'latest' j.job.job] %]
    [3.8059]
    [3.8113]
    [% INCLUDE renderProductList build=j.build latestRoot=['/view' project.name view.name 'latest' j.job.job] %]
  • replacement in src/root/view.tt at line 22
    [3.23052][3.23052:23136]()
    <th class="releaseSetJobName">[% INCLUDE renderReleaseJobName job=j %]</th>
    [3.23052]
    [3.8857]
    <th class="releaseSetJobName">[% INCLUDE renderViewJobName job=j %]</th>