about summary refs log tree commit diff
diff options
context:
space:
mode:
-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',