Blame telepathy-account-widgets/tools/make-release-mail.py

Packit Service c6b9b0
#!/usr/bin/env python
Packit Service c6b9b0
# vim: set fileencoding=utf-8 :
Packit Service c6b9b0
#
Packit Service c6b9b0
# Hello. This is make-release-mail.py from the Telepathy project. It's
Packit Service c6b9b0
# designed to turn an item from a NEWS file into a mail suitable for sending
Packit Service c6b9b0
# to <telepathy@lists.freedesktop.org>. I hope that you enjoy your stay.
Packit Service c6b9b0
Packit Service c6b9b0
import sys
Packit Service c6b9b0
import re
Packit Service c6b9b0
Packit Service c6b9b0
def looks_like_a_header(line, package, version=None):
Packit Service c6b9b0
    if version is None:
Packit Service c6b9b0
        pattern = "^%s .* \(.*\)$" % package
Packit Service c6b9b0
    else:
Packit Service c6b9b0
        pattern = "^%s %s \(.*\)$" % (package, version)
Packit Service c6b9b0
Packit Service c6b9b0
    return re.match(pattern, line) is not None
Packit Service c6b9b0
Packit Service c6b9b0
def extract_description(package, version, news_path):
Packit Service c6b9b0
    release_name = []
Packit Service c6b9b0
    details = []
Packit Service c6b9b0
Packit Service c6b9b0
    with open(news_path) as f:
Packit Service c6b9b0
        lines = (line for line in f.readlines())
Packit Service c6b9b0
        for line in lines:
Packit Service c6b9b0
            # Find the 'telepathy-foo 0.1.2' header
Packit Service c6b9b0
            if looks_like_a_header(line, package, version):
Packit Service c6b9b0
                break
Packit Service c6b9b0
Packit Service c6b9b0
        # Skip the ====== line, and the first blank line
Packit Service c6b9b0
        lines.next()
Packit Service c6b9b0
        lines.next()
Packit Service c6b9b0
Packit Service c6b9b0
        got_release_name = False
Packit Service c6b9b0
Packit Service c6b9b0
        for line in lines:
Packit Service c6b9b0
            line = line.rstrip()
Packit Service c6b9b0
            # If we hit the next version header, we're done
Packit Service c6b9b0
            if looks_like_a_header(line, package):
Packit Service c6b9b0
                break
Packit Service c6b9b0
            # Else, if we hit a blank line and we're still reading the release
Packit Service c6b9b0
            # name, we're done with the release name.
Packit Service c6b9b0
            elif not got_release_name and line == '':
Packit Service c6b9b0
                got_release_name = True
Packit Service c6b9b0
            # Otherwise, append this to the relevant list
Packit Service c6b9b0
            elif not got_release_name:
Packit Service c6b9b0
                release_name.append(line)
Packit Service c6b9b0
            else:
Packit Service c6b9b0
                details.append(line)
Packit Service c6b9b0
Packit Service c6b9b0
        assert got_release_name, (release_name, details)
Packit Service c6b9b0
Packit Service c6b9b0
    # We rstrip details because it picks up a trailing blank line
Packit Service c6b9b0
    return ('\n'.join(release_name), '\n'.join(details).rstrip())
Packit Service c6b9b0
Packit Service c6b9b0
BASE_URL = 'http://telepathy.freedesktop.org/releases'
Packit Service c6b9b0
GIT_URL = 'http://cgit.freedesktop.org/telepathy'
Packit Service c6b9b0
Packit Service c6b9b0
def main(package, version, news_path):
Packit Service c6b9b0
    release_name, details = extract_description(package, version, news_path)
Packit Service c6b9b0
Packit Service c6b9b0
    print """
Packit Service c6b9b0
%(release_name)s
Packit Service c6b9b0
Packit Service c6b9b0
tarball: %(base_url)s/%(package)s/%(package)s-%(version)s.tar.gz
Packit Service c6b9b0
signature: %(base_url)s/%(package)s/%(package)s-%(version)s.tar.gz.asc
Packit Service c6b9b0
git: %(git_url)s/%(package)s
Packit Service c6b9b0
Packit Service c6b9b0
%(details)s""".strip().rstrip() % {
Packit Service c6b9b0
        'base_url': BASE_URL,
Packit Service c6b9b0
        'git_url': GIT_URL,
Packit Service c6b9b0
        'package': package,
Packit Service c6b9b0
        'version': version,
Packit Service c6b9b0
        'release_name': release_name,
Packit Service c6b9b0
        'details': details,
Packit Service c6b9b0
    }
Packit Service c6b9b0
Packit Service c6b9b0
if __name__ == '__main__':
Packit Service c6b9b0
    try:
Packit Service c6b9b0
        package, version, news_path = sys.argv[1:]
Packit Service c6b9b0
Packit Service c6b9b0
        main(package, version, news_path)
Packit Service c6b9b0
    except ValueError, e:
Packit Service c6b9b0
        sys.stderr.write(
Packit Service c6b9b0
            'Usage: %s package-name package.version.number path/to/NEWS\n' %
Packit Service c6b9b0
            sys.argv[0])
Packit Service c6b9b0
        sys.stderr.flush()
Packit Service c6b9b0
        sys.exit(1)