use base qw(Exporter);
use Params::Validate qw(validate_with :types);
-use Debbugs::Common qw(:util :lock :quit);
+use Debbugs::Common qw(:util :lock :quit :misc);
use Debbugs::Config qw(:config);
use Debbugs::MIME qw(decode_rfc1522 encode_rfc1522);
use Debbugs::Packages qw(makesourceversions getversions binarytosource);
read => [qw(readbug read_bug lockreadbug)],
write => [qw(writebug makestatus unlockwritebug)],
versions => [qw(addfoundversions addfixedversions),
- qw(removefoundversions)
+ qw(removefoundversions removefixedversions)
],
hook => [qw(bughook bughook_archive)],
);
=cut
# This will eventually need to be fixed before we start using mod_perl
-my $version_cache = {};
+our $version_cache = {};
sub bug_archiveable{
my %param = validate_with(params => \@_,
spec => {bug => {type => SCALAR,
=item bug_index -- optional tied index of bug status infomration;
currently not correctly implemented.
-=item version -- optional version to check package status at
+=item version -- optional version(s) to check package status at
-=item dist -- optional distribution to check package status at
+=item dist -- optional distribution(s) to check package status at
-=item arch -- optional architecture to check package status at
+=item arch -- optional architecture(s) to check package status at
=item usertags -- optional hashref of usertags
bug_index => {type => OBJECT,
optional => 1,
},
- version => {type => SCALAR,
+ version => {type => SCALAR|ARRAYREF,
optional => 1,
},
- dist => {type => SCALAR,
+ dist => {type => SCALAR|ARRAYREF,
optional => 1,
},
- arch => {type => SCALAR,
+ arch => {type => SCALAR|ARRAYREF,
optional => 1,
},
usertags => {type => HASHREF,
status => {type => HASHREF,
optional => 1,
},
- version => {type => SCALAR,
+ version => {type => SCALAR|ARRAYREF,
optional => 1,
},
- dist => {type => SCALAR,
+ dist => {type => SCALAR|ARRAYREF,
optional => 1,
},
- arch => {type => SCALAR,
+ arch => {type => SCALAR|ARRAYREF,
optional => 1,
},
sourceversions => {type => ARRAYREF,
my @sourceversions;
if (not exists $param{sourceversions}) {
- my @versions;
+ my %sourceversions;
if (defined $param{version}) {
- @versions = ($param{version});
+ foreach my $arch (make_list($param{arch})) {
+ my @temp = makesourceversions($status{package},
+ $arch,
+ make_list($param{version})
+ );
+ @sourceversions{@temp} = (1) x @temp;
+ }
} elsif (defined $param{dist}) {
- @versions = getversions($status{package}, $param{dist}, $param{arch});
+ foreach my $arch (make_list($param{arch})) {
+ my @versions;
+ foreach my $dist (make_list($param{dist})) {
+ push @versions, getversions($status{package}, $dist, $arch);
+ }
+ my @temp = makesourceversions($status{package},
+ $arch,
+ @versions
+ );
+ @sourceversions{@temp} = (1) x @temp;
+ }
}
# TODO: This should probably be handled further out for efficiency and
# for more ease of distinguishing between pkg= and src= queries.
- @sourceversions = makesourceversions($status{package},
- $param{arch},
- @versions);
+ @sourceversions = keys %sourceversions;
}
else {
@sourceversions = @{$param{sourceversions}};
version_cache => $version_cache,
);
}
+ elsif (defined $param{dist}) {
+ return 'absent';
+ }
if (length($status{done}) and
(not @sourceversions or not @{$status{fixed_versions}})) {
return 'fixed';