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
24 use v5.10; # for state
25 use namespace::autoclean;
26 use Debbugs::Common qw(make_list hash_slice);
27 use Debbugs::Config qw(:config);
31 use List::AllUtils qw(part);
33 extends 'Debbugs::Collection';
35 has '+members' => (isa => 'ArrayRef[Debbugs::Version]');
37 has 'package_collection' =>
39 isa => 'Debbugs::Collection::Package',
40 builder => '_build_package_collection',
44 sub _build_package_collection {
46 return Debbugs::Collection::Package->new($self->schema_argument);
52 return $_[1]->package.'/'.$_[1]->version.'/'.$_[1]->arch;
56 around add_by_key => sub {
60 $self->_member_constructor(versions => [@_]);
61 return $self->$orig(@members);
64 sub _member_constructor {
69 for my $pkg_ver_arch (make_list($args{versions})) {
70 my ($pkg,$ver,$arch) = $pkg_ver_arch =~ m{^([^/]+)/([^/]+)/?([^/]*)$} or
71 confess("Invalid version key: $pkg_ver_arch");
72 if (not length $arch) {
73 if ($pkg =~ /^src:/) {
79 if ($arch eq 'source') {
81 Debbugs::Version::Source->
82 new($self->schema_argument,
88 Debbugs::Version::Binary->
89 new($self->schema_argument,
98 # Debbugs::Collection::Versions do not have a universe.
105 return $self->map(sub{$_->source});
108 __PACKAGE__->meta->make_immutable;
114 # indent-tabs-mode: nil
115 # cperl-indent-level: 4