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