From: Debian BTS Date: Wed, 20 Feb 2008 09:27:08 +0000 (+0000) Subject: merge changes from dla source X-Git-Tag: release/2.6.0~500 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=ddea6513e7cd386c033db415a4055e0694b3ad74;hp=16a949e2d29fb786c86b07e0d0bc78759b38d007;p=debbugs.git merge changes from dla source --- diff --git a/Debbugs/Packages.pm b/Debbugs/Packages.pm index 39e5ed8..b129c8e 100644 --- a/Debbugs/Packages.pm +++ b/Debbugs/Packages.pm @@ -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]; } diff --git a/Debbugs/SOAP.pm b/Debbugs/SOAP.pm index e389906..6b80dae 100644 --- a/Debbugs/SOAP.pm +++ b/Debbugs/SOAP.pm @@ -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) + +=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) + +=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 + +=cut + +sub get_versions{ + my $VERSION = __populate_version(pop); + + return scalar get_versions(@_); +} =head1 VERSION COMPATIBILITY diff --git a/Debbugs/Status.pm b/Debbugs/Status.pm index 580a62a..73a1dbc 100644 --- a/Debbugs/Status.pm +++ b/Debbugs/Status.pm @@ -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 ''); diff --git a/debian/changelog b/debian/changelog index 4bf13da..bd75190 100644 --- a/debian/changelog +++ b/debian/changelog @@ -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 Fri, 20 Jun 2003 18:57:25 +0100