| 123456789101112131415161718192021222324252627 |
- #!/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)
|