fix usertags: only [a-zA-Z0-9] + - . and @ are allowed.
authormadcoder <madcoder>
Thu, 4 May 2006 12:30:22 +0000 (12:30 +0000)
committermadcoder <madcoder>
Thu, 4 May 2006 12:30:22 +0000 (12:30 +0000)
fix the 'upstream' tag war problem

make mail a lot more informative

btspull
remote/base.py

diff --git a/btspull b/btspull
index d83f54866a6b45452cf21a1db661c32bd3547fd2..449dc1fa1d48ea7a21f7c6d1460ad21a9d62a6c3 100755 (executable)
--- a/btspull
+++ b/btspull
@@ -61,23 +61,26 @@ def getActions(btsbug, rbug):
     uadd = []
     urem = []
 
+    id            = btsbug.id()
     oldStatus     = btsbug.remoteStatus()
     oldResolution = btsbug.remoteResolution()
     wasClosed     = rbug.bts.isClosing(oldStatus, oldResolution)
     wasWontfix    = rbug.bts.isWontfix(oldStatus, oldResolution)
 
-    if 'upstream' not in btsbug.tags():
-        add.append('upstream')
-
+    do = ["# remote status report for #%s" % (id)]
     # test if remote status changed
-    if rbug.status() != oldStatus:
+    tmp = rbug.status()
+    if tmp != oldStatus:
+        do.append("#  * remote status changed: %s -> %s" % (oldStatus or "(?)", tmp))
         if rbug.status():
-            uadd.append("status-%s" % rbug.status())
+            uadd.append("status-%s" % tmp)
         if oldStatus:
             urem.append("status-%s" % oldStatus)
 
     # test if remote resolution changed
+    tmp = rbug.resolution()
     if rbug.resolution() != oldResolution:
+        do.append("#  * remote resolution changed: %s -> %s" % (oldResolution or "(?)", tmp))
         if rbug.status():
             uadd.append("resolution-%s" % rbug.resolution())
         if oldResolution:
@@ -87,23 +90,27 @@ def getActions(btsbug, rbug):
     if rbug.isClosed() != wasClosed:
         if rbug.isClosed():
             if 'fixed-upstream' not in btsbug.tags():
+                do.append("#  * closed upstream")
                 add.append('fixed-upstream')
         else:
             if 'fixed-upstream' in btsbug.tags():
+                do.append("#  * reopen upstream")
                 rem.append('fixed-upstream')
 
     # look if we have to change the 'wontfix' tag
     if rbug.isWontfix() != wasWontfix:
         if rbug.isWontfix():
             if 'wontfix' not in btsbug.tags():
+                do.append("#  * upstream said bug is wontfix")
+                add.append('upstream')
                 add.append('wontfix')
         else:
             if 'wontfix' in btsbug.tags():
+                do.append("#  * upstream said bug isn't wontfix anymore")
                 rem.append('wontfix')
 
     # build mail
     res = []
-    id = btsbug.id()
 
     if not rbug.isForwarded(btsbug.fwd()):
         res.append("forwarded %s %s" % (id, rbug.uri()))
@@ -116,10 +123,12 @@ def getActions(btsbug, rbug):
     if uadd:
         res.append("usertags %s + %s" % (id, ' '.join(uadd)))
 
+    if res:
+        res = do + res + ['']
+
     return res
 
 class Task(threading.Thread):
-
     def __init__(self, srcpkg, q, debug = False):
         self._spkg  = srcpkg
         self._queue = q
@@ -145,10 +154,12 @@ class Task(threading.Thread):
             return
 
         precmds = []
+        precmds.append("#")
         precmds.append("# bts-link upstream status pull for source package %s" % (self._spkg))
         precmds.append("# see http://lists.debian.org/debian-devel-announce/2006/05/msg00001.html")
         precmds.append("#")
         precmds.append("user %s" % (Cnf.get('general', 'user')))
+        precmds.append("")
 
         cmds.append('thanks')
 
index 4f7603f5b844e5074919e13145e6ec4fa998dd3b..124624b6b4fcbcaa955ba5aeef5e917af88688c7 100644 (file)
 # SUCH DAMAGE.
 ###############################################################################
 
-import sys
+import sys, re
 
 class RemoteReport:
+    _tokenre = re.compile("[^a-zA-Z0-9@.+\-]")
+
     def __init__(self, uri, data, bts):
         self._uri  = uri
         self._data = data
@@ -42,11 +44,14 @@ class RemoteReport:
     def id(self):
         return self.bts._bugId(self._data)
 
+    def _makeToken(self, val):
+        return RemoteReport._tokenre.sub('-', val)
+
     def status(self):
-        return self.bts._bugStatus(self._data)
+        return self._makeToken(self.bts._bugStatus(self._data))
 
     def resolution(self):
-        return self.bts._bugResolution(self._data)
+        return self._makeToken(self.bts._bugResolution(self._data))
 
     def isClosed(self):
         return self.bts.isClosing(self.status(), self.resolution())