about summary refs log tree commit diff
path: root/lib/jitterbug
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 /lib/jitterbug
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 'lib/jitterbug')
-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',