=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
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
=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.
=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;
}
}
}
- 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];
}
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 {
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
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
sourceversions => {type => ARRAYREF,
optional => 1,
},
+ indicatesource => {type => BOOLEAN,
+ default => 0,
+ },
},
);
my %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 '');
- 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