1 # This module is part of debbugs, and
2 # is released under the terms of the GPL version 2, or any later
3 # version (at your option). See the file README and COPYING for more
5 # Copyright 2018 by Don Armstrong <don@donarmstrong.com>.
7 package Debbugs::Collection::Version;
11 Debbugs::Collection::Version -- Version generation factory
15 This collection extends L<Debbugs::Collection> and contains members of
16 L<Debbugs::Version>. Useful for any field which contains package versions.
27 use v5.10; # for state
28 use namespace::autoclean;
29 use Debbugs::Common qw(make_list hash_slice);
30 use Debbugs::Config qw(:config);
34 use List::AllUtils qw(part);
36 extends 'Debbugs::Collection';
38 =head2 my $bugs = Debbugs::Collection::version->new(%params|$param)
40 Parameters in addition to those defined by L<Debbugs::Collection>
44 =item package_collection
46 Optional L<Debbugs::Collection::Package> which is used to look up packages
50 Optional arrayref of C<package/version/arch> string triples
56 has '+members' => (isa => 'ArrayRef[Debbugs::Version]');
58 has 'package_collection' =>
60 isa => 'Debbugs::Collection::Package',
61 builder => '_build_package_collection',
65 sub _build_package_collection {
67 return Debbugs::Collection::Package->new($self->schema_argument);
72 confess("v not defined") unless defined $v;
73 return $v->package.'/'.$v->version.'/'.$v->arch;
77 around add_by_key => sub {
81 $self->_member_constructor(versions => [@_]);
82 return $self->$orig(@members);
85 sub _member_constructor {
89 for my $pkg_ver_arch (make_list($args{versions})) {
90 my ($pkg,$ver,$arch) = $pkg_ver_arch =~ m{^([^/]+)/([^/]+)/?([^/]*)$} or
91 confess("Invalid version key: $pkg_ver_arch");
92 if ($pkg =~ s/^src://) {
95 if (not length $arch) {
98 if ($arch eq 'source') {
100 Debbugs::Version::Source->
101 new($self->schema_argument,
107 Debbugs::Version::Binary->
108 new($self->schema_argument,
118 =head2 $versions->universe
120 Unlike most collections, Debbugs::Collection::Version do not have a universe.
128 =head2 $versions->source
130 Returns a (potentially duplicated) list of source packages which are part of
131 this version collection
137 return $self->map(sub{$_->source});
140 __PACKAGE__->meta->make_immutable;
146 # indent-tabs-mode: nil
147 # cperl-indent-level: 4