Skip to content

Commit f0ecc0a

Browse files
committed
fix: parsing of Git version
1 parent cb064fa commit f0ecc0a

File tree

1 file changed

+37
-7
lines changed

1 file changed

+37
-7
lines changed

version

+37-7
Original file line numberDiff line numberDiff line change
@@ -33,20 +33,50 @@ def main(action, llvm_dir):
3333
def git_version():
3434
version = exec(['git', 'describe', '--long', '--candidates=999',
3535
'--match=wasi-sdk-*', '--dirty=+m', f'--abbrev={GIT_REF_LEN}'])
36-
# Parse, e.g.: wasi-sdk-21-0-g317548590b40+m
37-
parts = version.replace('+', '-').split('-')
38-
assert (parts[0:2] == ['wasi', 'sdk'])
39-
major, minor, git, dirty = parts[2:]
36+
major, minor, git, dirty = parse_git_version(version)
4037
version = f'{major}.{minor}'
4138
if git:
42-
assert (git.startswith('g'))
43-
version += git
39+
version += f'g{git}'
4440
if dirty:
45-
assert (dirty == 'm')
4641
version += '+m'
4742
return version
4843

4944

45+
def parse_git_version(version):
46+
# Parse, e.g.: wasi-sdk-21-0-g317548590b40+m
47+
parts = version.replace('+', '-').split('-')
48+
assert parts.pop(0) == 'wasi'
49+
assert parts.pop(0) == 'sdk'
50+
51+
major, minor = parts.pop(0), parts.pop(0)
52+
git = None
53+
dirty = False
54+
55+
if parts:
56+
# Check: git|dirty.
57+
next = parts.pop(0)
58+
if next == 'm':
59+
dirty = True
60+
else:
61+
git = next[1:]
62+
63+
# Check: dirty.
64+
if parts:
65+
assert parts.pop(0) == 'm', f'expected dirty flag: +m'
66+
dirty = True
67+
68+
assert not parts, f'unexpected suffixes: {parts}'
69+
return major, minor, git, dirty
70+
71+
72+
# Some inline tests to check Git version parsing:
73+
assert parse_git_version(
74+
'wasi-sdk-21-0-g317548590b40+m') == ('21', '0', '317548590b40', True)
75+
assert parse_git_version('wasi-sdk-21-2+m') == ('21', '2', None, True)
76+
assert parse_git_version(
77+
'wasi-sdk-23-0-g317548590b40') == ('23', '0', '317548590b40', False)
78+
79+
5080
def git_commit(dir='.'):
5181
return exec(['git', 'rev-parse', f'--short={GIT_REF_LEN}', 'HEAD'], dir)
5282

0 commit comments

Comments
 (0)