parse_debian_versions.py
von TRex- SNIPPET_TEXT:
-
- #!/usr/bin/env python3
- import re
- import sys
- version_regex = re.compile(
- r'^'
- '((?P<epoch>[0-9]):)?'
- '(?P<upstream>('
- '(?P<major>[0-9][a-zA-Z0-9~]*)'
- '(\.(?P<minor>[a-zA-Z0-9~]+))?'
- '(\.(?P<patch>[a-zA-Z0-9~]+))?'
- '[^-]*'
- '))'
- '(-(?P<debian_revision>'
- '[a-zA-Z0-9~]+'
- '(\+(?P<dpatch>[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()
Quellcode
Hier kannst du den Code kopieren und ihn in deinen bevorzugten Editor einfügen. PASTEBIN_DOWNLOAD_SNIPPET_EXPLAIN