},
queue => {type => HASHREF,
optional => 1},
+ packages => {type => HASHREF,
+ default => sub {return {}},
+ optional => 1,
+ },
});
my $s = $param{db};
if (not exists $param{data} and not exists $param{bug}) {
}
my $b = $s->resultset('Bug')->update_or_create($bug) or
die "Unable to update or create bug $bug->{id}";
- $s->txn_do(sub {
- for my $ff (qw(found fixed)) {
+ $s->txn_do(sub {
+ $b->set_related_packages('binpackages',
+ [grep {defined $_ and
+ length $_ and $_ !~ /^src:/}
+ make_list($data->{package})],
+ $param{packages},
+ );
+ $b->set_related_packages('srcpackages',
+ [grep {defined $_ and
+ $_ =~ /^src:/}
+ make_list($data->{package})],
+ $param{packages},
+ );
+ $b->set_related_packages('affects_binpackages',
+ [grep {defined $_ and
+ length $_ and $_ !~ /^src:/}
+ make_list($data->{affects})
+ ],
+ $param{packages},
+ );
+ $b->set_related_packages('affects_srcpackages',
+ [grep {defined $_ and
+ $_ =~ /^src:/}
+ make_list($data->{affects})],
+ $param{packages},
+ );
+ for my $ff (qw(found fixed)) {
my @elements = $s->resultset('BugVer')->search({bug => $data->{bug_num},
found => $ff eq 'found'?1:0,
});
use warnings;
use base 'DBIx::Class::Core';
+use Carp;
=head1 COMPONENTS LOADED
__PACKAGE__->many_to_many(affects_srcpackages => 'bug_affects_srcpackages','src_pkg');
__PACKAGE__->many_to_many(messages => 'bug_messages','message');
+sub set_related_packages {
+ my ($self,$relationship,$pkgs,$pkg_cache) = @_;
+
+ my @pkg_ids;
+ if ($relationship =~ /binpackages/) {
+ for my $pkg (@{$pkgs}) {
+ push @pkg_ids,
+ $self->result_source->schema->resultset('BinPkg')->
+ get_bin_pkg_id($pkg);
+ }
+ } elsif ($relationship =~ /srcpackages/) {
+ for my $pkg (@{$pkgs}) {
+ push @pkg_ids,
+ $self->result_source->schema->resultset('SrcPkg')->
+ get_src_pkg_id($pkg);
+ }
+ } else {
+ croak "Unsupported relationship $relationship";
+ }
+ if ($relationship eq 'binpackages') {
+ $self->set_binpackages([map {{id => $_}} @pkg_ids]);
+ } elsif ($relationship eq 'srcpackages') {
+ $self->set_srcpackages([map {{id => $_}} @pkg_ids]);
+ } elsif ($relationship eq 'affects_binpackages') {
+ $self->set_affects_binpackages([map {{id => $_}} @pkg_ids]);
+ } elsif ($relationship eq 'affects_srcpackages') {
+ $self->set_affects_srcpackages([map {{id => $_}} @pkg_ids]);
+ } else {
+ croak "Unsupported relationship $relationship";
+ }
+}
# You can replace this text with custom code or comments, and it will be preserved on regeneration
1;