#!/usr/bin/env python3 import re,sys def parse(value): if not re.fullmatch(r'(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)',value): raise ValueError('Expected stable MAJOR.MINOR.PATCH version') numbers=tuple(map(int,value.split('.'))) if any(n>2**64-1 for n in numbers):raise ValueError('Version number is too large') return numbers if __name__=='__main__': try: if sys.argv[1]=='greater': sys.exit(0 if parse(sys.argv[2])>parse(sys.argv[3]) else 1) if sys.argv[1]=='latest': versions=[] for line in sys.stdin: fields=line.split() if len(fields)!=2 or not fields[1].startswith('refs/tags/v'):continue value=fields[1].removeprefix('refs/tags/v').removesuffix('^{}') try:versions.append((parse(value),value)) except ValueError:pass if not versions:raise ValueError('No stable release tags found') print(max(versions)[1]) else:raise ValueError('Unknown version command') except (ValueError,IndexError) as error: print(str(error),file=sys.stderr);sys.exit(2)