]> git.donarmstrong.com Git - debbugs.git/commitdiff
[project @ 2003-08-30 00:15:15 by cjwatson]
authorcjwatson <>
Sat, 30 Aug 2003 07:15:15 +0000 (23:15 -0800)
committercjwatson <>
Sat, 30 Aug 2003 07:15:15 +0000 (23:15 -0800)
Implement bug ownership. New 'owner' field in .summary files. New 'owner'
and 'noowner' control commands.

cgi/bugreport.cgi
cgi/common.pl
debian/changelog
html/server-control.html.in
scripts/db2html.in
scripts/errorlib.in
scripts/process.in
scripts/service.in

index 5fe8db54e18e84350e762858b277d5a142ec8519..c5339f19b39218d1bd68a7c21fd18218aad10be6 100755 (executable)
@@ -177,6 +177,9 @@ $indexentry .= htmlpackagelinks($status{package}, 0);
 $indexentry .= "Reported by: <a href=\"" . submitterurl($status{originator})
               . "\">" . htmlsanit($status{originator}) . "</a>;\n";
 
+$indexentry .= "Owned by: " . htmlsanit($status{owner}) . ";\n"
+              if length $status{owner};
+
 my $dummy = strftime "%a, %e %b %Y %T UTC", localtime($status{date});
 $indexentry .= "Date: ".$dummy.";\n<br>";
 
index be4421a8c47e1325187ece3a14bbabcdc2b35031..f639daa111f8eefbbeeadfbbc589817887ca2ed0 100644 (file)
@@ -220,6 +220,8 @@ sub htmlindexentrystatus {
     $result .= $showseverity;
     $result .= "Reported by: <a href=\"" . submitterurl($status{originator})
                . "\">" . htmlsanit($status{originator}) . "</a>";
+    $result .= ";\nOwned by: " . htmlsanit($status{owner})
+               if length $status{owner};
     $result .= ";\nTags: <strong>" 
                 . htmlsanit(join(", ", sort(split(/\s+/, $status{tags}))))
                 . "</strong>"
index 5d8a4f6b81558ed6ada5847fe8d3fed53f63a830..208a15455d588e233f3a4cbf840b24ffaf88c519 100644 (file)
@@ -13,6 +13,8 @@ debbugs (2.4.2) UNRELEASED; urgency=low
     - Implement new .status format that's extensible and easier to read; it
       now lives in .summary rather than .status. Use debbugs-upgradestatus
       to convert existing bug databases.
+    - Implement bug ownership, with new 'owner' and 'noowner' commands
+      (closes: #133453).
 
  -- Colin Watson <cjwatson@debian.org>  Fri, 20 Jun 2003 18:57:25 +0100
 
index 92a4cc8ecbcdef526f2803dc1fab471411d3f78f..5d768eb859d7932cabef222d11d50762e5c57818 100644 (file)
@@ -232,6 +232,21 @@ mailservers is available via the WWW, in
         severity 234567 wishlist
   </pre>
 
+<dt><code>owner</code> <var>bugnumber</var> <var>address</var> | <code>!</code>
+
+  <dd>Sets <var>address</var> to be the "owner" of #<var>bugnumber</var>.
+  The owner of a $gBug claims responsibility for fixing it and will receive
+  all mail regarding it.  This is useful to share out work in cases where a
+  package has a team of maintainers.
+
+  <p>If you wish to become the owner of the $gBug yourself, you can use the
+  <code>!</code> shorthand or specify your own email address.</p>
+
+<dt><code>noowner</code> <var>bugnumber</var>
+
+  <dd>Forgets any idea that the $gBug has an owner other than the usual
+  maintainer.  If the $gBug had no owner recorded then this will do nothing.
+
 <dt><code>quit</code>
 <dt><code>stop</code>
 <dt><code>thank</code>...
index dab1399ca7bf7111e012a372ee3e3766d6d858c7..c0f20d87d7a641ec5a25fd65d4d776327d18a9ec 100755 (executable)
@@ -1,5 +1,5 @@
 #!/usr/bin/perl
-# $Id: db2html.in,v 1.20 2003/08/23 13:17:32 cjwatson Exp $
+# $Id: db2html.in,v 1.21 2003/08/30 00:15:15 cjwatson Exp $
 # usage: db2html [-diff] [-stampfile=<stampfile>] [-lastrun=<days>] <wwwbase>
 
 #load the necessary libraries/configuration
@@ -158,6 +158,8 @@ for $f (@files)
             if length($data->{package});
         $indexentry .= $showseverity;
         $indexentry .= "Reported by: ".&sani($data->{originator});
+        $indexentry .= ";\nOwned by: ".&sani($data->{owner})
+            if length($data->{owner});
         $indexentry .= ";\nKeywords: ".&sani($data->{keywords})
             if length($data->{keywords});
         $linkto= $ref; $linkto =~ s,^..,$&/$&,;
index 5e7b1a25c928adcf5dd8d67ca36c7c4c5085e5a4..b8a9bd17adb1e639ebbc5ba715c1c1e40f1fe1fc 100755 (executable)
@@ -1,5 +1,5 @@
 # -*- perl -*-
-# $Id: errorlib.in,v 1.39 2003/08/23 15:33:42 cjwatson Exp $
+# $Id: errorlib.in,v 1.40 2003/08/30 00:15:15 cjwatson Exp $
 
 use Mail::Address;
 
@@ -83,6 +83,7 @@ my %fields = (originator => 'submitter',
               forwarded => 'forwarded-to',
               mergedwith => 'merged-with',
               severity => 'severity',
+              owner => 'owner',
              );
 
 sub readbug {
index 0eb6be16d13861570e3dbd2e4e93e042b94f08cd..9518b0c39340c64e0bc04a5c55210c6fc030982b 100755 (executable)
@@ -1,5 +1,5 @@
 #!/usr/bin/perl
-# $Id: process.in,v 1.81 2003/08/23 13:50:45 cjwatson Exp $
+# $Id: process.in,v 1.82 2003/08/30 00:15:15 cjwatson Exp $
 #
 # Usage: process nn
 # Temps:  incoming/Pnn
@@ -1108,4 +1108,11 @@ sub checkmaintainers {
             last;
         }
     }
+
+    if (length $data->{owner}) {
+        print DEBUG "owner add >$data->{package}|$data->{owner}<\n";
+        $addmaint = $data->{owner};
+        push(@maintaddrs, $addmaint) unless
+            $addmaint eq $replyto or grep($_ eq $addmaint, @maintaddrs);
+    }
 }
index e070828df14c5aa1d4709ba868371772bd57e9d6..a0cc06ec27a7fa86e4e74705ceb53cb358a36c42 100755 (executable)
@@ -1,5 +1,5 @@
 #!/usr/bin/perl
-# $Id: service.in,v 1.89 2003/08/23 15:12:57 cjwatson Exp $
+# $Id: service.in,v 1.90 2003/08/30 00:15:15 cjwatson Exp $
 #
 # Usage: service <code>.nn
 # Temps:  incoming/P<code>.nn
@@ -137,6 +137,10 @@ my %limit_pkgs = ();
 my %clonebugs = ();
 my @bcc = ();
 
+sub addbcc {
+    push @bcc, $_[0] unless grep { $_ eq $_[0] } @bcc;
+}
+
 for ($procline=0; $procline<=$#bodylines; $procline++) {
     $state eq 'idle' || print "$state ?\n";
     $lowstate eq 'idle' || print "$lowstate ?\n";
@@ -248,7 +252,7 @@ END
             } else {
                 $action= "$gBug closed, send any further explanations to $data->{originator}";
                 do {
-                    &addmaintainers($data->{package}, $data->{severity});
+                    &addmaintainers(%data);
                                        if ( length( $gDoneList ) > 0 && length( $gListDomain ) >
                                        0 ) { &addccaddress("$gDoneList\@$gListDomain"); }
                     $data->{done}= $replyto;
@@ -299,9 +303,9 @@ END
                 $action= "$gBug assigned to package \`$newpackage'.";
             }
             do {
-                &addmaintainers($data->{package}, $data->{severity});
-                &addmaintainers($newpackage);
+                &addmaintainers(%data);
                 $data->{package}= $newpackage;
+                &addmaintainers(%data);
             } while (&getnextbug);
         }
     } elsif (m/^reopen\s+\#?(-?\d+)$/i ? ($noriginator='', 1) :
@@ -319,7 +323,7 @@ END
                     $noriginator eq '' ? "$gBug reopened, originator not changed." :
                         "$gBug reopened, originator set to $noriginator.";
                 do {
-                    &addmaintainers($data->{package}, $data->{severity});
+                    &addmaintainers(%data);
                     $data->{originator}= $noriginator eq '' ?  $data->{originator} : $noriginator;
                     $data->{done}= '';
                 } while (&getnextbug);
@@ -334,7 +338,7 @@ END
         }
         if (&getbug) {
             &foundbug;
-            &addmaintainers($data->{package}, $data->{severity});
+            &addmaintainers(%data);
             $oldsubmitter= $data->{originator};
             $data->{originator}= $newsubmitter;
             $action= "Changed $gBug submitter from $oldsubmitter to $newsubmitter.";
@@ -386,7 +390,7 @@ END
                 $extramessage= "(By the way, this $gBug is currently marked as done.)\n";
             }
             do {
-                &addmaintainers($data->{package}, $data->{severity});
+                &addmaintainers(%data);
                if (length($gForwardList)>0 && length($gListDomain)>0 ) {
                     &addccaddress("$gForwardList\@$gListDomain"); 
                }
@@ -403,7 +407,7 @@ END
             } else {
     $action= "Removed annotation that $gBug had been forwarded to $data->{forwarded}.";
                 do {
-                    &addmaintainers($data->{package}, $data->{severity});
+                    &addmaintainers(%data);
                     $data->{forwarded}= '';
                 } while (&getnextbug);
             }
@@ -424,10 +428,9 @@ END
             $printseverity= "$gDefaultSeverity" if $printseverity eq '';
            $action= "Severity set to \`$newseverity'.";
            do {
-                &addmaintainers($data->{package}, $data->{severity});
+                &addmaintainers(%data);
                 if (defined $gStrongList and isstrongseverity($newseverity)) {
-                    my $addbcc = "$gStrongList\@$gListDomain";
-                    push @bcc, $addbcc unless grep { $_ eq $addbcc } @bccs;
+                    addbcc("$gStrongList\@$gListDomain");
                 }
                 $data->{severity}= $newseverity;
             } while (&getnextbug);
@@ -468,7 +471,7 @@ END
                $action= "Tags removed: " . join(", ", @okaytags);
            }
            do {
-                &addmaintainers($data->{package}, $data->{severity});
+                &addmaintainers(%data);
                $data->{keywords} = '' if ($addsub eq "set");
                if ($addsub eq "sub") {
                    foreach my $t (@badtags) {
@@ -492,7 +495,7 @@ END
        }
         if (&getbug) {
             &foundbug;
-            &addmaintainers($data->{package}, $data->{severity});
+            &addmaintainers(%data);
             $data->{subject}= $newtitle;
             $action= "Changed $gBug title.";
             &savebug;
@@ -517,7 +520,7 @@ END
                @newmergelist= split(/ /,$data->{mergedwith});
                 $discref= $ref;
                 do {
-                    &addmaintainers($data->{package}, $data->{severity});
+                    &addmaintainers(%data);
                    $data->{mergedwith}= ($ref == $discref) ? ''
                         : join(' ',grep($_ ne $ref,@newmergelist));
                 } while (&getnextbug);
@@ -560,7 +563,7 @@ END
             $action= "Merged @newmergelist.";
            for $ref (@newmergelist) {
                &getbug || die "huh ?  $gBug $ref disappeared during merge";
-                &addmaintainers($data->{package}, $data->{severity});
+                &addmaintainers(%data);
                $data->{mergedwith}= join(' ',grep($_ ne $ref,@newmergelist));
                $data->{keywords}= join(' ', keys %tags);
                &savebug;
@@ -623,6 +626,41 @@ END
                %limit_pkgs = ();
                &transcript("Not ignoring any bugs.\n\n");
        }
+    } elsif (m/^owner\s+\#?(-?\d+)\s+!$/i ? ($newowner = $replyto, 1) :
+             m/^owner\s+\#?(-?\d+)\s+(\S.*\S)$/i ? ($newowner = $2, 1) : 0) {
+        $ok++;
+        $ref = $1;
+        if (&setbug) {
+            if (length $data->{owner}) {
+                $action = "Owner changed from $data->{owner} to $newowner.";
+            } else {
+                $action = "Owner recorded as $newowner.";
+            }
+            if (length $data->{done}) {
+                $extramessage = "(By the way, this $gBug is currently " .
+                                "marked as done.)\n";
+            }
+            do {
+                &addmaintainers(%data);
+                $data->{owner} = $newowner;
+            } while (&getnextbug);
+        }
+    } elsif (m/^noowner\s+\#?(-?\d+)$/i) {
+        $ok++;
+        $ref = $1;
+        if (&setbug) {
+            if (length $data->{owner}) {
+                $action = "Removed annotation that $gBug was owned by " .
+                          "$data->{owner}.";
+                do {
+                    &addmaintainers(%data);
+                    $data->{owner} = '';
+                } while (&getnextbug);
+            } else {
+                &transcript("$gBug is not marked as having an owner.\n\n");
+                &nochangebug;
+            }
+        }
     } else {
         &transcript("Unknown command or malformed arguments to command.\n\n");
         if (++$unknowns >= 5) {
@@ -1014,22 +1052,23 @@ sub addccaddress {
 sub addmaintainers {
     # Data structure is:
     #   maintainer email address &c -> assoc of packages -> assoc of bug#'s
+    my %data = @_;
     my ($p, $addmaint, $pshow);
     &ensuremaintainersloaded;
     $anymaintfound=0; $anymaintnotfound=0;
-    for $p (split(m/[ \t?,()]+/,$_[0])) {
+    for $p (split(m/[ \t?,()]+/, $data{package})) {
        $p =~ y/A-Z/a-z/;
         $pshow= ($p =~ m/[-+.a-z0-9]+/ ? $& : '');
        if (defined $gSubscriptionDomain) {
            if (defined($pkgsrc{$p})) {
-               push @bcc, "$pkgsrc{$p}\@$gSubscriptionDomain";
+               addbcc("$pkgsrc{$p}\@$gSubscriptionDomain");
            } else {
-               push @bcc, "$p\@$gSubscriptionDomain";
+               addbcc("$p\@$gSubscriptionDomain");
            }
        }
-        if (defined $_[1] and defined $gStrongList and
-                isstrongseverity($_[1])) {
-            push @bcc, "$gStrongList\@$gListDomain";
+        if (defined $data{severity} and defined $gStrongList and
+                isstrongseverity($data{severity})) {
+            addbcc("$gStrongList\@$gListDomain");
         }
         if (defined($maintainerof{$p})) {
            $addmaint= $maintainerof{$p};
@@ -1043,6 +1082,13 @@ sub addmaintainers {
             $maintccreasons{$gUnknownMaintainerEmail}{$p}{$ref}= 1;
        }
     }
+
+    if (length $data{owner}) {
+        $addmaint = $data{owner};
+        &transcript("MO|$addmaint|$data{package}|$ref|\n") if $dl>2;
+        $maintccreasons{$addmaint}{$data{package}}{$ref} = 1;
+        print "owner add >$data{package}|$addmaint<\n" if $debug;
+    }
 }
 
 sub ensuremaintainersloaded {