]> git.donarmstrong.com Git - debbugs.git/blobdiff - Debbugs/CGI/Pkgreport.pm
add test for get_bug_order_index; fix faulty regex in while()
[debbugs.git] / Debbugs / CGI / Pkgreport.pm
index d047affb1d262827d204552b3fc4c52ece4e9b63..77b55165ae669916679d04c0e7bac69854383ff7 100644 (file)
@@ -107,7 +107,8 @@ sub generate_package_info{
      }
      else {
          print {$output} "<p>There is no maintainer for $showpkg. ".
-              "Please do not report new bugs against this package.</p>\n";
+              "This means that this package no longer exists (or never existed). ".
+                  "Please do not report new bugs against this package. </p>\n";
      }
      my @pkgs = getsrcpkgs($srcforpkg);
      @pkgs = grep( !/^\Q$package\E$/, @pkgs );
@@ -130,9 +131,11 @@ sub generate_package_info{
               "list of other pseudo-packages</a>";
      }
      elsif (not defined $maint and not @{$param{bugs}}) {
-         print {$output} "<p>There is no record of the " . html_escape($package) .
-              ($param{binary} ? " package" : " source package") .
-                   ", and no bugs have been filed against it.</p>";
+       # don't bother printing out this information, because it's
+       # already present above.
+       #  print {$output} "<p>There is no record of the " . html_escape($package) .
+       #       ($param{binary} ? " package" : " source package") .
+       #           ", and no bugs have been filed against it.</p>";
      }
      else {
          if ($package and defined $config{package_pages} and length $config{package_pages}) {
@@ -221,7 +224,7 @@ sub short_bug_status_html {
      if (@blockedby && $status{"pending"} ne 'fixed' && ! length($status{done})) {
          for my $b (@blockedby) {
               my %s = %{get_bug_status($b)};
-              next if $s{"pending"} eq 'fixed' || length $s{done};
+              next if (defined $s{pending} and $s{pending} eq 'fixed') or (defined $s{done} and length $s{done});
               push @{$status{blockedby_array}},{bug_num => $b, subject => $s{subject}, status => \%s};
          }
      }
@@ -467,20 +470,25 @@ 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) {
-              return $pos;
-              last;
+          my $first_field = 1; # true if no previous fields have been
+                               # checked
+          while ($el =~ /(?<joiner>^|\+|,)(?<field>[^=]+)=(?<value>[^=,\+]+)/g) {
+              my ($j,$f,$v) = @+{qw(joiner field value)};
+              my $isokay = 0;
+              $isokay = 1 if (defined $status->{$f} and $v eq $status->{$f});
+              $isokay = 1 if ($f eq "tag" && defined $tags{$v});
+              if (defined $j and $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;
          }
      }
      return $pos + 1;