X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Debbugs%2FBug.pm;h=411e9babc80e9dca812b4cfddb785b34ffd85734;hb=289a8188c43f308c748bf58567e78186b7a4f29a;hp=4a6bf6614e27ca557e65fa1d439c6b447defeca6;hpb=29ffae11e29d83a96d53c5825e876914e4ac7aa7;p=debbugs.git diff --git a/Debbugs/Bug.pm b/Debbugs/Bug.pm index 4a6bf66..411e9ba 100644 --- a/Debbugs/Bug.pm +++ b/Debbugs/Bug.pm @@ -72,6 +72,31 @@ sub _build_status { return $status; } +has log => (is => 'bare', isa => 'Debbugs::Log', + lazy => 1, + builder => '_build_log', + handles => {_read_record => 'read_record', + log_records => 'read_all_records', + }, + ); + +sub _build_log { + my $self = shift; + return Debbugs::Log->new(bug_num => $self->id, + inner_file => 1, + ); +} + +has spam => (is => 'bare', isa => 'Debbugs::Log::Spam', + lazy => 1, + builder => '_build_spam', + handles => ['is_spam'], + ); +sub _build_spam { + my $self = shift; + return Debbugs::Log::Spam->new(bug_num => $self->id); +} + has 'package_collection' => (is => 'ro', isa => 'Debbugs::Collection::Package', builder => '_build_package_collection', @@ -107,10 +132,7 @@ has correspondent_collection => ); sub _build_correspondent_collection { my $self = shift; - if ($self->has_schema) { - return Debbugs::Collection::Correspondent->new(schema => $self->schema); - } - return Debbugs::Collection::Correspondent->new(); + return Debbugs::Collection::Correspondent->new($self->schema_argument); } sub reset { @@ -372,11 +394,23 @@ sub is_merged { return $self->mergedwith->count > 0; } +has _mergedwith_array => + (is => 'ro', + isa => 'ArrayRef[Int]', + builder => '_build_mergedwith_array', + lazy => 1, + ); + +sub _build_mergedwith_array { + my $self = shift; + return [sort {$a <=> $b} + $self->_split_if_defined('mergedwith')]; +} + sub _build_mergedwith { my $self = shift; return $self->bug_collection-> - limit(sort {$a <=> $b} - $self->_split_if_defined('mergedwith')); + limit(@{$self->_mergedwith_array//[]}); } sub _build_pending { return $_[0]->status->{pending} // ''; @@ -412,13 +446,18 @@ sub _build_archived { return $_[0]->location eq 'archived'?1:0; } -has tags => (is => 'ro', isa => 'Object', +has tags => (is => 'ro', + isa => 'Debbugs::Bug::Tag', clearer => '_clear_tags', builder => '_build_tags', lazy => 1, ); sub _build_tags { - return Debbugs::Bug::Tag->new($_[0]->status->{keywords}); + my $self = shift; + return Debbugs::Bug::Tag->new(keywords => $self->status->{keywords}, + bug => $self, + users => $self->bug_collection->users, + ); } =item buggy @@ -581,7 +620,7 @@ sub filter { return 1 if $self->matches($param{exclude}); } if (exists $param{repeat_merged} and not $param{repeat_merged}) { - my @merged = sort {$a<=>$b} $self->bug, map {$_->bug} $self->mergedwith->members; + my @merged = sort {$a<=>$b} $self->bug, @{$self->_mergedwith_array // []}; return 1 if first {sub {defined $_}} @{$param{seen_merged}}{@merged}; @{$param{seen_merged}}{@merged} = (1) x @merged; @@ -643,17 +682,55 @@ sub matches { return 0; } +sub email { + my $self = shift; + return $self->id.'@'.$config{email_domain}; +} + +sub subscribe_email { + my $self = shift; + return $self->id.'-subscribe@'.$config{email_domain}; +} + sub url { my $self = shift; return $config{web_domain}.'/'.$self->id; } +sub mbox_url { + my $self = shift; + return $config{web_domain}.'/mbox:'.$self->id; +} + +sub mbox_status_url { + my $self = shift; + return $self->mbox_url.'?mboxstatus=yes'; +} + +sub mbox_maint_url { + my $self = shift; + $self->mbox_url.'?mboxmaint=yes'; +} + +sub version_url { + my $self = shift; + return version_url(package => $self->package, + found => [$self->found->members], + fixed => [$self->fixed->members], + @_, + ); +} + sub related_packages_and_versions { my $self = shift; my @packages; if (length($self->status->{package}//'')) { @packages = split /,/,$self->status->{package}//''; } + if (length($self->status->{affects}//'')) { + push @packages, + split /,/,$self->status->{affects}//''; + } my @versions = (@{$self->status->{found_versions}//[]}, @{$self->status->{fixed_versions}//[]}); @@ -667,8 +744,12 @@ sub related_packages_and_versions { } } for my $pkg (@packages) { - push @return, - [$pkg,@unqualified_versions]; + if (@unqualified_versions) { + push @return, + [$pkg,@unqualified_versions]; + } else { + push @return,$pkg; + } } return @return; }