]> git.donarmstrong.com Git - debbugs.git/commitdiff
Properly handle source packages when searching by maintainer; use
authorDon Armstrong <don@donarmstrong.com>
Tue, 19 Jan 2010 06:03:26 +0000 (22:03 -0800)
committerDon Armstrong <don@donarmstrong.com>
Tue, 19 Jan 2010 06:03:26 +0000 (22:03 -0800)
package_maintainer instead of the hashes (closes: #556863)

Debbugs/Bugs.pm
Debbugs/Common.pm
debian/changelog

index eff1593640e87c2c6f41ae5d9eb70b1d55bed7e1..5906806b654c6ce36aff79c1c00ec95a13e1b654 100644 (file)
@@ -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;
index e519c82e88a09a3e5c4815da3de5fa51ad254523..9760912a6445e1a2e0c848e7b0509cab790e0c0e 100644 (file)
@@ -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;
 }
index 8dc1bf31bd1a18953a6ccf06636fd2e07d367cf7..b8c23045ad7e7190be85790a35e47003e6554895 100644 (file)
@@ -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 <don@debian.org>  Wed, 26 Aug 2009 21:32:53 -0700