X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Debbugs%2FCGI%2FPkgreport.pm;h=da937e5516f0b11d0c5e30892aaccf578afa2222;hb=038f696edadcbcf8b26f54f4b919702c59e1b1d6;hp=8c217d7e1271c367b6e171d9776470b6540a8a2a;hpb=5b550d03e9214a7980a5cd4897cf9de09d89749b;p=debbugs.git diff --git a/Debbugs/CGI/Pkgreport.pm b/Debbugs/CGI/Pkgreport.pm index 8c217d7..da937e5 100644 --- a/Debbugs/CGI/Pkgreport.pm +++ b/Debbugs/CGI/Pkgreport.pm @@ -469,19 +469,30 @@ sub get_bug_order_index { for my $el (@${order}) { $pos++; - my $match = 1; - for my $item (split /[+]/, $el) { - my ($f, $v) = split /=/, $item, 2; - next unless (defined $f and defined $v); - my $isokay = 0; - $isokay = 1 if (defined $status->{$f} and $v eq $status->{$f}); - $isokay = 1 if ($f eq "tag" && defined $tags{$v}); - unless ($isokay) { - $match = 0; - last; - } - } - if ($match) { + my $match = 0; + my $first_field = 1; # true if no previous fields have been + # checked + while ($el =~ /(?^|\+|,)(?[^=]+)=(?[^=,\+])/g) { + my ($j,$f,$v) = @+{qw(joiner field value)}; + if (not defined $j) { + $j = '+'; + } + if ($j eq '+' and $first_field) { + $match = 1; + } + my $isokay = 0; + $isokay = 1 if (defined $status->{$f} and $v eq $status->{$f}); + $isokay = 1 if ($f eq "tag" && defined $tags{$v}); + if ($j eq ',') { + $match ||= $isokay; + } else { + $match &&= $isokay; + } + $first_field = 0; + } + # if there is a match, or if there were no fields to check, + # this usertag matched. + if ($match || $first_field) { return $pos; last; }