1
|
import sys
|
2
|
import re
|
3
|
import argparse
|
4
|
|
5
|
args = None
|
6
|
gitver = dict()
|
7
|
|
8
|
def warn(msg):
|
9
|
sys.stderr.write('{0}: warning: {1}\n'.format(sys.argv[0], msg))
|
10
|
|
11
|
def load_gitver():
|
12
|
with open(args.gitver, 'r') as f:
|
13
|
for line in f:
|
14
|
a = line.rstrip('\n').split(' ')
|
15
|
if len(a) != 3 or a[1] != 'commit':
|
16
|
sys.stderr.write('invalid git_versions.txt line: '+line)
|
17
|
gitver[a[0]] = a[2]
|
18
|
|
19
|
def rewrite_manifest(out):
|
20
|
projectexp = re.compile('\s*<project .*/>\s*')
|
21
|
pathexp = re.compile(' path="([^"]*)"')
|
22
|
with open(args.manifest, 'r') as f:
|
23
|
for line in f:
|
24
|
if projectexp.match(line):
|
25
|
pathm = pathexp.search(line)
|
26
|
if pathm:
|
27
|
path = pathm.group(1)
|
28
|
if path in gitver:
|
29
|
line = re.sub(' revision="', ' upstream="', line)
|
30
|
line = re.sub('/>\s*$',
|
31
|
'revision="'+gitver[path]+'" />\n',
|
32
|
line)
|
33
|
del gitver[path]
|
34
|
else:
|
35
|
warn('unknown project {0} in manifest'.format(
|
36
|
repr(path)))
|
37
|
out.write(line)
|
38
|
if 'build' in gitver:
|
39
|
del gitver['build'] # ok if missing
|
40
|
if len(gitver) > 0:
|
41
|
warn('extra projects {0} in gitver'.format(
|
42
|
repr(gitver.keys())))
|
43
|
|
44
|
def main():
|
45
|
global args
|
46
|
parser = argparse.ArgumentParser()
|
47
|
parser.add_argument('manifest', type=str,
|
48
|
help='XML manifest file name')
|
49
|
parser.add_argument('gitver', type=str,
|
50
|
help='Replicant git_versions.txt file name')
|
51
|
args = parser.parse_args()
|
52
|
load_gitver()
|
53
|
rewrite_manifest(sys.stdout)
|
54
|
|
55
|
if __name__ == '__main__':
|
56
|
main()
|