]> git.donarmstrong.com Git - debbugs.git/commitdiff
merge changes from dla source
authorDebian BTS <debbugs@rietz>
Wed, 20 Feb 2008 09:27:08 +0000 (09:27 +0000)
committerDebian BTS <debbugs@rietz>
Wed, 20 Feb 2008 09:27:08 +0000 (09:27 +0000)
Debbugs/Packages.pm
Debbugs/SOAP.pm
Debbugs/Status.pm
debian/changelog

index 39e5ed82ae246d5b2a274de3d3703571ed6c5b7b..b129c8e1a1b7d6e51d8c841e80a10bfb87ce313d 100644 (file)
@@ -122,10 +122,15 @@ sub getsrcpkgs {
 =item binarytosource
 
 Returns a reference to the source package name and version pair
-corresponding to a given binary package name, version, and architecture. If
-undef is passed as the architecture, returns a list of references to all
-possible pairs of source package names and versions for all architectures,
-with any duplicates removed.
+corresponding to a given binary package name, version, and architecture.
+
+If undef is passed as the architecture, returns a list of references
+to all possible pairs of source package names and versions for all
+architectures, with any duplicates removed.
+
+If the binary version is not passed either, returns a list of possible
+source package names for all architectures at all versions, with any
+duplicates removed.
 
 =cut
 
@@ -146,7 +151,18 @@ sub binarytosource {
     my $binary = $_binarytosource{$binname};
     return () unless defined $binary;
     my %binary = %{$binary};
-    if (exists $binary{$binver}) {
+    if (not defined $binver) {
+        my %uniq;
+        for my $ver (keys %binary) {
+             for my $ar (keys %{$binary{$binver}}) {
+                  my $src = $binary{$binver}{$ar};
+                  next unless defined $src;
+                  $uniq{$src->[0]} = 1;
+             }
+        }
+        return keys %uniq;
+    }
+    elsif (exists $binary{$binver}) {
         if (defined $binarch) {
              my $src = $binary{$binver}{$binarch};
              return () unless defined $src; # not on this arch
@@ -232,10 +248,10 @@ sub getversions {
 
 =head2 get_versions
 
-     get_version(package=>'foopkg',
-                 dist => 'unstable',
-                 arch => 'i386',
-                );
+     get_versions(package=>'foopkg',
+                  dist => 'unstable',
+                  arch => 'i386',
+                 );
 
 Returns a list of the versions of package in the distributions and
 architectures listed. This routine only returns unique values.
@@ -264,6 +280,10 @@ architectures are at which versions.
 
 =back
 
+When called in scalar context, this function will return hashrefs or
+arrayrefs as appropriate, in list context, it will return paired lists
+or unpaired lists as appropriate.
+
 =cut
 
 our %_versions;
@@ -340,13 +360,10 @@ sub get_versions{
               }
          }
      }
-     if ($param{time}) {
-         return %versions;
-     }
-     elsif ($param{return_archs}) {
-         return %versions;
+     if ($param{time} or $param{return_archs}) {
+         return wantarray?%versions :\%versions;
      }
-     return keys %versions;
+     return wantarray?keys %versions :[keys %versions];
 }
 
 
index e389906964da1d0462b58ef7bf8dab6d585c6a26..6b80dae45962c925a02c2a103826841efb7e8e59 100644 (file)
@@ -128,7 +128,7 @@ sub get_status {
          if (ref($bug)) {
               my %param = __collapse_params(@{$bug});
               $bug_status = get_bug_status(map {(exists $param{$_})?($_,$param{$_}):()}
-                                           qw(bug dist arch bugusertags sourceversions version)
+                                           qw(bug dist arch bugusertags sourceversions version indicatesource)
                                           );
          }
          else {
@@ -255,6 +255,89 @@ sub get_bug_log{
      return \@messages;
 }
 
+=head2 binary_to_source
+
+     binary_to_source($binary_name,$binary_version,$binary_architecture)
+
+Returns a reference to the source package name and version pair
+corresponding to a given binary package name, version, and
+architecture. If undef is passed as the architecture, returns a list
+of references to all possible pairs of source package names and
+versions for all architectures, with any duplicates removed.
+
+(This function corresponds to L<Debbugs::Packages::binarytosource>)
+
+=cut
+
+sub binary_to_source{
+     my $VERSION = __populate_version(pop);
+
+     return [binarytosource(@_)];
+}
+
+=head2 source_to_binary
+
+     source_to_binary($source_name,$source_version);
+
+Returns a reference to an array of references to binary package name,
+version, and architecture corresponding to a given source package name
+and version. In the case that the given name and version cannot be
+found, the unversioned package to source map is consulted, and the
+architecture is not returned.
+
+(This function corresponds to L<Debbugs::Packages::sourcetobinary>)
+
+=cut
+
+sub source_to_binary {
+     my $VERSION = __populate_version(pop);
+
+     return [source_to_binary(@_)];
+}
+
+=head2 get_versions
+
+     get_version(package=>'foopkg',
+                 dist => 'unstable',
+                 arch => 'i386',
+                );
+
+Returns a list of the versions of package in the distributions and
+architectures listed. This routine only returns unique values.
+
+=over
+
+=item package -- package to return list of versions
+
+=item dist -- distribution (unstable, stable, testing); can be an
+arrayref
+
+=item arch -- architecture (i386, source, ...); can be an arrayref
+
+=item time -- returns a version=>time hash at which the newest package
+matching this version was uploaded
+
+=item source -- returns source/version instead of just versions
+
+=item no_source_arch -- discards the source architecture when arch is
+not passed. [Used for finding the versions of binary packages only.]
+Defaults to 0, which does not discard the source architecture. (This
+may change in the future, so if you care, please code accordingly.)
+
+=item return_archs -- returns a version=>[archs] hash indicating which
+architectures are at which versions.
+
+=back
+
+This function correponds to L<Debbugs::Packages::get_versions>
+
+=cut
+
+sub get_versions{
+     my $VERSION = __populate_version(pop);
+
+     return scalar get_versions(@_);
+}
 
 =head1 VERSION COMPATIBILITY
 
index 580a62aa9e922502688a2db7e268c3023bf19289..73a1dbc108f9d7af6d844a0120ed06e5d35c2de3 100644 (file)
@@ -773,6 +773,11 @@ currently not correctly implemented.
 dist, arch, and version. [The entries in this array must be in the
 "source/version" format.] Eventually this can be used to for caching.
 
+=item indicatesource -- if true, indicate which source packages this
+bug could belong to. Defaults to false. [Note that eventually we will
+properly allow bugs that only affect a source package, and this will
+become always on.]
+
 =back
 
 Note: Currently the version information is cached; this needs to be
@@ -809,6 +814,9 @@ sub get_bug_status {
                                          sourceversions => {type => ARRAYREF,
                                                             optional => 1,
                                                            },
+                                         indicatesource => {type => BOOLEAN,
+                                                            default => 0,
+                                                           },
                                         },
                              );
      my %status;
@@ -839,6 +847,12 @@ sub get_bug_status {
      my %tags = map { $_ => 1 } split ' ', $status{tags};
 
      $status{"package"} =~ s/\s*$//;
+     if ($param{indicatesource} and $status{package} ne '') {
+         $status{source} = join(', ',binarytosource($status{package}));
+     }
+     else {
+         $status{source} = 'unknown';
+     }
      $status{"package"} = 'unknown' if ($status{"package"} eq '');
      $status{"severity"} = 'normal' if ($status{"severity"} eq '');
 
index 4bf13da600bc18f89f9954a99b0b74f981ee004b..bd75190c33002228fe09befa4f0e2b1b53c53a88 100644 (file)
@@ -205,11 +205,13 @@ debbugs (2.4.2) UNRELEASED; urgency=low
     - Make notfound/notfixed log verbiage more clear (closes: #434953)
     - Verify submitter is a valid email according to RFC822
       (closes: #182419)
-    - Indicate what message number a message is (closes: #462653)
+    - Indicate what message number a message is (closes: #462653,#454248)
     - Fix casing of versions (closes: #441022)
     - Output last-modified in bugreport.cgi (closes: #459709)
     - Fix various html syntax errors in pkgreport.cgi (closes: #462322)
     - Make search case insensitive (closes: #448861)
+    - Add the ability to return source/package mapping
+      (closes: #465332,#458822)
 
   
  -- Colin Watson <cjwatson@debian.org>  Fri, 20 Jun 2003 18:57:25 +0100