X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Debbugs%2FDB%2FLoad.pm;h=a85a4ec28eaaa97a3876c1c9258aebbe8d070a27;hb=729cc4baaa9784fabfb4256f91da223f77264129;hp=bad48b5e6a2971791275a8925e61d6bf8e11e032;hpb=dcaed2286cc60eeced627b569f38c0c875bd257f;p=debbugs.git diff --git a/Debbugs/DB/Load.pm b/Debbugs/DB/Load.pm index bad48b5..a85a4ec 100644 --- a/Debbugs/DB/Load.pm +++ b/Debbugs/DB/Load.pm @@ -101,6 +101,10 @@ sub load_bug { }, 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}) { @@ -119,8 +123,8 @@ sub load_bug { $queue = {}; } my %tags; - my $s_data = split_status_fields($data); - for my $tag (make_list($s_data->{keywords})) { + $data = split_status_fields($data); + for my $tag (make_list($data->{keywords})) { next unless defined $tag and length $tag; # this allows for invalid tags. But we'll use this to try to # find those bugs and clean them up @@ -162,14 +166,42 @@ sub load_bug { submitter => 'originator', ); for my $addr_type (keys %addr_map) { + $bug->{$addr_type} = undef; + next unless defined $data->{$addr_map{$addr_type}} and + length($data->{$addr_map{$addr_type}}); $bug->{$addr_type} = $s->resultset('Correspondent')-> get_correspondent_id($data->{$addr_map{$addr_type}}) } 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, }); @@ -425,7 +457,7 @@ sub load_debinfo { =back -=head Packages +=head2 Packages =over @@ -539,8 +571,15 @@ sub load_packages { } # remove associations for packages not in this suite if (@sa_to_del) { - $schema->resultset('SrcAssociation')-> - search_rs({id => \@sa_to_del})->delete(); + $it = natatime 1000, @sa_to_del; + while (my @v = $it->()) { + $schema-> + txn_do(sub { + $schema->resultset('SrcAssociation')-> + search_rs({id => \@v})-> + delete(); + }); + } } # update packages in this suite to have a modification time of now $schema->resultset('SrcAssociation')-> @@ -603,8 +642,15 @@ sub load_packages { scalar @v) if defined $p; } if (@bin_to_del) { - $schema->resultset('BinAssociation')-> - search_rs({id => \@bin_to_del})->delete(); + $it = natatime 1000, @bin_to_del; + while (my @v = $it->()) { + $schema-> + txn_do(sub { + $schema->resultset('BinAssociation')-> + search_rs({id => \@v})-> + delete(); + }); + } } $schema->resultset('BinAssociation')-> search_rs({suite => $suite_id})-> @@ -617,7 +663,7 @@ sub load_packages { =cut -=head Suites +=head2 Suites =over @@ -651,3 +697,7 @@ sub load_suite { __END__ +# Local Variables: +# indent-tabs-mode: nil +# cperl-indent-level: 4 +# End: