summaryrefslogtreecommitdiff
path: root/lib/jitterbug/Hook.pm
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/Hook.pm
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/Hook.pm')
-rw-r--r--lib/jitterbug/Hook.pm22
1 files changed, 19 insertions, 3 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) = @_;