]> git.donarmstrong.com Git - debbugs.git/blobdiff - Debbugs/Bug.pm
Mousify Debbugs::Log and integrate with Debbugs::Bug
[debbugs.git] / Debbugs / Bug.pm
index 539e7589a4035160e3c6bd655c5bba0e57c0c28a..641881a8fcb849b7568b959a2c6a245ffb1d151d 100644 (file)
@@ -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} // '';
@@ -581,7 +615,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;
@@ -654,6 +688,10 @@ sub related_packages_and_versions {
     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,12 +705,22 @@ 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;
 }
 
+sub CARP_TRACE {
+    my $self = shift;
+    return 'Debbugs::Bug={bug='.$self->bug.'}';
+}
+
+__PACKAGE__->meta->make_immutable;
 
 no Mouse;
 1;