=head1 SYNOPSIS
+This collection extends L<Debbugs::Collection> and contains members of
+L<Debbugs::Version>. Useful for any field which contains package versions.
+
=head1 DESCRIPTION
extends 'Debbugs::Collection';
+=head2 my $bugs = Debbugs::Collection::version->new(%params|$param)
+
+Parameters in addition to those defined by L<Debbugs::Collection>
+
+=over
+
+=item package_collection
+
+Optional L<Debbugs::Collection::Package> which is used to look up packages
+
+=item versions
+
+Optional arrayref of C<package/version/arch> string triples
+
+=back
+
+=cut
+
has '+members' => (isa => 'ArrayRef[Debbugs::Version]');
has 'package_collection' =>
}
sub member_key {
- use Data::Printer;
- p @_;
- return $_[1]->package.'/'.$_[1]->version.'/'.$_[1]->arch;
+ my ($self,$v) = @_;
+ confess("v not defined") unless defined $v;
+ return $v->package.'/'.$v->version.'/'.$v->arch;
}
sub _member_constructor {
my $self = shift;
my %args = @_;
- my @schema_arg;
my @return;
for my $pkg_ver_arch (make_list($args{versions})) {
my ($pkg,$ver,$arch) = $pkg_ver_arch =~ m{^([^/]+)/([^/]+)/?([^/]*)$} or
confess("Invalid version key: $pkg_ver_arch");
+ if ($pkg =~ s/^src://) {
+ $arch = 'source';
+ }
if (not length $arch) {
- if ($pkg =~ /^src:/) {
- $arch = 'source';
- } else {
- $arch = 'any';
- }
+ $arch = 'any';
}
if ($arch eq 'source') {
push @return,
);
}
}
+ return @return;
}
-# Debbugs::Collection::Versions do not have a universe.
+=head2 $versions->universe
+
+Unlike most collections, Debbugs::Collection::Version do not have a universe.
+
+=cut
+
sub universe {
return $_[0];
}
+=head2 $versions->source
+
+Returns a (potentially duplicated) list of source packages which are part of
+this version collection
+
+=cut
+
sub source {
my $self = shift;
return $self->map(sub{$_->source});