#!/usr/bin/python3 # -*- coding: utf-8 -*- # Copyright © 2008 Canonical Ltd. # Author: Scott James Remnant . # Hacked up by: Bryce Harrington # Change merge_changelog to merge-changelog: Ryan Kavanagh # # # This program is free software: you can redistribute it and/or modify # it under the terms of version 3 of the GNU General Public License as # published by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . import sys from debian.changelog import Changelog def usage(exit_code=1): print('''Usage: merge-changelog merge-changelog takes two changelogs that once shared a common source, merges them back together, and prints the merged result to stdout. This is useful if you need to manually merge a ubuntu package with a new Debian release of the package. ''') sys.exit(exit_code) ######################################################################## # Changelog Management ######################################################################## def merge_changelog(left_changelog, right_changelog): """Merge a changelog file.""" with open(left_changelog) as f: left_cl = Changelog(f) with open(right_changelog) as f: right_cl = Changelog(f) left_versions = set(left_cl.versions) right_versions = set(right_cl.versions) left_blocks = iter(left_cl) right_blocks = iter(right_cl) for version in sorted(left_versions | right_versions, reverse=True): if version in left_versions: block = next(left_blocks) if version in right_versions: next(right_blocks) else: block = next(right_blocks) assert block.version == version print(str(block).strip(), end='\n\n') def main(): if len(sys.argv) > 1 and sys.argv[1] in ('-h', '--help'): usage(0) if len(sys.argv) != 3: usage(1) left_changelog = sys.argv[1] right_changelog = sys.argv[2] merge_changelog(left_changelog, right_changelog) sys.exit(0) if __name__ == '__main__': main()