import rpm import subprocess deb_versions = [ "1.0", "1.0.1", "1.0.2", "1.0.a", "1.0~rc1", "1.0~rc2", "1.0-506-g044287b", "1.0-1-g044287b", ] rpm_versions = [ ("1.0", "1"), ("1.0.1", "1"), ("1.0.2", "1"), ("1.0", "0.rc1"), ("1.0", "0.rc2"), ("1.0", "2.506-g044287b"), ] def compare_deb(left, right): if subprocess.call(["dpkg", "--compare-versions", left, "lt", right]) == 0: return -1 if subprocess.call(["dpkg", "--compare-versions", left, "eq", right]) == 0: return 0 if subprocess.call(["dpkg", "--compare-versions", left, "gt", right]) == 0: return 1 raise Exception("Couldn't compare versions %s %s" % (left, right)) def compare_rpm(left, right): return rpm.labelCompare(("1", left[0], left[1]), ("1", right[0], right[1])) def sort_and_print(l, cmp): for v in sorted(l, cmp=cmp): if isinstance(v, tuple): print "%s-%s" % v else: print v print sort_and_print(deb_versions, compare_deb) sort_and_print(rpm_versions, compare_rpm)