From a43e8f549071d81f6865486cf197ad78a8b7f5b8 Mon Sep 17 00:00:00 2001
From: Don Armstrong <don@volo>
Date: Mon, 19 Mar 2007 00:31:43 -0700
Subject: [PATCH] add fixed and notfixed commands

---
 Debbugs/Config.pm    | 28 +++++++++++++++++++++++++++
 Debbugs/Status.pm    |  2 +-
 scripts/service.in   | 45 ++++++++++++++++++++++++++++++++++++++++----
 t/06_mail_handling.t | 12 +++++++++++-
 4 files changed, 81 insertions(+), 6 deletions(-)

diff --git a/Debbugs/Config.pm b/Debbugs/Config.pm
index 9b2792a2..68dd507a 100644
--- a/Debbugs/Config.pm
+++ b/Debbugs/Config.pm
@@ -348,6 +348,34 @@ set_default(\%config,'removal_default_distribution_tags',
 	    [qw(unstable testing)]
 	   );
 
+=item package_name_re
+
+The regex which will match a package name
+
+Default: '[a-z0-9][a-z0-9\.+-]+'
+
+=cut
+
+set_default(\%config,'package_name_re',
+	    '[a-z0-9][a-z0-9\.+-]+');
+
+=item package_version_re
+
+The regex which will match a package version
+
+Default: '[A-Za-z0-9:+\.-]+'
+
+=cut
+
+set_default(\%config,'package_version_re',
+	    '[A-Za-z0-9:+\.-]+');
+
+
+
+
+
+
+
 set_default(\%config,'default_severity','normal');
 set_default(\%config,'show_severities','critical, grave, normal, minor, wishlist');
 set_default(\%config,'strong_severities',[qw(critical grave)]);
diff --git a/Debbugs/Status.pm b/Debbugs/Status.pm
index c78e5855..22d81834 100644
--- a/Debbugs/Status.pm
+++ b/Debbugs/Status.pm
@@ -48,7 +48,7 @@ BEGIN{
 		     read   => [qw(readbug read_bug lockreadbug)],
 		     write  => [qw(writebug makestatus unlockwritebug)],
 		     versions => [qw(addfoundversions addfixedversions),
-				  qw(removefoundversions)
+				  qw(removefoundversions removefixedversions)
 				 ],
 		     hook     => [qw(bughook bughook_archive)],
 		    );
diff --git a/scripts/service.in b/scripts/service.in
index e5074d32..d4e8e98e 100755
--- a/scripts/service.in
+++ b/scripts/service.in
@@ -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";
@@ -507,7 +507,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;
@@ -560,8 +562,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;
diff --git a/t/06_mail_handling.t b/t/06_mail_handling.t
index c5be8477..01d4bc0d 100644
--- a/t/06_mail_handling.t
+++ b/t/06_mail_handling.t
@@ -1,7 +1,7 @@
 # -*- mode: cperl;-*-
 # $Id: 05_mail.t,v 1.1 2005/08/17 21:46:17 don Exp $
 
-use Test::More tests => 31;
+use Test::More tests => 37;
 
 use warnings;
 use strict;
@@ -135,6 +135,16 @@ my @control_commands =
 			     status_key => 'found_versions',
 			     status_value => [],
 			    },
+      'fixed_1.1'        => {command => 'fixed',
+			     value   => '1.1',
+			     status_key => 'fixed_versions',
+			     status_value => ['1.1'],
+			    },
+      'notfixed_1.1'     => {command => 'notfixed',
+			     value   => '1.1',
+			     status_key => 'fixed_versions',
+			     status_value => [],
+			    },
       submitter_foo      => {command => 'submitter',
 			     value   => 'foo@bar.com',
 			     status_key => 'originator',
-- 
2.39.5