]> git.donarmstrong.com Git - debbugs.git/commitdiff
package_maintainer now accepts schema too
authorDon Armstrong <don@donarmstrong.com>
Mon, 16 Apr 2018 23:30:41 +0000 (16:30 -0700)
committerDon Armstrong <don@donarmstrong.com>
Mon, 16 Apr 2018 23:30:41 +0000 (16:30 -0700)
Debbugs/CGI/Pkgreport.pm
Debbugs/Common.pm

index 4adb3628b1650deffad16b62c5090380a64c7d89..331073e54164a7b232c12f439e06e636a13aceea 100644 (file)
@@ -105,7 +105,8 @@ sub generate_package_info{
 
      my $showpkg = html_escape($package);
      my @maint = package_maintainer($param{binary}?'binary':'source',
-                                   $package
+                                   $package,
+                                   hash_slice(%param,qw(schema)),
                                   );
      if (@maint) {
          print {$output} '<p>';
index 066e965009608b14fd6b674085b9710c202e6aa9..e16e78c8af87e2ffdd0106ff4fa19c979dfe0fed 100644 (file)
@@ -497,12 +497,15 @@ maintainers for, defaults to the empty arrayref.
 maintainers for; automatically returns source package maintainer if
 the package name starts with 'src:', defaults to the empty arrayref.
 
-=item reverse -- whether to return the source/binary packages a
-maintainer maintains instead
+=item maintainer -- scalar or arrayref of maintainers to return source packages
+for. If given, binary and source cannot be given.
 
 =item rehash -- whether to reread the maintainer and source maintainer
 files; defaults to 0
 
+=item schema -- Debbugs::DB schema. If set, uses the database for maintainer
+information.
+
 =back
 
 =cut
@@ -524,6 +527,9 @@ sub package_maintainer {
                                         reverse => {type => BOOLEAN,
                                                     default => 0,
                                                    },
+                                        schema => {type => OBJECT,
+                                                   optional => 1,
+                                                  }
                                        },
                             );
     my @binary = make_list($param{binary});
@@ -532,6 +538,53 @@ sub package_maintainer {
     if ((@binary or @source) and @maintainers) {
        croak "It is nonsensical to pass both maintainers and source or binary";
     }
+    if (@binary) {
+       @source = grep {/^src:/} @binary;
+       @binary = grep {!/^src:/} @binary;
+    }
+    # remove leading src: from source package names
+    s/^src:// foreach @source;
+    if ($param{schema}) {
+       my $s = $param{schema};
+       if (@maintainers) {
+           my $m_rs = $s->resultset('SrcPkg')->
+               search({'correspondent.addr' => [@maintainers]},
+                     {join => {src_vers =>
+                              {maintainer =>
+                               'correspondent'},
+                              },
+                      columns => ['pkg'],
+                      group_by => [qw(me.pkg)],
+                      });
+           return $m_rs->get_column('pkg')->all();
+       } elsif (@binary or @source) {
+           my $rs = $s->resultset('Maintainer');
+           if (@binary) {
+               $rs =
+                   $rs->search({'bin_pkg.pkg' => [@binary]},
+                              {join => {src_vers =>
+                                       {bin_vers => 'bin_pkg'},
+                                       },
+                               columns => ['name'],
+                               group_by => [qw(me.name)],
+                              }
+                              );
+           }
+           if (@source) {
+               $rs =
+                   $rs->search({'src_pkg.pkg' => [@source]},
+                              {join => {src_vers =>
+                                        'src_pkg',
+                                       },
+                               columns => ['name'],
+                               group_by => [qw(me.name)],
+                              }
+                              );
+           }
+           return $rs->get_column('name')->all();
+       }
+       return ();
+    }
     if ($param{rehash}) {
        $_source_maintainer = undef;
        $_source_maintainer_rev = undef;
@@ -598,7 +651,7 @@ sub package_maintainer {
     }
     my @return;
     for my $binary (@binary) {
-       if (not $param{reverse} and $binary =~ /^src:/) {
+       if ($binary =~ /^src:/) {
            push @source,$binary;
            next;
        }