From: Don Armstrong Date: Tue, 19 Jan 2010 06:03:26 +0000 (-0800) Subject: Properly handle source packages when searching by maintainer; use X-Git-Tag: release/2.6.0~428^2~12 X-Git-Url: https://git.donarmstrong.com/?p=debbugs.git;a=commitdiff_plain;h=86591f1c9de1a37cfa9da585a6dfafc3962a258c Properly handle source packages when searching by maintainer; use package_maintainer instead of the hashes (closes: #556863) --- diff --git a/Debbugs/Bugs.pm b/Debbugs/Bugs.pm index eff1593..5906806 100644 --- a/Debbugs/Bugs.pm +++ b/Debbugs/Bugs.pm @@ -55,7 +55,7 @@ use Params::Validate qw(validate_with :types); use IO::File; use Debbugs::Status qw(splitpackages get_bug_status); use Debbugs::Packages qw(getsrcpkgs getpkgsrc); -use Debbugs::Common qw(getparsedaddrs getmaintainers getmaintainers_reverse make_list); +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); @@ -742,10 +742,8 @@ sub __handle_pkg_src_and_maint{ } if (exists $param{maint}) { my $key_inc = 0; - my $maint_rev = getmaintainers_reverse(); my %_temp_p = (); - for my $package (map { exists $maint_rev->{$_}?@{$maint_rev->{$_}}:()} - make_list($param{maint})) { + for my $package (package_maintainer(maintainer=>$param{maint})) { $packages{$package}++ unless exists $_temp_p{$package}; $_temp_p{$package} = 1; $key_inc = 1; diff --git a/Debbugs/Common.pm b/Debbugs/Common.pm index e519c82..9760912 100644 --- a/Debbugs/Common.pm +++ b/Debbugs/Common.pm @@ -306,6 +306,9 @@ sub package_maintainer { binary => {type => SCALAR|ARRAYREF, default => [], }, + maintainer => {type => SCALAR|ARRAYREF, + default => [], + }, rehash => {type => BOOLEAN, default => 0, }, @@ -314,6 +317,12 @@ sub package_maintainer { }, }, ); + my @binary = make_list($param{binary}); + my @source = make_list($param{source}); + my @maintainers = make_list($param{maintainer}); + if ((@binary or @source) and @maintainers) { + croak "It is nonsensical to pass both maintainers and source or binary"; + } if ($param{rehash}) { $_source_maintainer = undef; $_source_maintainer_rev = undef; @@ -326,7 +335,7 @@ sub package_maintainer { $_source_maintainer_rev = {}; for my $fn (@config{('source_maintainer_file', 'source_maintainer_file_override', - 'pseduo_maint_file')}) { + 'pseudo_maint_file')}) { next unless defined $fn; if (not -e $fn) { warn "Missing source maintainer file '$fn'"; @@ -342,7 +351,7 @@ sub package_maintainer { $_maintainer_rev = {}; for my $fn (@config{('maintainer_file', 'maintainer_file_override', - 'pseduo_maint_file')}) { + 'pseudo_maint_file')}) { next unless defined $fn; if (not -e $fn) { warn "Missing maintainer file '$fn'"; @@ -353,19 +362,23 @@ sub package_maintainer { } } my @return; - my @extra_source; - my $b = $param{reverse}?$_maintainer_rev:$_maintainer; - for my $binary (make_list($param{binary})) { + for my $binary (@binary) { if (not $param{reverse} and $binary =~ /^src:/) { - push @extra_source,$binary; + push @source,$binary; next; } - push @return,grep {defined $_} make_list($b->{$binary}); + push @return,grep {defined $_} make_list($_maintainer->{$binary}); } - my $s = $param{reverse}?$_source_maintainer_rev:$_source_maintainer; - for my $source (make_list($param{source},@extra_source)) { + for my $source (@source) { $source =~ s/^src://; - push @return,grep {defined $_} make_list($s->{$source}); + push @return,grep {defined $_} make_list($_source_maintainer->{$source}); + } + for my $maintainer (grep {defined $_} @maintainers) { + push @return,grep {defined $_} + make_list($_maintainer_rev->{$maintainer}); + push @return,map {$_ !~ /^src:/?'src:'.$_:$_} + grep {defined $_} + make_list($_source_maintainer_rev->{$maintainer}); } return @return; } diff --git a/debian/changelog b/debian/changelog index 8dc1bf3..b8c2304 100644 --- a/debian/changelog +++ b/debian/changelog @@ -4,6 +4,8 @@ debbugs (2.4.2~exp1) experimental; urgency=low #497144) * Fix problem with non-existant /etc/debbugs/config * Ditch \r and \n in status fields (closes: #545895) + * Properly handle source packages when searching by maintainer; use + package_maintainer instead of the hashes (closes: #556863) -- Don Armstrong Wed, 26 Aug 2009 21:32:53 -0700