X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Debbugs%2FStatus.pm;h=4b8d82e828f06687595ea11a45164a4bb907401d;hb=975055914729daa5d622a6abe072be35a008b11e;hp=dfafce14891ecb2ba5425a2d4473c311710b4854;hpb=0ed6845a9f77718e909922620ece6139a359c65d;p=debbugs.git diff --git a/Debbugs/Status.pm b/Debbugs/Status.pm index dfafce1..4b8d82e 100644 --- a/Debbugs/Status.pm +++ b/Debbugs/Status.pm @@ -34,7 +34,7 @@ use warnings; use strict; use vars qw($VERSION $DEBUG %EXPORT_TAGS @EXPORT_OK @EXPORT); -use base qw(Exporter); +use Exporter qw(import); use Params::Validate qw(validate_with :types); use Debbugs::Common qw(:util :lock :quit :misc); @@ -49,7 +49,7 @@ use File::Copy qw(copy); 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); @@ -270,7 +270,7 @@ sub read_bug{ # create the found/fixed hashes which indicate when a # particular version was marked found or marked fixed. @{$data{$field}}{@{$data{"${field}_versions"}}} = - (('') x (@{$data{"${field}_date"}} - @{$data{"${field}_versions"}}), + (('') x (@{$data{"${field}_versions"}} - @{$data{"${field}_date"}}), @{$data{"${field}_date"}}); } @@ -282,6 +282,17 @@ sub read_bug{ $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; } @@ -307,6 +318,9 @@ my $ditch_empty_space = sub {return &{$ditch_empty}(' ',@_)}; 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 @@ -416,7 +430,6 @@ data. =cut sub lockreadbugmerge { - my ($bug_num,$location) = @_; my $data = lockreadbug(@_); if (not defined $data) { return (0,undef); @@ -514,7 +527,10 @@ sub lock_read_all_merged_bugs { # 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}:()); @@ -732,7 +748,7 @@ sub addfoundversions { my $version = shift; my $isbinary = shift; return unless defined $version; - undef $package if $package =~ m[(?:\s|/)]; + undef $package if defined $package and $package =~ m[(?:\s|/)]; my $source = $package; if (defined $package and $package =~ s/^src://) { $isbinary = 0;