diff options
Diffstat (limited to 'lib/Youri/Submit/Action/Bugzilla.pm')
-rw-r--r-- | lib/Youri/Submit/Action/Bugzilla.pm | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/lib/Youri/Submit/Action/Bugzilla.pm b/lib/Youri/Submit/Action/Bugzilla.pm new file mode 100644 index 0000000..a8ad5ce --- /dev/null +++ b/lib/Youri/Submit/Action/Bugzilla.pm @@ -0,0 +1,78 @@ +# $Id: Bugzilla.pm 1689 2007-06-28 22:44:24Z guillomovitch $ +package Youri::Submit::Action::Bugzilla; + +=head1 NAME + +Youri::Submit::Action::Bugzilla - Bugzilla synchronisation + +=head1 DESCRIPTION + +This action ensures synchronisation with Bugzilla. It assumes given package set +is canonical, with source package first. + +=cut + +use warnings; +use strict; +use Carp; +use Youri::BTS::Bugzilla; +use base qw/Youri::Submit::Step/; + +sub _init { + my $self = shift; + my %options = ( + lib => undef, + project => undef, + contact => undef, + @_ + ); + + $self->{_bugzilla} = Youri::BTS::Bugzilla->new( + $options{lib} ? (lib => $options{lib}) : (), + $options{project} ? (project => $options{project}) : (), + ); + $self->{_contact} = $options{contact}; +} + +sub process_packages { + my ($self, $packages, $repository, $target, $context) = @_; + croak "Not a class method" unless ref $self; + + my $package = $packages->[0]; + + my $name = $package->get_name(); + my $version = $package->get_version(); + my $summary = $package->get_summary(); + my $packager = $package->get_packager(); + $packager =~ s/.*<(.*)>/$1/; + + if ($self->{_bugzilla}->has_package($name)) { + my %versions = + map { $_ => 1 } + $self->{_bugzilla}->get_versions($name); + unless ($versions{$version}) { + print "adding version $version to bugzilla\n" if $self->{_verbose}; + $self->{_bugzilla}->add_version($name, $version) + unless $self->{_test}; + } + } else { + print "adding package $name to bugzilla\n" if $self->{_verbose}; + $self->{_bugzilla}->add_package( + $name, + $summary, + $version, + $packager, + $self->{_contact} + ) unless $self->{_test}; + } +} + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2002-2006, YOURI project + +This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. + +=cut + +1; |