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::Version;
11 Debbugs::Version -- OO interface to Version
16 Debbugs::Version->new(schema => $s,binaries => [qw(foo)],sources => [qw(bar)]);
26 use namespace::autoclean;
28 use Debbugs::Collection::Package;
31 extends 'Debbugs::OOBase';
33 state $strong_severities =
34 {map {($_,1)} @{$config{strong_severities}}};
36 has version => (is => 'ro', isa => 'Str',
38 builder => '_build_version',
39 predicate => '_has_version',
42 has source_version => (is => 'ro',
44 builder => '_build_source_version',
45 predicate => '_has_source_version',
46 clearer => '_clear_source_version',
49 has source => (is => 'ro',
50 isa => 'Debbugs::Package',
52 writer => 'set_source',
53 builder => '_build_source',
54 predicate => '_has_source',
55 clearer => '_clear_source',
58 has packages => (is => 'rw',
59 isa => 'Debbugs::Collection::Package',
60 writer => 'set_package',
61 builder => '_build_package',
62 predicate => '_has_package',
63 clearer => '_clear_package',
66 has 'package_collection' => (is => 'ro',
67 isa => 'Debbugs::Collection::Package',
68 builder => '_build_package_collection',
72 sub _build_package_collection {
73 return Debbugs::Collection::Package->new();
76 # one of source_version or version must be provided
81 if (not $self->_has_version and
82 not $self->_has_source_version) {
83 confess("Version objects must have at least a source version or a version");
85 if ($self->_has_source and
86 $self->source->is_source
88 confess("You have provided a source package which is not a source package");
94 my $srcver = $self->source_version;
99 sub _build_source_version {
101 # should we verify that $self->source is a valid package?
102 my $src = $self->source;
103 if ($src->is_valid) {
104 return $self->source->name.'/'.$self->version;
106 # do we want invalid sources to be in parenthesis?
107 return $self->version;
112 if ($self->_has_binaries) {
113 # this should be the standard case
114 if ($self->binaries->sources->count == 1) {
115 return $self->binaries->sources->first(sub {1});
117 # might need to figure out how to speed up limit_by_version
118 return $self->binaries->limit_by_version($self->version)->
121 confess("No binary package, cannot know what source package this version is for");
124 sub _build_packages {
126 if ($self->_has_source) {
127 return $self->package_collection->
128 get_or_create($self->source->binaries,$self->source);
130 confess("No source package, cannot know what binary packages this version is for");
133 __PACKAGE__->meta->make_immutable;
140 # indent-tabs-mode: nil
141 # cperl-indent-level: 4