X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Debbugs%2FPackage.pm;h=3ba411adfbabc41f8f3099851be429cb74b06e9b;hb=68d10ba58a8277b0dde313de86507798defa9b55;hp=b0c0a9782e81918f64cdcde5c992d2d2cff3e3ad;hpb=123c0f52725a0ff4638f64118cb1994871c42374;p=debbugs.git diff --git a/Debbugs/Package.pm b/Debbugs/Package.pm index b0c0a97..3ba411a 100644 --- a/Debbugs/Package.pm +++ b/Debbugs/Package.pm @@ -138,7 +138,7 @@ has valid => (is => 'ro', isa => 'Bool', sub _build_valid { my $self = shift; - if ($self->_valid_versioninfo > 0) { + if ($self->valid_version_info_count> 0) { return 1; } return 0; @@ -151,16 +151,17 @@ has 'valid_version_info' => (is => 'bare', isa => 'ArrayRef', traits => ['Array'], lazy => 1, - builder => '_build_valid_versioninfo', - predicate => '_has_valid_versioninfo', - clearer => '_clear_valid_versioninfo', - handles => {'_get_valid_versioninfo' => 'get', - '_grep_valid_versioninfo' => 'grep', - '_valid_versioninfo' => 'elements', + builder => '_build_valid_version_info', + predicate => '_has_valid_version_info', + clearer => '_clear_valid_version_info', + handles => {'_get_valid_version_info' => 'get', + 'valid_version_info_grep' => 'grep', + '_valid_version_info' => 'elements', + 'valid_version_info_count' => 'count', }, ); -sub _build_valid_versioninfo { +sub _build_valid_version_info { my $self = shift; my $pkgs = $self->_get_valid_version_info_from_db; for my $invalid_version (@{$pkgs->{$self->qualified_name}->{invalid_versions}}) { @@ -228,6 +229,7 @@ sub _get_valid_version_info_from_db { }, ); } + my @src_packages = keys %src_packages; my @bin_ver_search; for my $sp (keys %bin_ver_packages) { @@ -237,6 +239,7 @@ sub _get_valid_version_info_from_db { }, ); } + my @bin_packages = keys %bin_packages; my $packages = {}; sub _default_pkg_info { return {name => $_[0], @@ -271,9 +274,9 @@ sub _get_valid_version_info_from_db { $bp->{$pkg->{bin_pkg}}++; } } - if (keys %src_packages) { + if (@src_packages) { my $src_rs = $s->resultset('SrcVer')-> - search({-or => [-and => {'src_pkg.pkg' => [keys %src_packages], + search({-or => [-and => {'src_pkg.pkg' => [@src_packages], -or => {'suite.codename' => $common_dists, 'suite.suite_name' => $common_dists, }, @@ -311,10 +314,10 @@ sub _get_valid_version_info_from_db { \%bin_packages, ); } - if (keys %bin_packages) { + if (@bin_packages) { my $bin_assoc_rs = $s->resultset('BinAssociation')-> - search({-and => {'bin_pkg.pkg' => [keys %bin_packages], + search({-and => {'bin_pkg.pkg' => [@bin_packages], -or => {'suite.codename' => $common_dists, 'suite.suite_name' => $common_dists, }, @@ -432,7 +435,7 @@ sub _build_source_version_to_info { my $self = shift; my $info = {}; my $i = 0; - for my $v ($self->_valid_versioninfo) { + for my $v ($self->_valid_version_info) { push @{$info->{$v->{src_ver}}}, $i; $i++; } @@ -452,7 +455,7 @@ sub _build_binary_version_to_info { my $self = shift; my $info = {}; my $i = 0; - for my $v ($self->_valid_versioninfo) { + for my $v ($self->_valid_version_info) { push @{$info->{$v->{bin_ver}}}, $i; $i++; } @@ -471,8 +474,9 @@ sub _build_dist_to_info { my $self = shift; my $info = {}; my $i = 0; - for my $v ($self->_valid_versioninfo) { - push @{$info->{$v->{dist}}}, $i; + for my $v ($self->_valid_version_info) { + next unless defined $v->{suite_name} and length($v->{suite_name}); + push @{$info->{$v->{suite_name}}}, $i; $i++; } return $info; @@ -500,11 +504,11 @@ has 'binaries' => (is => 'ro', sub _build_binaries { my $self = shift; if ($self->is_binary) { - return $self->package_collection->limit($self); + return $self->package_collection->limit($self->name); } # OK, walk through the valid_versions for this package my @binaries = - uniq map {$_->{bin_pkg}} $self->_valid_versioninfo; + uniq map {$_->{bin_pkg}} $self->_valid_version_info; return $self->package_collection->limit(@binaries); } @@ -517,13 +521,41 @@ has 'sources' => (is => 'ro', sub _build_sources { my $self = shift; + return $self->package_collection->limit($self->source_names); +} + +sub source_names { + my $self = shift; + if ($self->is_source) { - return $self->package_collection->limit($self); + return $self->name } - # OK, walk through the valid_versions for this package - my @sources = - uniq map {'src:'.$_->{src_pkg_name}} $self->_valid_versioninfo; - return $self->package_collection->limit(@sources); + return uniq map {'src:'.$_->{src_pkg}} $self->_valid_version_info; +} + +=head2 maintainers + +L of the maintainer(s) of the current package + +=cut + +has maintainers => (is => 'ro', + isa => 'Debbugs::Collection::Correspondent', + lazy => 1, + builder => '_build_maintainers', + predicate => '_has_maintainers', + ); + +sub _build_maintainers { + my $self = shift; + my @maintainers; + for my $v ($self->_valid_version_info) { + next unless length($v->{suite_name}) and length($v->{maintainer}); + push @maintainers,$v->{maintainer}; + } + @maintainers = + uniq @maintainers; + return $self->correspondent_collection->limit(@maintainers); } has 'versions' => (is => 'bare', @@ -561,7 +593,7 @@ sub get_source_version_distribution { grep {defined $_} $self->_get_dist_to_info($dist); for my $v ($self-> - _get_valid_versioninfo(@ver_loc)) { + _get_valid_version_info(@ver_loc)) { $src_pkg_vers{$v->{src_pkg_ver}} = 1; } } @@ -588,7 +620,7 @@ sub get_source_version { @{$self->_get_binary_version_to_info($ver)//[]}; next unless @ver_loc; my @vers = map {$self-> - _get_valid_versioninfo($_)} + _get_valid_version_info($_)} @ver_loc; for my $v (@vers) { if (keys %archs) { @@ -662,6 +694,23 @@ sub _build_package_collection { return Debbugs::Collection::Package->new($self->schema_argument) } +=head2 correspondent_collection + +L to get additional maintainers required + +=cut + +has 'correspondent_collection' => (is => 'ro', + isa => 'Debbugs::Collection::Correspondent', + builder => '_build_correspondent_collection', + lazy => 1, + ); + +sub _build_correspondent_collection { + my $self = shift; + return Debbugs::Collection::Correspondent->new($self->schema_argument) +} + sub CARP_TRACE { my $self = shift; return 'Debbugs::Package={package='.$self->qualified_name.'}';