@@ -33,20 +33,50 @@ def main(action, llvm_dir):
33
33
def git_version ():
34
34
version = exec (['git' , 'describe' , '--long' , '--candidates=999' ,
35
35
'--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 )
40
37
version = f'{ major } .{ minor } '
41
38
if git :
42
- assert (git .startswith ('g' ))
43
- version += git
39
+ version += f'g{ git } '
44
40
if dirty :
45
- assert (dirty == 'm' )
46
41
version += '+m'
47
42
return version
48
43
49
44
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
+
50
80
def git_commit (dir = '.' ):
51
81
return exec (['git' , 'rev-parse' , f'--short={ GIT_REF_LEN } ' , 'HEAD' ], dir )
52
82
0 commit comments