Project

General

Profile

RE: Please consider including repo manifest -r output wit... » addgitver.py

Riku Saikkonen, 01/10/2014 11:11 PM

 
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()
(1-1/4)