[releng] find_unblocked_orphans: Add email support

Till Maas till at fedoraproject.org
Tue Oct 7 17:22:17 UTC 2014


commit ef1302571035960a6073b2f1d45b3a0705548a16
Author: Till Maas <opensource at till.name>
Date:   Tue Oct 7 19:22:41 2014 +0200

    find_unblocked_orphans: Add email support

 scripts/find_unblocked_orphans.py |   74 +++++++++++++++++++++++++++++++-----
 1 files changed, 63 insertions(+), 11 deletions(-)
---
diff --git a/scripts/find_unblocked_orphans.py b/scripts/find_unblocked_orphans.py
index 195518c..1ef656b 100755
--- a/scripts/find_unblocked_orphans.py
+++ b/scripts/find_unblocked_orphans.py
@@ -17,8 +17,10 @@ from threading import Thread
 import argparse
 import cPickle as pickle
 import datetime
+import email.mime.text
 import hashlib
 import os
+import smtplib
 import sys
 
 import koji
@@ -37,32 +39,42 @@ EPEL5_RELEASE = dict(
     source_repo='https://kojipkgs.fedoraproject.org/mash/updates/'
     'el5-epel/SRPMS',
     tag='dist-5E-epel',
-    branch='el5')
+    branch='el5',
+    mailto='epel-devel at lists.fedoraproject.org',
+)
 
 EPEL6_RELEASE = dict(
     repo='https://kojipkgs.fedoraproject.org/mash/updates/el6-epel/x86_64/',
     source_repo='https://kojipkgs.fedoraproject.org/mash/updates/'
     'el6-epel/SRPMS',
     tag='dist-6E-epel',
-    branch='el6')
+    branch='el6',
+    mailto='epel-devel at lists.fedoraproject.org',
+)
 
 EPEL7_RELEASE = dict(
     repo='https://kojipkgs.fedoraproject.org/mash/updates/epel7/x86_64/',
     source_repo='https://kojipkgs.fedoraproject.org/mash/updates/epel7/SRPMS',
     tag='epel7',
-    branch='epel7')
+    branch='epel7',
+    mailto='epel-devel at lists.fedoraproject.org',
+)
 
 RAWHIDE_RELEASE = dict(
     repo='https://kojipkgs.fedoraproject.org/mash/rawhide/i386/os',
     source_repo='https://kojipkgs.fedoraproject.org/mash/rawhide/source/SRPMS',
     tag='f22',
-    branch='master')
+    branch='master',
+    mailto='devel at lists.fedoraproject.org',
+)
 
 BRANCHED_RELEASE = dict(
     repo='https://kojipkgs.fedoraproject.org/mash/branched/i386/os',
     source_repo='https://kojipkgs.fedoraproject.org/mash/branched/source/SRPMS',
     tag='f21',
-    branch='f21')
+    branch='f21',
+    mailto='devel at lists.fedoraproject.org',
+)
 
 RELEASES = {
     "rawhide": RAWHIDE_RELEASE,
@@ -95,12 +107,30 @@ packages or a package that depends on one. Please orphan the affected package or
 retire your package to avoid broken dependencies.
 """
 
-FOOTER = """The script creating this output is run and developed by Fedora
+FOOTER = """-- \nThe script creating this output is run and developed by Fedora
 Release Engineering. Please report issues at its trac instance:
 https://fedorahosted.org/rel-eng/
 The sources of this script can be found at:
 https://git.fedorahosted.org/cgit/releng/tree/scripts/find_unblocked_orphans.py
 """
+
+
+def send_mail(from_, to, subject, text, bcc=None):
+    if bcc is None:
+        bcc = []
+
+    msg = email.mime.text.MIMEText(text)
+    msg["Subject"] = subject
+    msg["From"] = from_
+    msg["To"] = to
+    if isinstance(to, basestring):
+        to = [to]
+    smtp = smtplib.SMTP('127.0.0.1')
+    errors = smtp.sendmail(from_, to + bcc, msg.as_string())
+    smtp.quit()
+    return errors
+
+
 pkgdb = pkgdb2client.PkgDB()
 
 
@@ -555,7 +585,6 @@ def package_info(packages, release, orphans=None, failed=None):
 
     addresses = ["{0}@fedoraproject.org".format(p)
                  for p in affected_people.keys() if p != ORPHAN_UID]
-    addresses = "Bcc: {0}\n".format(", ".join(addresses))
     return info, addresses
 
 
@@ -565,6 +594,13 @@ def main():
                         help="Do not look for orphans",
                         default=False, action="store_true")
     parser.add_argument("--release", choices=RELEASES.keys(), default="rawhide")
+    parser.add_argument("--mailto", default=None,
+                        help="Send mail to this address (for testing)")
+    parser.add_argument(
+        "--send", default=False, action="store_true",
+        help="Actually send mail including Bcc addresses to mailing list"
+    )
+    parser.add_argument("--mailfrom", default="nobody at fedoraproject.org")
     parser.add_argument("failed", nargs="*",
                         help="Additional packages, e.g. FTBFS packages")
     args = parser.parse_args()
@@ -582,13 +618,29 @@ def main():
     unblocked = unblocked_packages(sorted(list(set(list(orphans) + failed))))
     sys.stderr.write('done\n')
 
-    print HEADER.format(RELEASES[args.release]["tag"].upper())
+    text = HEADER.format(RELEASES[args.release]["tag"].upper())
     info, addresses = package_info(unblocked, args.release, orphans=orphans,
                                    failed=failed)
-    print info
-    print FOOTER
+    text += "\n"
+    text += info
+    text += FOOTER
+    print text
+
+    if args.mailto or args.send:
+        subject = "Orphan packages in " + args.release
+        if args.mailto:
+            mailto = args.mailto
+        else:
+            mailto = RELEASES[args.release]["mailto"]
+        if args.send:
+            bcc = addresses
+        else:
+            bcc = None
+        mail_errors = send_mail(args.mailfrom, mailto, subject, text, bcc)
+        if mail_errors:
+            sys.stderr.write("mail errors: " + repr(mail_errors) + "\n")
 
-    sys.stderr.write(addresses)
+    sys.stderr.write("Addresses: " + ", ".join(addresses) + "\n")
 
 if __name__ == "__main__":
     main()


More information about the rel-eng mailing list