summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfranck cuny <franck@lumberjaph.net>2011-02-13 16:20:09 +0100
committerfranck cuny <franck@lumberjaph.net>2011-02-13 16:20:09 +0100
commite03879fe743957c24949000d078f4ffe0d2ef02c (patch)
tree613c1dbb2fa0102a15f2e2929c2762b4aacc420d
parentadd configuration option to skip some branches; add tests for the Hook (diff)
downloadjitterbug-e03879fe743957c24949000d078f4ffe0d2ef02c.tar.gz
inside the hook, we check if we can add more than one task for this
project the schema is updated to remove the constraint
Diffstat (limited to '')
-rw-r--r--lib/jitterbug/Hook.pm22
-rw-r--r--lib/jitterbug/Schema.pm2
-rw-r--r--lib/jitterbug/Schema/Result/Task.pm1
3 files changed, 20 insertions, 5 deletions
diff --git a/lib/jitterbug/Hook.pm b/lib/jitterbug/Hook.pm
index bf483d5..fe27921 100644
--- a/lib/jitterbug/Hook.pm
+++ b/lib/jitterbug/Hook.pm
@@ -21,16 +21,20 @@ post '/' => sub {
my $repo = $payload->{repository}->{name};
my $ref = $payload->{ref};
- my $authorized = _authorized_branch( $repo, $ref );
- if ( !$authorized ) {
+ if ( !_authorized_branch( $repo, $ref ) ) {
debug("this branch is not authorized");
status 200;
return;
}
my $project = schema->resultset('Project')->find( { name => $repo } );
+ $project = _create_new_project( $repo, $payload ) if !$project;
- $project = _create_new_project($repo, $payload) if !$project;
+ if ( !_slot_available_for_task( $project->id ) ) {
+ debug("task already present for this project");
+ status 200;
+ return;
+ }
my $last_commit = pop @{ $payload->{commits} };
$last_commit->{compare} = $payload->{compare};
@@ -92,6 +96,18 @@ sub _create_new_project {
return $project;
}
+sub _slot_available_for_task {
+ my $project_id = shift;
+
+ # is there already a task for this project, and could we stack ?
+ my $jtbg_settings = setting('jitterbug') || {};
+ my $stack_option = $jtbg_settings->{options}->{stack_tasks};
+ my $total_task =
+ schema->resultset('Task')->search( { projectid => $project_id } )->count;
+
+ ( $total_task && !$stack_option) ? return 0 : return 1;
+}
+
sub _insert_commit {
my ($commit, $project) = @_;
diff --git a/lib/jitterbug/Schema.pm b/lib/jitterbug/Schema.pm
index f47d7e9..c671d78 100644
--- a/lib/jitterbug/Schema.pm
+++ b/lib/jitterbug/Schema.pm
@@ -1,7 +1,7 @@
package jitterbug::Schema;
use base qw/DBIx::Class::Schema/;
-our $VERSION = '3';
+our $VERSION = '4';
__PACKAGE__->load_namespaces();
diff --git a/lib/jitterbug/Schema/Result/Task.pm b/lib/jitterbug/Schema/Result/Task.pm
index 2eaed62..ad880d8 100644
--- a/lib/jitterbug/Schema/Result/Task.pm
+++ b/lib/jitterbug/Schema/Result/Task.pm
@@ -25,7 +25,6 @@ __PACKAGE__->add_columns(
);
__PACKAGE__->set_primary_key('taskid');
-__PACKAGE__->add_unique_constraint( [qw/projectid/] );
__PACKAGE__->add_unique_constraint( [qw/sha256/] );
__PACKAGE__->belongs_to(
project => 'jitterbug::Schema::Result::Project',