]> git.donarmstrong.com Git - debbugs.git/blobdiff - Debbugs/Status.pm
allow specifying the dist in source_to_binary (for DB actions)
[debbugs.git] / Debbugs / Status.pm
index 43e722e7cd256d93280d2643239e0ceec4dda33a..29bd0d6cfa64f6556b86fc261f13d126b125f567 100644 (file)
@@ -1010,16 +1010,16 @@ sub bug_archiveable{
      # If we just are checking if the bug can be archived, we'll not even bother
      # checking the versioning information if the bug has been -done for less than 28 days.
      my $log_file = getbugcomponent($param{bug},'log');
-     if (not defined $log_file) {
+     if (not defined $log_file or not -e $log_file) {
          print STDERR "Cannot archive $param{bug} because the log doesn't exist\n" if $DEBUG;
          return $cannot_archive;
      }
-     my $max_log_age = max(map {$config{remove_age} - -M $_}
-                          $log_file, map {my $log = getbugcomponent($_,'log');
+     my @log_files = $log_file, (map {my $log = getbugcomponent($_,'log');
                                           defined $log ? ($log) : ();
                                      }
-                          split / /, $status->{mergedwith}
-                      );
+                          split / /, $status->{mergedwith});
+     my $max_log_age = max(map {-e $_?($config{remove_age} - -M _):0}
+                          @log_files);
      if (not $param{days_until} and not $param{ignore_time}
         and $max_log_age > 0
        ) {
@@ -1333,8 +1333,7 @@ sub get_bug_statuses {
             $statuses{$bug_status->{bug_num}} =
                 $bug_status;
             for my $field (qw(blocks blockedby done),
-                           qw(fixed_versions found_versions),
-                           qw(tags)
+                           qw(tags mergedwith)
                           ) {
                 $bug_status->{$field} //='';
             }
@@ -1352,6 +1351,19 @@ sub get_bug_statuses {
                 DateTime::Format::Pg->
                     parse_datetime($bug_status->{last_modified})->
                     epoch;
+            $bug_status->{location} = $bug_status->{archived}?'archive':'db-h';
+            for my $field (qw(found_versions fixed_versions found_date fixed_date)) {
+                $bug_status->{$field} = [split ' ', $bug_status->{$field} // ''];
+            }
+            for my $field (qw(found fixed)) {
+                # create the found/fixed hashes which indicate when a
+                # particular version was marked found or marked fixed.
+                @{$bug_status->{$field}}{@{$bug_status->{"${field}_versions"}}} =
+                    (('') x (@{$bug_status->{"${field}_versions"}} -
+                             @{$bug_status->{"${field}_date"}}),
+                     @{$bug_status->{"${field}_date"}});
+            }
+            $bug_status->{id} = $bug_status->{bug_num};
         }
      } else {
         for my $bug (make_list($param{bug})) {
@@ -1359,24 +1371,24 @@ sub get_bug_statuses {
                 exists $param{bug_index}{$bug}) {
                 my %status = %{$param{bug_index}{$bug}};
                 $status{pending} = $status{status};
-                $status{id} = $param{bug};
+                $status{id} = $bug;
                 $statuses{$bug} = \%status;
             }
             elsif (defined $param{status} and
                    $param{status}{bug_num} == $bug
                   ) {
-                $statuses{$bug} = {$param{status}};
+                $statuses{$bug} = {%{$param{status}}};
             } else {
                 my $location = getbuglocation($bug, 'summary');
                 next if not defined $location or not length $location;
                 my %status = %{ readbug( $bug, $location ) };
+                $status{id} = $bug;
                 $statuses{$bug} = \%status;
             }
         }
      }
      for my $bug (keys %statuses) {
         my $status = $statuses{$bug};
-        $status->{id} = $bug;
 
         if (defined $param{bugusertags}{$param{bug}}) {
             $status->{keywords} = "" unless defined $status->{keywords};
@@ -1404,7 +1416,7 @@ sub get_bug_statuses {
         $status->{"pending"} = 'fixed'     if ($tags{fixed});
 
 
-        my $presence = bug_presence(status => \%status,
+        my $presence = bug_presence(status => $status,
                                     bug => $bug,
                                     map{(exists $param{$_})?($_,$param{$_}):()}
                                     qw(sourceversions arch dist version found fixed package)