Project

General

Profile

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

Riku Saikkonen, 01/10/2014 11:13 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*/?>\s*)$',
31
                                      ' revision="'+gitver[path]+'"\\1',
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 len(gitver) > 0:
39
        warn('extra projects {0} in gitver'.format(
40
                repr(gitver.keys())))
41

    
42
def main():
43
    global args
44
    parser = argparse.ArgumentParser()
45
    parser.add_argument('manifest', type=str,
46
                        help='XML manifest file name')
47
    parser.add_argument('gitver', type=str,
48
                        help='Replicant git_versions.txt file name')
49
    args = parser.parse_args()
50
    load_gitver()
51
    rewrite_manifest(sys.stdout)
52

    
53
if __name__ == '__main__':
54
    main()
(3-3/4)