]> git.donarmstrong.com Git - debbugs.git/blobdiff - scripts/service.in
merge from source
[debbugs.git] / scripts / service.in
index 090a43c270dc04f284e83a2983993b1b5d99b5e7..f4b7c2f9a8dbd16b1423dd3a26746f6896e69500 100755 (executable)
@@ -11,7 +11,7 @@ use Debbugs::Mail qw(send_mail_message);
 use Debbugs::User;
 use HTML::Entities qw(encode_entities);
 
-use Debbugs::Config qw(:globals);
+use Debbugs::Config qw(:globals :config);
 use Debbugs::CGI qw(html_escape);
 $lib_path = $gLibPath;
 require "$lib_path/errorlib";
@@ -140,12 +140,14 @@ $user =~ s/^.*<(.*)>.*$/$1/;
 $user =~ s/[(].*[)]//;
 $user =~ s/^\s*(\S+)\s+.*$/$1/;
 $user = "" unless (Debbugs::User::is_valid_user($user));
+my $indicated_user = 0;
 
 my $quickabort = 0;
 
-my $fuckheads = "(" . join("|", @gFuckheads) . ")";
-if (@gFuckheads and $replyto =~ m/$fuckheads/) {
-       &transcript("This service is unavailable.\n\n");
+my $fuckheads = "(" . join("|", @gExcludeFromControl) . ")";
+if (@gExcludeFromControl and $replyto =~ m/$fuckheads/) {
+       &transcript("You have been specifically excluded from using the\ncontrol interface.\n\n");
+       &transcript("Have a nice day\n\n.");
        $quickabort = 1;
 }
 
@@ -258,10 +260,12 @@ END
            my $olduser = ($user ne "" ? " (was $user)" : "");
             &transcript("Setting user to $newuser$olduser.\n");
            $user = $newuser;
+           $indicated_user = 1;
        } else {
            &transcript("Selected user id ($newuser) invalid, sorry\n");
            $errors++;
            $user = "";
+           $indicated_user = 1;
        }
     } elsif (m/^usercategory\s+(\S+)(\s+\[hidden\])?\s*$/i) {
         $ok++;
@@ -272,7 +276,16 @@ END
         my @cats;
         my $bad = 0;
        my $catsec = 0;
-        while (++$procline <= $#bodylines) {
+       if ($user eq "") {
+           &transcript("No valid user selected\n");
+           $errors++;
+           next;
+        }
+       if (not $indicated_user and defined $user) {
+            &transcript("User is $user");
+            $indicated_user = 1;
+       }
+       while (++$procline <= $#bodylines) {
             unless ($bodylines[$procline] =~ m/^\s*([*+])\s*(\S.*)$/) {
                 $procline--;
                 last;
@@ -335,18 +348,30 @@ END
        if (@cats) {
            &transcript("Added usercategory $catname.\n\n");
            $u->{"categories"}->{$catname} = [ @cats ];
+           if (not $hidden) {
+                push @{$u->{visible_cats}},$catname;
+           }
        } else {
            &transcript("Removed usercategory $catname.\n\n");
            delete $u->{"categories"}->{$catname};
+           @{$u->{visible_cats}} = grep {$_ ne $catname} @{$u->{visible_cats}};
        }
        $u->write();
     } elsif (m/^usertags?\s+\#?(-?\d+)\s+(([=+-])\s*)?(\S.*)?$/i) {
        $ok++;
        $ref = $1; $addsubcode = $3 || "+"; $tags = $4;
+       if ($ref =~ m/^-\d+$/ && defined $clonebugs{$ref}) {
+            $ref = $clonebugs{$ref};
+        }
        if ($user eq "") {
            &transcript("No valid user selected\n");
            $errors++;
+           $indicated_user = 1;
         } elsif (&setbug) {
+           if (not $indicated_user and defined $user) {
+                &transcript("User is $user");
+                $indicated_user = 1;
+           }
            &nochangebug;
            my %ut;
            Debbugs::User::read_usertags(\%ut, $user);
@@ -504,7 +529,9 @@ END
                 } while (&getnextbug);
             }
         }
-    } elsif (m/^found\s+\#?(-?\d+)(?:\s+(\d.*))?$/i) {
+    } elsif (m{^found\s+\#?(-?\d+)
+              (?:\s+(?:$config{package_name_re}\/)?
+                   ($config{package_version_re}))?$}ix) {
         $ok++;
         $ref= $1;
         $version= $2;
@@ -557,8 +584,43 @@ END
                 &addmaintainers($data);
                 removefoundversions($data, $data->{package}, $version, 'binary');
             } while (&getnextbug);
-        }
-    } elsif (m/^submitter\s+\#?(-?\d+)\s+\!$/i ? ($newsubmitter=$replyto, 1) :
+       }
+   }
+    elsif (m[^fixed\s+\#?(-?\d+)\s+
+            ((?:$config{package_name_re}\/)?
+                 $config{package_version_re})\s*$]ix) {
+        $ok++;
+        $ref= $1;
+        $version= $2;
+        if (&setbug) {
+            $action=
+                 defined($version) ?
+                      "$gBug marked as fixed in version $version." :
+                           "$gBug reopened.";
+                do {
+                    &addmaintainers($data);
+                    addfixedversions($data, $data->{package}, $version, 'binary');
+              } while (&getnextbug);
+       }
+   }
+    elsif (m[^notfixed\s+\#?(-?\d+)\s+
+            ((?:$config{package_name_re}\/)?
+                 $config{package_version_re})\s*$]ix) {
+        $ok++;
+        $ref= $1;
+        $version= $2;
+        if (&setbug) {
+            $action=
+                 defined($version) ?
+                      "$gBug marked as not fixed in version $version." :
+                           "$gBug reopened.";
+                do {
+                    &addmaintainers($data);
+                    removefixedversions($data, $data->{package}, $version, 'binary');
+              } while (&getnextbug);
+       }
+   }
+    elsif (m/^submitter\s+\#?(-?\d+)\s+\!$/i ? ($newsubmitter=$replyto, 1) :
              m/^submitter\s+\#?(-?\d+)\s+(\S.*\S)$/i ? ($newsubmitter=$2, 1) : 0) {
         $ok++;
         $ref= $1;
@@ -850,8 +912,7 @@ END
                 &addmaintainers($data);
                my $oldtitle = $data->{subject};
                 $data->{subject}= $newtitle;
-                $action= "Changed $gBug title to ".html_escape($newtitle)." from ".
-                    html_escape($oldtitle).".";
+                $action= "Changed $gBug title to `$newtitle' from `$oldtitle'.";
                 &savebug;
                 &transcript("$action\n");
                 if (length($data->{done})) {
@@ -1070,7 +1131,7 @@ END
                }
            }
        }
-    } elsif (m/^package\s+(\S.*\S)?\s*$/i) {
+    } elsif (m/^package\:?\s+(\S.*\S)?\s*$/i) {
         $ok++;
        my @pkgs = split /\s+/, $1;
        if (scalar(@pkgs) > 0) {