#!/usr/bin/python3 import sys sys.path.append(sys.path[0] + "/../lib/python") import os, re, subprocess import locale from debian_linux.debian import Changelog, Version def print_stable_log(log, cur_ver, new_ver): log.flush() # serialise our output with git's subprocess.check_call(['git', 'log', '--reverse', '--no-merges', '--pretty= - %s', '{}..{}'.format(cur_ver, new_ver)], stdout=log) def main(repo, new_ver): locale.setlocale(locale.LC_CTYPE, "C.UTF-8") os.environ['GIT_DIR'] = repo + '/.git' changelog = Changelog(version=Version) cur_ver = changelog[0].version.upstream # Nothing to update if cur_ver == new_ver: sys.exit(0) new_pkg_ver = new_ver + '-1' # Three possible cases: # 1. The current version has been released so we need to add a new # version to the changelog. # 2. The current version has not been released so we're changing its # version string. # (a) There are no stable updates included in the current version, # so we need to insert an introductory line, the URL(s) and # git log(s) and a blank line at the top. # (b) One or more stable updates are already included in the current # version, so we need to insert the URL(s) and git log(s) after # them. changelog_intro = 'New upstream version:' # Case 1 if changelog[0].distribution != 'UNRELEASED': subprocess.check_call(['dch', '-v', new_pkg_ver, '-D', 'UNRELEASED', changelog_intro]) with open('debian/changelog', 'r') as old_log: with open('debian/changelog.new', 'w') as new_log: line_no = 0 inserted = False intro_line = ' * {}\n'.format(changelog_intro) for line in old_log: line_no += 1 # Case 2 if changelog[0].distribution == 'UNRELEASED' and line_no == 1: print('{} ({}) UNRELEASED; urgency={}' .format(changelog[0].source, new_pkg_ver, changelog[0].urgency), file=new_log) continue if not inserted: # Case 2(a) if line_no == 3 and line != intro_line: new_log.write(intro_line) print_stable_log(new_log, cur_ver, new_ver) new_log.write('\n') inserted = True # Case 1 or 2(b) elif line_no > 3 and line == '\n': print_stable_log(new_log, cur_ver, new_ver) inserted = True # Check that we inserted before hitting the end of the # first version entry assert not (line.startswith(' -- ') and not inserted) new_log.write(line) os.rename('debian/changelog.new', 'debian/changelog') if __name__ == '__main__': if len(sys.argv) != 3: print('''\ Usage: {} REPO VERSION REPO is the git repository to generate a changelog from VERSION is the upstream version'''.format(sys.argv[0]), file=sys.stderr) sys.exit(2) main(*sys.argv[1:])