Use OO-style plugins

This is mostly so we don't have to pass around common parameters like
"db" and "config", and we don't have to check for the existence of
methods.

A plugin now looks like this:

  package Hydra::Plugin::TwitterNotification;

  use parent 'Hydra::Plugin';

  sub buildFinished {
      my ($self, $build, $dependents) = @_;
      print STDERR "tweeting about build ", $build->id, "\n";
      # Send tweet...
      # Hydra database is $self->{db}.
  }
This commit is contained in:
Eelco Dolstra
2013-05-08 18:34:18 +02:00
parent a420a33f66
commit 44b8d6f449
3 changed files with 22 additions and 10 deletions

View File

@ -17,6 +17,8 @@ my $db = Hydra::Model::DB->new();
my $config = getHydraConfig();
my @plugins = Hydra::Plugin->plugins(db => $db, config => $config);
sub addBuildStepOutputs {
my ($step) = @_;
@ -79,10 +81,9 @@ sub failDependents {
sub notify {
my ($build, $dependents) = @_;
foreach my $plugin (Hydra::Plugin->plugins) {
next unless $plugin->can('buildFinished');
foreach my $plugin (@plugins) {
eval {
$plugin->buildFinished($db, $config, $build, []);
$plugin->buildFinished($build, []);
};
if ($@) {
print STDERR "$plugin->buildFinished: $@\n";