#!/usr/bin/env python3 import re import sys version_regex = re.compile( r'^' '((?P[0-9]):)?' '(?P(' '(?P[0-9][a-zA-Z0-9~]*)' '(\.(?P[a-zA-Z0-9~]+))?' '(\.(?P[a-zA-Z0-9~]+))?' '[^-]*' '))' '(-(?P' '[a-zA-Z0-9~]+' '(\+(?P[a-zA-Z0-9~.]+))?' '))?', ) def process_version(version_string): match = version_regex.search(version_string) if match: groups = match.groups() epoch = match.group('epoch') upstream = match.group('upstream') major = match.group('major') minor = match.group('minor') patch = match.group('patch') debian_rev = match.group('debian_revision') dpatch = match.group('dpatch') return epoch, major, minor, patch, debian_rev, dpatch else: if version_string == '(none)': return ['0']*6 raise ValueError("Unknown version format: {}".format(version_string)) def compare_versions_fancy(v1, v2): sev = '' names = ['E','M','m','p','D','d'] for n, (p1, p2) in enumerate(zip(v1, v2)): if p2 != p1: sev = sev + names[n] else: sev = sev + '_' return sev def main(): debug = False for line in sys.stdin: v1, v2, name = line.split() v1_p = process_version(v1) sev = compare_versions_fancy( v1_p, process_version(v2) ) if debug: print(sev, ' ', name.ljust(25), v1.ljust(25), #'\t', ' '.join([str(x).ljust(5) for x in v1_p]), '->', v2, ) else: print(sev, '\t', name.ljust(35), v1.ljust(25), '->', v2) if __name__ == '__main__': main()