]> git.decadent.org.uk Git - dak.git/blobdiff - daklib/queue.py
Make sure uid_email is a valid email address
[dak.git] / daklib / queue.py
index f912bef19aec4a97470859463e7eae627b1bf65c..4e7a5e95531316dd8b76348f97435e631b237196 100755 (executable)
@@ -1180,6 +1180,9 @@ class Upload(object):
         if not self.pkg.changes["architecture"].has_key("source"):
             return True
 
+        if session is None:
+            session = DBConn().session()
+
         (status, reason) = self.load_dsc(action=action)
         if not status:
             self.rejects.append(reason)
@@ -1217,7 +1220,11 @@ class Upload(object):
 
         # Only a limited list of source formats are allowed in each suite
         for dist in self.pkg.changes["distribution"].keys():
-            allowed = [ x.format_name for x in dist.srcformats ]
+            suite = get_suite(dist, session=session)
+            if not suite:
+                self.rejects.append("%s: cannot find suite %s when checking source formats" % (dsc_filename, dist))
+                continue
+            allowed = [ x.format_name for x in suite.srcformats ]
             if self.pkg.dsc["format"] not in allowed:
                 self.rejects.append("%s: source format '%s' not allowed in %s (accepted: %s) " % (dsc_filename, self.pkg.dsc["format"], dist, ", ".join(allowed)))
 
@@ -1650,6 +1657,7 @@ class Upload(object):
                     self.rejects.append("%s: deb contents timestamp check failed [%s: %s]" % (filename, sys.exc_type, sys.exc_value))
 
     def check_if_upload_is_sponsored(self, uid_email, uid_name):
+        uid_email = '@'.join(uid_email.split('@')[:2])
         if uid_email in [self.pkg.changes["maintaineremail"], self.pkg.changes["changedbyemail"]]:
             sponsored = False
         elif uid_name in [self.pkg.changes["maintainername"], self.pkg.changes["changedbyname"]]:
@@ -2000,26 +2008,31 @@ distribution."""
         """
 
         cnf = Config()
-        announcetemplate = os.path.join(cnf["Dir::Templates"], 'process-unchecked.announce')
+
+        # Skip all of this if not sending mail to avoid confusing people
+        if cnf.has_key("Dinstall::Options::No-Mail") and cnf["Dinstall::Options::No-Mail"]:
+            return ""
 
         # Only do announcements for source uploads with a recent dpkg-dev installed
         if float(self.pkg.changes.get("format", 0)) < 1.6 or not \
            self.pkg.changes["architecture"].has_key("source"):
             return ""
 
-        lists_done = {}
-        summary = ""
+        announcetemplate = os.path.join(cnf["Dir::Templates"], 'process-unchecked.announce')
 
-        self.Subst["__SHORT_SUMMARY__"] = short_summary
+        lists_todo = {}
+        summary = ""
 
+        # Get a unique list of target lists
         for dist in self.pkg.changes["distribution"].keys():
             suite = get_suite(dist)
             if suite is None: continue
-            announce_list = suite.announce
-            if announce_list == "" or lists_done.has_key(announce_list):
-                continue
+            for tgt in suite.announce:
+                lists_todo[tgt] = 1
+
+        self.Subst["__SHORT_SUMMARY__"] = short_summary
 
-            lists_done[announce_list] = 1
+        for announce_list in lists_todo.keys():
             summary += "Announcing to %s\n" % (announce_list)
 
             if action: