use Encode qw(decode encode is_utf8);
use Storable qw(dclone);
-use List::Util qw(min max);
+use List::AllUtils qw(min max);
use Carp qw(croak);
$data{archived} = (defined($location) and ($location eq 'archive'))?1:0;
$data{bug_num} = $param{bug};
+ # mergedwith occasionally is sorted badly. Fix it to always be sorted by <=>
+ # and not include this bug
+ if (defined $data{mergedwith} and
+ $data{mergedwith}) {
+ $data{mergedwith} =
+ join(' ',
+ grep { $_ != $data{bug_num}}
+ sort { $a <=> $b }
+ split / /, $data{mergedwith}
+ );
+ }
return \%data;
}
my %split_fields =
(package => \&splitpackages,
affects => \&splitpackages,
+ # Ideally we won't have to split source, but because some consumers of
+ # get_bug_status cannot handle arrayref, we will split it here.
+ source => \&splitpackages,
blocks => $ditch_empty_space,
blockedby => $ditch_empty_space,
# this isn't strictly correct, but we'll split both of them for
# are all merged with eachother
# We do a cmp sort instead of an <=> sort here, because that's
# what merge does
- my $expectmerge= join(' ',grep {$_ != $bug } sort @bugs);
+ my $expectmerge=
+ join(' ',grep {$_ != $bug }
+ sort { $a <=> $b }
+ @bugs);
if ($newdata->{mergedwith} ne $expectmerge) {
for (1..$locks) {
unfilelock(exists $param{locks}?$param{locks}:());
$status{package} = '' if not defined $status{package};
$status{"package"} =~ s/\s*$//;
- $status{source} = [binary_to_source(binary=>[split /\s*,\s*/, $status{package}],
+ $status{source} = binary_to_source(binary=>[split /\s*,\s*/, $status{package}],
source_only => 1,
- )];
+ );
$status{"package"} = 'unknown' if ($status{"package"} eq '');
$status{"severity"} = 'normal' if (not defined $status{severity} or $status{"severity"} eq '');