forked from lix-project/hydra
When renaming a jobset, add a redirect from the old name
This commit is contained in:
parent
5a5f1e42e6
commit
5e0d10a392
|
@ -20,8 +20,11 @@ sub jobsetChain :Chained('/') :PathPart('jobset') :CaptureArgs(2) {
|
||||||
|
|
||||||
$c->stash->{jobset} = $project->jobsets->find({ name => $jobsetName });
|
$c->stash->{jobset} = $project->jobsets->find({ name => $jobsetName });
|
||||||
|
|
||||||
notFound($c, "Jobset ‘$jobsetName’ doesn't exist.")
|
if (!$c->stash->{jobset} && !($c->action->name eq "jobset" and $c->request->method eq "PUT")) {
|
||||||
if !$c->stash->{jobset} && !($c->action->name eq "jobset" and $c->request->method eq "PUT");
|
my $rename = $project->jobsetrenames->find({ from_ => $jobsetName });
|
||||||
|
notFound($c, "Jobset ‘$jobsetName’ doesn't exist.") unless defined $rename;
|
||||||
|
$c->stash->{jobset} = $project->jobsets->find({ name => $rename->to_ }) or die;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -193,11 +196,12 @@ sub checkInputValue {
|
||||||
sub updateJobset {
|
sub updateJobset {
|
||||||
my ($c, $jobset) = @_;
|
my ($c, $jobset) = @_;
|
||||||
|
|
||||||
|
my $oldName = $jobset->name;
|
||||||
my $jobsetName = $c->stash->{params}->{name};
|
my $jobsetName = $c->stash->{params}->{name};
|
||||||
error($c, "Invalid jobset identifier ‘$jobsetName’.") if $jobsetName !~ /^$jobsetNameRE$/;
|
error($c, "Invalid jobset identifier ‘$jobsetName’.") if $jobsetName !~ /^$jobsetNameRE$/;
|
||||||
|
|
||||||
error($c, "Cannot rename jobset to ‘$jobsetName’ since that identifier is already taken.")
|
error($c, "Cannot rename jobset to ‘$jobsetName’ since that identifier is already taken.")
|
||||||
if $jobsetName ne $jobset->name && defined $c->stash->{project}->jobsets->find({ name => $jobsetName });
|
if $jobsetName ne $oldName && defined $c->stash->{project}->jobsets->find({ name => $jobsetName });
|
||||||
|
|
||||||
# When the expression is in a .scm file, assume it's a Guile + Guix
|
# When the expression is in a .scm file, assume it's a Guile + Guix
|
||||||
# build expression.
|
# build expression.
|
||||||
|
@ -224,6 +228,10 @@ sub updateJobset {
|
||||||
, schedulingshares => int($c->stash->{params}->{schedulingshares})
|
, schedulingshares => int($c->stash->{params}->{schedulingshares})
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$jobset->project->jobsetrenames->search({ from_ => $jobsetName })->delete;
|
||||||
|
$jobset->project->jobsetrenames->create({ from_ => $oldName, to_ => $jobsetName })
|
||||||
|
if $jobsetName ne $oldName;
|
||||||
|
|
||||||
# Set the inputs of this jobset.
|
# Set the inputs of this jobset.
|
||||||
$jobset->jobsetinputs->delete;
|
$jobset->jobsetinputs->delete;
|
||||||
|
|
||||||
|
|
118
src/lib/Hydra/Schema/JobsetRenames.pm
Normal file
118
src/lib/Hydra/Schema/JobsetRenames.pm
Normal file
|
@ -0,0 +1,118 @@
|
||||||
|
use utf8;
|
||||||
|
package Hydra::Schema::JobsetRenames;
|
||||||
|
|
||||||
|
# Created by DBIx::Class::Schema::Loader
|
||||||
|
# DO NOT MODIFY THE FIRST PART OF THIS FILE
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
Hydra::Schema::JobsetRenames
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
use base 'DBIx::Class::Core';
|
||||||
|
|
||||||
|
=head1 COMPONENTS LOADED
|
||||||
|
|
||||||
|
=over 4
|
||||||
|
|
||||||
|
=item * L<Hydra::Component::ToJSON>
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
__PACKAGE__->load_components("+Hydra::Component::ToJSON");
|
||||||
|
|
||||||
|
=head1 TABLE: C<JobsetRenames>
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
__PACKAGE__->table("JobsetRenames");
|
||||||
|
|
||||||
|
=head1 ACCESSORS
|
||||||
|
|
||||||
|
=head2 project
|
||||||
|
|
||||||
|
data_type: 'text'
|
||||||
|
is_foreign_key: 1
|
||||||
|
is_nullable: 0
|
||||||
|
|
||||||
|
=head2 from_
|
||||||
|
|
||||||
|
data_type: 'text'
|
||||||
|
is_nullable: 0
|
||||||
|
|
||||||
|
=head2 to_
|
||||||
|
|
||||||
|
data_type: 'text'
|
||||||
|
is_foreign_key: 1
|
||||||
|
is_nullable: 0
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
__PACKAGE__->add_columns(
|
||||||
|
"project",
|
||||||
|
{ data_type => "text", is_foreign_key => 1, is_nullable => 0 },
|
||||||
|
"from_",
|
||||||
|
{ data_type => "text", is_nullable => 0 },
|
||||||
|
"to_",
|
||||||
|
{ data_type => "text", is_foreign_key => 1, is_nullable => 0 },
|
||||||
|
);
|
||||||
|
|
||||||
|
=head1 PRIMARY KEY
|
||||||
|
|
||||||
|
=over 4
|
||||||
|
|
||||||
|
=item * L</project>
|
||||||
|
|
||||||
|
=item * L</from_>
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
__PACKAGE__->set_primary_key("project", "from_");
|
||||||
|
|
||||||
|
=head1 RELATIONS
|
||||||
|
|
||||||
|
=head2 jobset
|
||||||
|
|
||||||
|
Type: belongs_to
|
||||||
|
|
||||||
|
Related object: L<Hydra::Schema::Jobsets>
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
__PACKAGE__->belongs_to(
|
||||||
|
"jobset",
|
||||||
|
"Hydra::Schema::Jobsets",
|
||||||
|
{ name => "to_", project => "project" },
|
||||||
|
{ is_deferrable => 0, on_delete => "CASCADE", on_update => "CASCADE" },
|
||||||
|
);
|
||||||
|
|
||||||
|
=head2 project
|
||||||
|
|
||||||
|
Type: belongs_to
|
||||||
|
|
||||||
|
Related object: L<Hydra::Schema::Projects>
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
__PACKAGE__->belongs_to(
|
||||||
|
"project",
|
||||||
|
"Hydra::Schema::Projects",
|
||||||
|
{ name => "project" },
|
||||||
|
{ is_deferrable => 0, on_delete => "CASCADE", on_update => "CASCADE" },
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
# Created by DBIx::Class::Schema::Loader v0.07033 @ 2014-04-23 23:13:51
|
||||||
|
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:SBpKWF9swFc9T1Uc0VFlgA
|
||||||
|
|
||||||
|
|
||||||
|
# You can replace this text with custom code or comments, and it will be preserved on regeneration
|
||||||
|
1;
|
|
@ -271,6 +271,21 @@ __PACKAGE__->has_many(
|
||||||
undef,
|
undef,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
=head2 jobsetrenames
|
||||||
|
|
||||||
|
Type: has_many
|
||||||
|
|
||||||
|
Related object: L<Hydra::Schema::JobsetRenames>
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
__PACKAGE__->has_many(
|
||||||
|
"jobsetrenames",
|
||||||
|
"Hydra::Schema::JobsetRenames",
|
||||||
|
{ "foreign.project" => "self.project", "foreign.to_" => "self.name" },
|
||||||
|
undef,
|
||||||
|
);
|
||||||
|
|
||||||
=head2 project
|
=head2 project
|
||||||
|
|
||||||
Type: belongs_to
|
Type: belongs_to
|
||||||
|
@ -305,8 +320,8 @@ __PACKAGE__->has_many(
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
# Created by DBIx::Class::Schema::Loader v0.07033 @ 2013-10-14 15:46:29
|
# Created by DBIx::Class::Schema::Loader v0.07033 @ 2014-04-23 23:13:51
|
||||||
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:DTAGxP5RFvcNxP/ciJGo4Q
|
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:CO0aE+jrjB+UrwGRzWZLlw
|
||||||
|
|
||||||
my %hint = (
|
my %hint = (
|
||||||
columns => [
|
columns => [
|
||||||
|
|
|
@ -151,6 +151,21 @@ __PACKAGE__->has_many(
|
||||||
undef,
|
undef,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
=head2 jobsetrenames
|
||||||
|
|
||||||
|
Type: has_many
|
||||||
|
|
||||||
|
Related object: L<Hydra::Schema::JobsetRenames>
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
__PACKAGE__->has_many(
|
||||||
|
"jobsetrenames",
|
||||||
|
"Hydra::Schema::JobsetRenames",
|
||||||
|
{ "foreign.project" => "self.name" },
|
||||||
|
undef,
|
||||||
|
);
|
||||||
|
|
||||||
=head2 jobsets
|
=head2 jobsets
|
||||||
|
|
||||||
Type: has_many
|
Type: has_many
|
||||||
|
@ -282,8 +297,8 @@ Composing rels: L</projectmembers> -> username
|
||||||
__PACKAGE__->many_to_many("usernames", "projectmembers", "username");
|
__PACKAGE__->many_to_many("usernames", "projectmembers", "username");
|
||||||
|
|
||||||
|
|
||||||
# Created by DBIx::Class::Schema::Loader v0.07033 @ 2013-10-14 15:46:29
|
# Created by DBIx::Class::Schema::Loader v0.07033 @ 2014-04-23 22:48:21
|
||||||
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:PdNQ2mf5azBB6nI+iAm8fQ
|
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:l8eN9UAavdqnL7Sjv4rmFw
|
||||||
|
|
||||||
my %hint = (
|
my %hint = (
|
||||||
columns => [
|
columns => [
|
||||||
|
|
|
@ -73,6 +73,16 @@ create table Jobsets (
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
create table JobsetRenames (
|
||||||
|
project text not null,
|
||||||
|
from_ text not null,
|
||||||
|
to_ text not null,
|
||||||
|
primary key (project, from_),
|
||||||
|
foreign key (project) references Projects(name) on delete cascade on update cascade,
|
||||||
|
foreign key (project, to_) references Jobsets(project, name) on delete cascade on update cascade
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
create table JobsetInputs (
|
create table JobsetInputs (
|
||||||
project text not null,
|
project text not null,
|
||||||
jobset text not null,
|
jobset text not null,
|
||||||
|
|
8
src/sql/upgrade-26.sql
Normal file
8
src/sql/upgrade-26.sql
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
create table JobsetRenames (
|
||||||
|
project text not null,
|
||||||
|
from_ text not null,
|
||||||
|
to_ text not null,
|
||||||
|
primary key (project, from_),
|
||||||
|
foreign key (project) references Projects(name) on delete cascade on update cascade,
|
||||||
|
foreign key (project, to_) references Jobsets(project, name) on delete cascade on update cascade
|
||||||
|
);
|
Loading…
Reference in a new issue