X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Debbugs%2FBugs.pm;h=5906806b654c6ce36aff79c1c00ec95a13e1b654;hb=86591f1c9de1a37cfa9da585a6dfafc3962a258c;hp=f7a6fbb52f1b7870423bab84e25f02ada6ddb5ec;hpb=d1c9e4df65e46524673d8ddcbab1b687fb1db78b;p=debbugs.git diff --git a/Debbugs/Bugs.pm b/Debbugs/Bugs.pm index f7a6fbb..5906806 100644 --- a/Debbugs/Bugs.pm +++ b/Debbugs/Bugs.pm @@ -54,8 +54,8 @@ use Debbugs::Config qw(:config); use Params::Validate qw(validate_with :types); use IO::File; use Debbugs::Status qw(splitpackages get_bug_status); -use Debbugs::Packages qw(getsrcpkgs); -use Debbugs::Common qw(getparsedaddrs getmaintainers getmaintainers_reverse make_list); +use Debbugs::Packages qw(getsrcpkgs getpkgsrc); +use Debbugs::Common qw(getparsedaddrs package_maintainer getmaintainers make_list); use Fcntl qw(O_RDONLY); use MLDBM qw(DB_File Storable); use List::Util qw(first); @@ -572,20 +572,27 @@ sub get_bugs_flatfile{ } my $unmaintained_packages = 0; # unmaintained packages is a special case - for my $maint (make_list(exists $param{maint}?$param{maint}:[])) { + my @maints = make_list(exists $param{maint}?$param{maint}:[]); + $param{maint} = []; + for my $maint (@maints) { if (defined $maint and $maint eq '' and not $unmaintained_packages) { $unmaintained_packages = 1; our %maintainers = %{getmaintainers()}; - $param{function} = [exists $param{function}? - (ref $param{function}?@{$param{function}}:$param{function}):(), + $param{function} = [(exists $param{function}? + (ref $param{function}?@{$param{function}}:$param{function}):()), sub {my %d=@_; - foreach my $try (splitpackages($d{"pkg"})) { + foreach my $try (make_list($d{"pkg"})) { + next unless length $try; + ($try) = $try =~ m/^(?:src:)?(.+)/; return 1 if not exists $maintainers{$try}; } return 0; } ]; } + elsif (defined $maint and $maint ne '') { + push @{$param{maint}},$maint; + } } # We handle src packages, maint and maintenc by mapping to the # appropriate binary packages, then removing all packages which @@ -711,22 +718,34 @@ sub __handle_pkg_src_and_maint{ # We only want to increment the number of keys if there is # something to match my $key_inc = 0; - for my $package ((map { getsrcpkgs($_)} make_list($param{src}))) { - $packages{$package}++; + # in case there are binaries with the same name as the + # source + my %_temp_p = (); + for my $package ((map {getsrcpkgs($_)} make_list($param{src}))) { + $packages{$package}++ unless exists $_temp_p{$package}; + $_temp_p{$package} = 1; $key_inc=1; } for my $package (make_list($param{src})) { - $packages{"src:$package"}++; + $packages{"src:$package"}++ unless exists $_temp_p{"src:$package"}; + $_temp_p{"src:$package"} = 1; $key_inc=1; + # As a temporary hack, we will also include $param{src} + # in this list for packages passed which do not have a + # corresponding binary package + if (not exists getpkgsrc()->{$package}) { + $packages{$package}++ unless exists $_temp_p{$package}; + $_temp_p{$package} = 1; + } } $package_keys += $key_inc; } if (exists $param{maint}) { my $key_inc = 0; - my $maint_rev = getmaintainers_reverse(); - for my $package (map { exists $maint_rev->{$_}?@{$maint_rev->{$_}}:()} - make_list($param{maint})) { - $packages{$package}++; + my %_temp_p = (); + for my $package (package_maintainer(maintainer=>$param{maint})) { + $packages{$package}++ unless exists $_temp_p{$package}; + $_temp_p{$package} = 1; $key_inc = 1; } $package_keys += $key_inc; @@ -756,7 +775,11 @@ sub __bug_matches { my ($hash, $status) = @_; foreach my $key( keys( %$hash ) ) { my $value = $hash->{$key}; + next unless exists $field_match{$key}; my $sub = $field_match{$key}; + if (not defined $sub) { + die "No defined subroutine for key: $key"; + } return 1 if ($sub->($key, $value, $status)); } return 0;