blob: eac3667c91033a61a59627c81045a70775f70d4d [file] [log] [blame]
David Brown23f91ad2017-05-16 11:38:17 -06001"""
2Semi Semantic Versioning
3
4Implements a subset of semantic versioning that is supportable by the image header.
5"""
6
7from collections import namedtuple
8import re
9
10SemiSemVersion = namedtuple('SemiSemVersion', ['major', 'minor', 'revision', 'build'])
11
12version_re = re.compile(r"""^([1-9]\d*)(\.([1-9]\d*)(\.([1-9]\d*)(\+([a-z1-9-][a-z0-9-]*))?)?)?$""")
13def decode_version(text):
14 """Decode the version string, which should be of the form maj.min.rev+build"""
15 # print("decode:", text)
16 m = version_re.match(text)
17 if m:
18 result = SemiSemVersion(
19 int(m.group(1)) if m.group(1) else 0,
20 int(m.group(3)) if m.group(3) else 0,
21 int(m.group(5)) if m.group(5) else 0,
22 int(m.group(7)) if m.group(7) else 0)
23 return result
24 else:
25 msg = "Invalid version number, should be maj.min.rev+build with later parts optional"
26 raise argparse.ArgumentTypeError(msg)
27