]> git.decadent.org.uk Git - dak.git/blobdiff - dak/process_upload.py
send announcement only for sourceful uploads
[dak.git] / dak / process_upload.py
index 8b9a178aa9e0a417ff2c2bbd66ada85c92c706bd..93d30f85d672944842f4a8e54111e2bd76868fe6 100755 (executable)
@@ -237,9 +237,13 @@ def subst_for_upload(upload):
                 suite_names.append(suite.suite_name)
         suite_name = ','.join(suite_names)
 
-    maintainer_field = control.get('Changed-By', control.get('Maintainer', cnf['Dinstall::MyEmailAddress']))
-    maintainer = fix_maintainer(maintainer_field)
-    addresses = utils.mail_addresses_for_upload(control.get('Maintainer', cnf['Dinstall::MyEmailAddress']), maintainer_field, changes.primary_fingerprint)
+    maintainer_field = control.get('Maintainer', cnf['Dinstall::MyEmailAddress'])
+    changed_by_field = control.get('Changed-By', maintainer_field)
+    maintainer = fix_maintainer(changed_by_field)
+    if upload.changes.source is not None:
+        addresses = utils.mail_addresses_for_upload(maintainer_field, changed_by_field, changes.primary_fingerprint)
+    else:
+        addresses = utils.mail_addresses_for_upload(maintainer_field, maintainer_field, changes.primary_fingerprint)
 
     bcc = 'X-DAK: dak process-upload'
     if 'Dinstall::Bcc' in cnf:
@@ -260,15 +264,12 @@ def subst_for_upload(upload):
         '__DAK_ADDRESS__': cnf['Dinstall::MyEmailAddress'],
         '__MAINTAINER_FROM__': maintainer[1],
         '__MAINTAINER_TO__': ", ".join(addresses),
-        '__MAINTAINER__': maintainer_field,
+        '__MAINTAINER__': changed_by_field,
         '__BCC__': bcc,
 
         '__BUG_SERVER__': cnf.get('Dinstall::BugServer'),
 
-        # TODO: don't use private member
-        '__FILE_CONTENTS__': upload.changes._signed_file.contents,
-
-        # __REJECT_MESSAGE__
+        '__FILE_CONTENTS__': open(upload.changes.path, 'r').read(),
         }
 
     override_maintainer = cnf.get('Dinstall::OverrideMaintainer')
@@ -289,8 +290,10 @@ def accept(directory, upload):
     for suite in upload.final_suites:
         accepted_to_real_suite = accepted_to_real_suite or suite.policy_queue is None
 
+    sourceful_upload = 'source' in upload.changes.architectures
+
     control = upload.changes.changes
-    if 'source' in upload.changes.architectures and not Options['No-Action']:
+    if sourceful_upload and not Options['No-Action']:
         urgency = control.get('Urgency')
         if urgency not in cnf.value_list('Urgency::Valid'):
             urgency = cnf['Urgency::Default']
@@ -302,27 +305,28 @@ def accept(directory, upload):
     utils.send_mail(message)
 
     # send mail to announce lists and tracking server
-    subst = subst_for_upload(upload)
-    announce = set()
-    for suite in upload.final_suites:
-        if suite.policy_queue is None:
-            continue
-        announce.update(suite.announce or [])
-    announce_address = ", ".join(announce)
-    subst['__ANNOUNCE_LIST_ADDRESS__'] = announce_address
-
-    tracking = cnf.get('Dinstall::TrackingServer')
-    if tracking and 'source' in upload.changes.architectures:
-        announce_address = '{0}\nBcc: {1}@{2}'.format(announce_address, control['Source'], tracking)
-    message = utils.TemplateSubst(subst, os.path.join(cnf['Dir::Templates'], 'process-unchecked.announce'))
-    utils.send_mail(message)
+    if accepted_to_real_suite and sourceful_upload:
+        subst = subst_for_upload(upload)
+        announce = set()
+        for suite in upload.final_suites:
+            if suite.policy_queue is not None:
+                continue
+            announce.update(suite.announce or [])
+        announce_address = ", ".join(announce)
 
-    del subst['__ANNOUNCE_LIST_ADDRESS__']
+        tracking = cnf.get('Dinstall::TrackingServer')
+        if tracking and 'source' in upload.changes.architectures:
+            announce_address = '{0}\nBcc: {1}@{2}'.format(announce_address, control['Source'], tracking)
+
+        subst['__ANNOUNCE_LIST_ADDRESS__'] = announce_address
+
+        message = utils.TemplateSubst(subst, os.path.join(cnf['Dir::Templates'], 'process-unchecked.announce'))
+        utils.send_mail(message)
 
     # Only close bugs for uploads that were not redirected to a policy queue.
     # process-policy will close bugs for those once they are accepted.
     subst = subst_for_upload(upload)
-    if accepted_to_real_suite and cnf.find_b('Dinstall::CloseBugs') and upload.changes.source is not None:
+    if accepted_to_real_suite and cnf.find_b('Dinstall::CloseBugs') and sourceful_upload:
         for bugnum in upload.changes.closed_bugs:
             subst['__BUG_NUMBER__'] = str(bugnum)