* Refactoring.

[?]
Mar 13, 2009, 3:41 PM
UWVMQIAC2HQNSG2JQOPZGUOCQ5V2JFP2F7RCTF3WJLK7NHSD5PAAC

Dependencies

  • [2] RP6WDKE2
  • [3] AKAZKCR6 * At top-level and for each project, provide two channels: "latest"
  • [4] 3HZY24CX * Make jobsets viewable under
  • [5] S66BOMVU * Added authentication.
  • [6] 2AIIYGI5 * Show job status and all builds for a project.
  • [7] ECBA3GQO * Make the schema class names match the case of the SQL table names.
  • [8] HCKFTNQ6
  • [9] D5QIOJGP * Move everything up one directory.
  • [10] QU5I5GCL
  • [11] G6HJY2V4
  • [12] I35CIZI7
  • [13] NDL67SQT * XHTML validity.
  • [14] JFZNAYJX * Showing releases.
  • [15] 5IK6NYKF
  • [16] DEMSSSB2 * Controller for jobs which inherits all actions in ListBuilds. So
  • [17] US27ZTX5 * HydraFrontend -> Hydra.
  • [18] 3E6IP3R3 * Add the name of the jobset to ReleaseSetJobs, otherwise we can't
  • [19] 7UJ5YV4V * Provide a channel for each project containing all the latest
  • [20] V4RNHJNR * Add a link to each project's homepage. Suggested by karltk.
  • [21] ZNFDFJHG * Provide a redirect to the latest successful release in a release set
  • [22] A52HEFHQ * Allow builds to be restarted (if they failed with a transient error,
  • [23] YTSIRIMK * Separate job status and all builds pages.
  • [24] LQ5QEDVV
  • [25] JD27RBKM
  • [26] LBNVQXUB * Build the /build stuff in a separate controller.
  • [27] W6DC6K4I * Happy Javascript hacking.
  • [28] 6LTPI6B2
  • [29] GNIEG2GC * Disambiguate jobs by jobset name. I.e. jobs with the same name in
  • [30] EYNG4EL4 * Regenerate the bindings from a clean sqlite database.
  • [31] GCHNNFZP
  • [32] 2AUODJBT
  • [33] IK53RV4V
  • [34] 5NO7NCKT * Refactoring.
  • [35] OD5FSS5A * Quick hack to allow viewing of dependency graphs (via nix-store -q
  • [36] FPK5LF53 * Put the project-related actions in a separate controller. Put the
  • [37] 7YBYT2LQ
  • [38] IGNQFFV7 * Put the release sets in the navbar.
  • [39] PBFZEQLZ
  • [40] IN272KZW * Automatically keep all builds in the latest successful release in
  • [41] TQKGQ5R3
  • [42] FHF6IZJQ * Basic release management: releases are now dynamically computed as
  • [43] RU7AQO7U * Role-based access control. Only admins can create projects. Only
  • [*] J5UVLXOK * Start of a basic Catalyst web interface.

Change contents

  • replacement in src/lib/Hydra/Controller/Build.pm at line 20
    [5.623][5.623:682]()
    $c->stash->{curProject} = $c->stash->{build}->project;
    [5.623]
    [5.682]
    $c->stash->{project} = $c->stash->{build}->project;
  • replacement in src/lib/Hydra/Controller/Job.pm at line 13
    [5.119][5.119:290](),[5.290][5.320:321](),[5.320][5.320:321](),[5.321][5.291:476](),[5.476][5.321:358](),[5.321][5.321:358]()
    # !!! cut&paste from Project::project.
    my $project = $c->model('DB::Projects')->find($projectName)
    or notFound($c, "Project $projectName doesn't exist.");
    $c->stash->{curProject} = $project;
    $c->stash->{jobset} = $project->jobsets->find({name => $jobsetName})
    or notFound($c, "Jobset $jobsetName doesn't exist.");
    $c->stash->{jobName} = $jobName;
    [5.119]
    [5.427]
    $c->stash->{job} = $c->model('DB::Jobs')->find({project => $projectName, jobset => $jobsetName, name => $jobName})
    or notFound($c, "Job $projectName:$jobsetName:$jobName doesn't exist.");
    $c->stash->{project} = $c->stash->{job}->project;
    $c->stash->{jobset} = $c->stash->{job}->jobset;
  • replacement in src/lib/Hydra/Controller/Job.pm at line 29
    [5.685][5.685:714](),[5.714][5.477:553]()
    $c->stash->{allBuilds} =
    $c->stash->{jobset}->builds->search({job => $c->stash->{jobName}});
    [5.685]
    [5.799]
    $c->stash->{allBuilds} = $c->stash->{job}->builds;
  • replacement in src/lib/Hydra/Controller/Job.pm at line 31
    [5.834][4.0:102]()
    $c->stash->{curProject}->name . "-" . $c->stash->{jobset}->name . "-" . $c->stash->{jobName};
    [5.834]
    [5.902]
    $c->stash->{project}->name . "-" . $c->stash->{jobset}->name . "-" . $c->stash->{job}->name;
  • replacement in src/lib/Hydra/Controller/Jobset.pm at line 16
    [4.519][4.519:559]()
    $c->stash->{curProject} = $project;
    [4.519]
    [4.559]
    $c->stash->{project} = $project;
  • replacement in src/lib/Hydra/Controller/Jobset.pm at line 35
    [4.1064][4.1064:1137]()
    $c->stash->{curProject}->name . "-" . $c->stash->{jobset}->name;
    [4.1064]
    [4.1137]
    $c->stash->{project}->name . "-" . $c->stash->{jobset}->name;
  • replacement in src/lib/Hydra/Controller/Project.pm at line 16
    [5.1713][5.1713:1753]()
    $c->stash->{curProject} = $project;
    [5.1713]
    [5.1753]
    $c->stash->{project} = $project;
  • replacement in src/lib/Hydra/Controller/Project.pm at line 25
    [5.1879][5.1879:1942]()
    getBuildStats($c, scalar $c->stash->{curProject}->builds);
    [5.1879]
    [5.1942]
    getBuildStats($c, scalar $c->stash->{project}->builds);
  • replacement in src/lib/Hydra/Controller/Project.pm at line 32
    [5.2021][5.2021:2075]()
    requireProjectOwner($c, $c->stash->{curProject});
    [5.2021]
    [5.2075]
    requireProjectOwner($c, $c->stash->{project});
  • replacement in src/lib/Hydra/Controller/Project.pm at line 42
    [5.2226][5.2226:2280]()
    requireProjectOwner($c, $c->stash->{curProject});
    [5.2226]
    [5.2280]
    requireProjectOwner($c, $c->stash->{project});
  • replacement in src/lib/Hydra/Controller/Project.pm at line 47
    [5.2403][5.2403:2455]()
    updateProject($c, $c->stash->{curProject});
    [5.2403]
    [5.2455]
    updateProject($c, $c->stash->{project});
  • replacement in src/lib/Hydra/Controller/Project.pm at line 57
    [5.2631][5.2631:2685]()
    requireProjectOwner($c, $c->stash->{curProject});
    [5.2631]
    [5.2685]
    requireProjectOwner($c, $c->stash->{project});
  • replacement in src/lib/Hydra/Controller/Project.pm at line 62
    [5.2808][5.2808:2849]()
    $c->stash->{curProject}->delete;
    [5.2808]
    [5.2849]
    $c->stash->{project}->delete;
  • replacement in src/lib/Hydra/Controller/Project.pm at line 227
    [5.9307][5.9307:9369](),[5.9369][3.707:773]()
    $c->stash->{allBuilds} = $c->stash->{curProject}->builds;
    $c->stash->{channelBaseName} = $c->stash->{curProject}->name;
    [5.9307]
    [5.9369]
    $c->stash->{allBuilds} = $c->stash->{project}->builds;
    $c->stash->{channelBaseName} = $c->stash->{project}->name;
  • replacement in src/lib/Hydra/Controller/Root.pm at line 71
    [5.1994][5.315:355](),[5.315][5.315:355]()
    $c->stash->{curProject} = $project;
    [5.1994]
    [5.355]
    $c->stash->{project} = $project;
  • replacement in src/lib/Hydra/Controller/Root.pm at line 82
    [5.140][5.687:727](),[5.687][5.687:727]()
    $c->stash->{curProject} = $project;
    [5.140]
    [5.727]
    $c->stash->{project} = $project;
  • replacement in src/lib/Hydra/Controller/Root.pm at line 178
    [5.455][5.455:495]()
    $c->stash->{curProject} = $project;
    [5.455]
    [5.545]
    $c->stash->{project} = $project;
  • replacement in src/root/all.tt at line 5
    [5.956][4.1179:1412]()
    [% IF jobName %]for Job [% curProject.name %]:[% jobset.name %]:[% jobName %]
    [% ELSIF jobset %]for Jobset [% curProject.name %]:[% jobset.name %]
    [% ELSIF curProject %] for Project <tt>[% curProject.name %]</tt>[% END %]</h1>
    [5.956]
    [5.1127]
    [% IF job %]for Job [% project.name %]:[% jobset.name %]:[% job.name %]
    [% ELSIF jobset %]for Jobset [% project.name %]:[% jobset.name %]
    [% ELSIF project %] for Project <tt>[% project.name %]</tt>[% END %]</h1>
  • replacement in src/root/edit-releaseset.tt at line 1
    [5.1873][5.1507:1622]()
    [% WRAPPER layout.tt title=(create ? "New Release Set" : "Release Set ‘$curProject.name:$releaseSet.name’") %]
    [5.1873]
    [5.1959]
    [% WRAPPER layout.tt title=(create ? "New Release Set" : "Release Set ‘$project.name:$releaseSet.name’") %]
  • replacement in src/root/edit-releaseset.tt at line 5
    [5.1999][5.1623:1746]()
    <h1>[% IF create %]New Release Set[% ELSE %]Release Set <tt>[% curProject.name %]:[% releaseSet.name %]</tt>[% END %]</h1>
    [5.1999]
    [5.73]
    <h1>[% IF create %]New Release Set[% ELSE %]Release Set <tt>[% project.name %]:[% releaseSet.name %]</tt>[% END %]</h1>
  • replacement in src/root/edit-releaseset.tt at line 24
    [5.940][5.1747:1943]()
    <form action="[% IF create %][% c.uri_for('/create_releaseset' curProject.name 'submit') %][% ELSE %][% c.uri_for('/releases' curProject.name releaseSet.name 'submit') %][% END %]" method="post">
    [5.940]
    [5.2208]
    <form action="[% IF create %][% c.uri_for('/create_releaseset' project.name 'submit') %][% ELSE %][% c.uri_for('/releases' project.name releaseSet.name 'submit') %][% END %]" method="post">
  • replacement in src/root/edit-releaseset.tt at line 89
    [5.1962][5.1962:2064]()
    <form action="[% c.uri_for('/releases' curProject.name releaseSet.name 'delete') %]" method="post">
    [5.1962]
    [5.2064]
    <form action="[% c.uri_for('/releases' project.name releaseSet.name 'delete') %]" method="post">
  • replacement in src/root/jobstatus.tt at line 4
    [5.1976][5.8047:8137]()
    <h1>Job Status[% IF curProject %] of Project <tt>[% curProject.name %]</tt>[% END %]</h1>
    [5.1976]
    [5.1996]
    <h1>Job Status[% IF project %] of Project <tt>[% project.name %]</tt>[% END %]</h1>
  • replacement in src/root/layout.tt at line 102
    [5.1317][5.4173:4221](),[5.4173][5.4173:4221](),[5.4221][5.1318:1416](),[5.1416][5.1612:1749](),[5.1749][5.1540:1599](),[5.1540][5.1540:1599]()
    [% FOREACH project IN projects %]
    <li [% IF curUri == c.uri_for('/project' project.name) %]class="active"[% END %]>
    <div class="title"><a href="[% c.uri_for('/project' project.name) %]">[% HTML.escape(project.displayname) %]</a></div>
    [% IF curProject.name == project.name %]
    [5.1317]
    [5.1599]
    [% FOREACH project_ IN projects %]
    <li [% IF curUri == c.uri_for('/project' project_.name) %]class="active"[% END %]>
    <div class="title"><a href="[% c.uri_for('/project' project_.name) %]">[% HTML.escape(project_.displayname) %]</a></div>
    [% IF project.name == project_.name %]
  • edit in src/root/layout.tt at line 123
    [5.745][5.2414:2437](),[5.2437][5.745:746](),[5.745][5.745:746]()
  • replacement in src/root/project.tt at line 1
    [5.1667][5.2316:2458]()
    [% WRAPPER layout.tt title=(edit ? (create ? "New Project" : "Editing Project ‘$curProject.name’") : "Project ‘$curProject.name’") %]
    [5.1667]
    [5.3183]
    [% WRAPPER layout.tt title=(edit ? (create ? "New Project" : "Editing Project ‘$project.name’") : "Project ‘$project.name’") %]
  • replacement in src/root/project.tt at line 136
    [5.2884][5.11739:11899]()
    <form action="[% IF create %][% c.uri_for('/create-project/submit') %][% ELSE %][% c.uri_for('/project' curProject.name 'submit') %][% END %]" method="post">
    [5.2884]
    [5.3043]
    <form action="[% IF create %][% c.uri_for('/create-project/submit') %][% ELSE %][% c.uri_for('/project' project.name 'submit') %][% END %]" method="post">
  • replacement in src/root/project.tt at line 143
    [5.3105][5.3105:3155]()
    <h1>Project <tt>[% curProject.name %]</tt></h1>
    [5.3105]
    [5.3155]
    <h1>Project <tt>[% project.name %]</tt></h1>
  • replacement in src/root/project.tt at line 153
    [5.3253][5.3253:3340]()
    <td><tt>[% INCLUDE maybeEditString param="name" value=curProject.name %]</tt></td>
    [5.3253]
    [5.3340]
    <td><tt>[% INCLUDE maybeEditString param="name" value=project.name %]</tt></td>
  • replacement in src/root/project.tt at line 158
    [5.3394][5.3394:3486]()
    <td>[% INCLUDE maybeEditString param="displayname" value=curProject.displayname %]</td>
    [5.3394]
    [5.3486]
    <td>[% INCLUDE maybeEditString param="displayname" value=project.displayname %]</td>
  • replacement in src/root/project.tt at line 162
    [5.3527][5.3527:3619]()
    <td>[% INCLUDE maybeEditString param="description" value=curProject.description %]</td>
    [5.3527]
    [5.2712]
    <td>[% INCLUDE maybeEditString param="description" value=project.description %]</td>
  • replacement in src/root/project.tt at line 168
    [5.2779][5.2779:2860]()
    [% INCLUDE maybeEditString param="homepage" value=curProject.homepage %]
    [5.2779]
    [5.2860]
    [% INCLUDE maybeEditString param="homepage" value=project.homepage %]
  • replacement in src/root/project.tt at line 170
    [5.2877][5.2877:3021]()
    [% IF curProject.homepage %]
    <a [% HTML.attributes(href => curProject.homepage) %]>[% HTML.escape(curProject.homepage) %]</a>
    [5.2877]
    [5.3021]
    [% IF project.homepage %]
    <a [% HTML.attributes(href => project.homepage) %]>[% HTML.escape(project.homepage) %]</a>
  • replacement in src/root/project.tt at line 180
    [5.5290][5.3509:3650]()
    <td><tt>[% INCLUDE maybeEditString param="owner" value=curProject.owner.username edit=(edit && c.check_user_roles('admin')) %]</tt></td>
    [5.5290]
    [5.3619]
    <td><tt>[% INCLUDE maybeEditString param="owner" value=project.owner.username edit=(edit && c.check_user_roles('admin')) %]</tt></td>
  • replacement in src/root/project.tt at line 185
    [5.4009][5.4009:4123]()
    [% INCLUDE renderSelection param="enabled" curValue=curProject.enabled options={"1" = "Yes", "0" = "No"} %]
    [5.4009]
    [5.4123]
    [% INCLUDE renderSelection param="enabled" curValue=project.enabled options={"1" = "Yes", "0" = "No"} %]
  • replacement in src/root/project.tt at line 202
    [5.3656][5.3656:3723]()
    [% IF curProject.jobsets && curProject.jobsets.size > 0 || edit %]
    [5.3656]
    [5.3723]
    [% IF project.jobsets && project.jobsets.size > 0 || edit %]
  • replacement in src/root/project.tt at line 253
    [5.2673][5.4595:4641]()
    [% FOREACH jobset IN curProject.jobsets -%]
    [5.2673]
    [5.4641]
    [% FOREACH jobset IN project.jobsets -%]
  • replacement in src/root/project.tt at line 274
    [5.4888][5.4888:4975]()
    <form action="[% c.uri_for('/project' curProject.name 'delete') %]" method="post">
    [5.4888]
    [5.4276]
    <form action="[% c.uri_for('/project' project.name 'delete') %]" method="post">
  • replacement in src/root/releases.tt at line 8
    [5.1077][5.1077:1258]()
    [<a href="[% c.uri_for('/releases' curProject.name releaseSet.name "edit") %]">Edit</a>]
    [<a href="[% c.uri_for('/release' curProject.name releaseSet.name "latest") %]">Latest</a>]
    [5.1077]
    [5.1258]
    [<a href="[% c.uri_for('/releases' project.name releaseSet.name "edit") %]">Edit</a>]
    [<a href="[% c.uri_for('/release' project.name releaseSet.name "latest") %]">Latest</a>]
  • replacement in src/root/releasesets.tt at line 8
    [5.10194][5.10194:10272]()
    <p>Project <tt>[% curProject.name %]</tt> has the following release sets:</p>
    [5.10194]
    [5.10272]
    <p>Project <tt>[% project.name %]</tt> has the following release sets:</p>
  • replacement in src/root/releasesets.tt at line 13
    [5.2791][5.2791:2903](),[5.2903][5.845:940]()
    <a href="[% c.uri_for('/releases' curProject.name releaseSet.name) %]"><tt>[% releaseSet.name %]</tt></a>
    [<a href="[% c.uri_for('/releases' curProject.name releaseSet.name "edit") %]">Edit</a>]
    [5.2791]
    [5.2998]
    <a href="[% c.uri_for('/releases' project.name releaseSet.name) %]"><tt>[% releaseSet.name %]</tt></a>
    [<a href="[% c.uri_for('/releases' project.name releaseSet.name "edit") %]">Edit</a>]
  • replacement in src/root/releasesets.tt at line 21
    [2.44][2.44:111]()
    <p>Project <tt>[% curProject.name %]</tt> has no release sets.</p>
    [2.44]
    [2.111]
    <p>Project <tt>[% project.name %]</tt> has no release sets.</p>
  • replacement in src/root/releasesets.tt at line 26
    [2.124][5.2369:2471](),[5.2369][5.2369:2471]()
    <p>[<a href="[% c.uri_for('/create_releaseset' curProject.name) %]">Create a new release set</a>]</p>
    [2.124]
    [5.10457]
    <p>[<a href="[% c.uri_for('/create_releaseset' project.name) %]">Create a new release set</a>]</p>