]> git.donarmstrong.com Git - debbugs.git/blobdiff - scripts/service
support cloned blocks; handle multi-packages properly
[debbugs.git] / scripts / service
index 3f05dc082e3fe3b82acb28de4fb8e9b2246ccaf7..dce8703c948ecbcf0c22349e179ad91c4603ec86 100755 (executable)
@@ -127,8 +127,7 @@ my %limit = ();
 
 
 my @common_control_options =
-    (($dl > 0 ? (debug => $transcript):()),
-     transcript        => $transcript,
+    (transcript        => $transcript,
      requester         => $header{from},
      request_addr      => $controlrequestaddr,
      request_msgid     => $header{'message-id'},
@@ -209,7 +208,10 @@ for ($procline=0; $procline<=$#bodylines; $procline++) {
         last;
     } elsif (m/^debug\s+(\d+)$/i && $1 >= 0 && $1 <= 1000) {
         $dl= $1+0;
-        print {$transcript} "Debug level $dl.\n\n";
+       if ($dl > 0 and not grep /debug/,@common_control_options) {
+           push @common_control_options,(debug => $transcript);
+       }
+       print {$transcript} "Debug level $dl.\n\n";
     } elsif (m/^(send|get)\s+\#?(\d{2,})$/i) {
         $ref= $2+0;
         &sendlynxdoc("bugreport.cgi?bug=$ref","logs for $gBug#$ref");
@@ -555,8 +557,8 @@ END
            # to set_found
            if (defined($version) && length $version) {
                set_found(@common_control_options,
-                         bug          => $ref,
-                         version      => $version,
+                         bug   => $ref,
+                         found => $version,
                         );
            }
        };
@@ -567,7 +569,8 @@ END
     } elsif (m/^reopen\s+\#?(-?\d+)(?:\s+([\=\!]|(?:\S.*\S)))?$/i) {
         $ok++;
         $ref= $1;
-       $bug_affected{$ref}=1; 
+       $ref = $clonebugs{$ref} if exists $clonebugs{$ref};
+       $bug_affected{$ref}=1;
        my $new_submitter = $2;
        if (defined $new_submitter) {
            if ($new_submitter eq '=') {
@@ -787,12 +790,9 @@ END
        my @tags = split /[\s,]+/, $tags;
        # this is an array of hashrefs which contain two elements, the
        # first of which is the array of tags, the second is the
-       # option to pass to set_tags (we use a hashref here to make it
+       # option to pass to set_tag (we use a hashref here to make it
        # more obvious what is happening)
-       my @tag_operations = {tags => [],
-                             option => []
-                            };
-       my $alter_type = '=';
+       my @tag_operations;
        my @badtags;
        for my $tag (@tags) {
            if ($tag =~ /^[=+-]$/) {
@@ -810,7 +810,7 @@ END
                elsif ($tag eq '+') {
                    push @tag_operations,
                        {tags => [],
-                        option => [add => 1]
+                        option => [add => 1],
                        };
                }
                next;
@@ -819,6 +819,11 @@ END
                push @badtags, $tag;
                next;
            }
+           if (not @tag_operations) {
+               @tag_operations = {tags => [],
+                                  option => [add => 1],
+                                 };
+           }
            push @{$tag_operations[-1]{tags}},$tag;
        }
        if (@badtags) {
@@ -828,13 +833,13 @@ END
        }
        eval {
            for my $operation (@tag_operations) {
-               set_tags(@common_control_options,
-                        bug => $ref,
-                        tags => [@{$operation->{$tags}}],
-                        warn_on_bad_tags => 0, # don't warn on bad tags,
-                        # 'cause we do that above
-                        @{$operation->{option}},
-                       );
+               set_tag(@common_control_options,
+                       bug => $ref,
+                       tag => [@{$operation->{tags}}],
+                       warn_on_bad_tags => 0, # don't warn on bad tags,
+                       # 'cause we do that above
+                       @{$operation->{option}},
+                      );
            }
        };
        if ($@) {
@@ -847,7 +852,7 @@ END
        $ok++;
         $ref= $2;
        my $add_remove = defined $1 && $1 eq 'un';
-       my @blockers = split /[\s,]+/, $3;
+       my @blockers = map {exists $clonebugs{$_}?$clonebugs{$_}:$_} split /[\s,]+/, $3;
        $ref = $clonebugs{$ref} if exists $clonebugs{$ref};
        $bug_affected{$ref} = 1;
        eval {
@@ -1106,11 +1111,16 @@ END
        if (scalar(@pkgs) > 0) {
                %limit_pkgs = map { ($_, 1) } @pkgs;
                $limit{package} = [@pkgs];
-               print {$transcript} "Ignoring bugs not assigned to: " .
-                       join(" ", keys(%limit_pkgs)) . "\n\n";
+               print {$transcript} "Limiting to bugs with field 'package' containing at least one of ".join(', ',map {qq('$_')} @pkgs)."\n";
+               print {$transcript} "Limit currently set to ";
+               for my $limit_field (keys %limit) {
+                   print {$transcript} "  '$limit_field':".join(', ',map {qq('$_')} @{$limit{$limit_field}})."\n";
+               }
+               print {$transcript} "\n";
        } else {
-               %limit_pkgs = ();
-               print {$transcript} "Not ignoring any bugs.\n\n";
+           %limit_pkgs = ();
+           $limit{package} = [];
+           print {$transcript} "Limit cleared.\n\n";
        }
     } elsif (m/^limit\:?\s+(\S.*\S)\s*$/) {
        $ok++;
@@ -1128,7 +1138,7 @@ END
            print {$transcript} "Limiting to bugs with field '$field' containing at least one of ".join(', ',map {qq('$_')} @options)."\n";
            print {$transcript} "Limit currently set to ";
            for my $limit_field (keys %limit) {
-               print {$transcript} "  '$limit_field':".join(', ',map {qq('$_')} @options)."\n";
+               print {$transcript} "  '$limit_field':".join(', ',map {qq('$_')} @{$limit{$limit_field}})."\n";
            }
            print {$transcript} "\n";
        }