From efe616fda98695327e616c7eee81b5afb4fb5b4c Mon Sep 17 00:00:00 2001 From: Don Armstrong Date: Wed, 5 Jul 2017 19:04:24 -0700 Subject: [PATCH] Fix merged sort order to always be numeric --- Debbugs/Control.pm | 16 +++++++++++----- Debbugs/Status.pm | 16 +++++++++++++++- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/Debbugs/Control.pm b/Debbugs/Control.pm index 807549f..ab60384 100644 --- a/Debbugs/Control.pm +++ b/Debbugs/Control.pm @@ -1975,8 +1975,11 @@ sub set_merged { $data->{mergedwith} = ''; } else { - $data->{mergedwith} = join(' ',sort grep {$_ != $data->{bug_num}} - keys %merged_bugs); + $data->{mergedwith} = + join(' ', + sort {$a <=> $b} + grep {$_ != $data->{bug_num}} + keys %merged_bugs); } append_action_to_log(bug => $data->{bug_num}, command => 'merge', @@ -2157,11 +2160,14 @@ sub set_merged { } # finally, we can merge the bugs - my $action = "Merged ".join(' ',sort keys %merged_bugs); + my $action = "Merged ".join(' ',sort { $a <=> $b } keys %merged_bugs); for my $data (@data) { my $old_data = dclone($data); - $data->{mergedwith} = join(' ',sort grep {$_ != $data->{bug_num}} - keys %merged_bugs); + $data->{mergedwith} = + join(' ', + sort { $a <=> $b } + grep {$_ != $data->{bug_num}} + keys %merged_bugs); append_action_to_log(bug => $data->{bug_num}, command => 'merge', new_data => $data, diff --git a/Debbugs/Status.pm b/Debbugs/Status.pm index c9f5709..4b8d82e 100644 --- a/Debbugs/Status.pm +++ b/Debbugs/Status.pm @@ -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; } @@ -516,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}:()); -- 2.39.2