1#!/usr/bin/env python 2# vim: set fileencoding=utf-8 : 3# 4# Hello. This is make-release-mail.py from the Telepathy project. It's 5# designed to turn an item from a NEWS file into a mail suitable for sending 6# to <telepathy@lists.freedesktop.org>. I hope that you enjoy your stay. 7 8import sys 9 10def extract_description(package, version, news_path): 11 release_name = [] 12 details = [] 13 14 with open(news_path) as f: 15 lines = (line for line in f.readlines()) 16 for line in lines: 17 # Find the 'telepathy-foo 0.1.2' header 18 if line.startswith("%s %s" % (package, version)): 19 break 20 21 # Skip the ====== line, and the first blank line 22 lines.next() 23 lines.next() 24 25 got_release_name = False 26 27 for line in lines: 28 line = line.rstrip() 29 # If we hit the next version header, we're done 30 if line.startswith(package): 31 break 32 # Else, if we hit a blank line and we're still reading the release 33 # name, we're done with the release name. 34 elif not got_release_name and line == '': 35 got_release_name = True 36 # Otherwise, append this to the relevant list 37 elif not got_release_name: 38 release_name.append(line) 39 else: 40 details.append(line) 41 42 assert got_release_name, (release_name, details) 43 44 # We rstrip details because it picks up a trailing blank line 45 return ('\n'.join(release_name), '\n'.join(details).rstrip()) 46 47BASE_URL = 'http://telepathy.freedesktop.org/releases' 48GIT_URL = 'http://cgit.freedesktop.org/telepathy' 49 50def main(package, version, news_path): 51 release_name, details = extract_description(package, version, news_path) 52 53 print(""" 54%(release_name)s 55 56tarball: %(base_url)s/%(package)s/%(package)s-%(version)s.tar.gz 57signature: %(base_url)s/%(package)s/%(package)s-%(version)s.tar.gz.asc 58git: %(git_url)s/%(package)s 59 60%(details)s""").strip().rstrip() % { 61 'base_url': BASE_URL, 62 'git_url': GIT_URL, 63 'package': package, 64 'version': version, 65 'release_name': release_name, 66 'details': details, 67 } 68 69if __name__ == '__main__': 70 try: 71 package, version, news_path = sys.argv[1:] 72 73 main(package, version, news_path) 74 except ValueError, e: 75 sys.stderr.write( 76 'Usage: %s package-name package.version.number path/to/NEWS\n' % 77 sys.argv[0]) 78 sys.stderr.flush() 79 sys.exit(1) 80