# 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
) {
my %param = validate_with(params => \@_,
spec => $spec,
);
+ my $bin_to_src_cache = {};
+ if (defined $param{binary_to_source_cache}) {
+ $bin_to_src_cache = $param{binary_to_source_cache};
+ }
my %status;
my %statuses;
if (defined $param{schema}) {
$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} //='';
}
$bug_status->{keywords} =
$bug_status->{tags};
- $bug_status->{log_modified} =
- DateTime::Format::Pg->
- parse_datetime($bug_status->{log_modified})->
- epoch;
- $bug_status->{date} =
- DateTime::Format::Pg->
- parse_datetime($bug_status->{date})->
- epoch;
- $bug_status->{last_modified} =
- 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})) {
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};
$status->{source} = binary_to_source(binary=>[split /\s*,\s*/, $status->{package}],
source_only => 1,
- exists $param{binary_to_source_cache}?
- (cache =>$param{binary_to_source_cache}):(),
+ cache => $bin_to_src_cache,
+ defined $param{schema}?
+ (schema => $param{schema}):(),
);
$status->{"package"} = 'unknown' if ($status->{"package"} eq '');