Set up branching for 2.0alpha
[profile/ivi/package-groups.git] / scripts / merge-patterns.py
1 #!/usr/bin/python
2
3 import yaml
4 import sys, os
5 import optparse
6 from lxml import etree
7
8
9
10
11 def create_patterns(arch='i586', split=False, patterns_dir='patterns'):
12
13     rpm_ns="http://linux.duke.edu/metadata/rpm"
14     pattern_ns="http://novell.com/package/metadata/suse/pattern"
15     PATTERN = "{%s}" % pattern_ns
16     if not split:       
17         xmlroot = etree.Element("patterns")
18         NSMAP = {None : pattern_ns, "rpm": rpm_ns, "patterns": pattern_ns}
19     else:
20         NSMAP = {None : pattern_ns, "rpm": rpm_ns}
21
22     count = 0
23     for f in os.listdir(patterns_dir):
24         if not f.endswith('.yaml'):
25             continue
26         print "Working on %s" %f
27         count = count + 1
28         stream = file("%s/%s" %(patterns_dir,f), 'r')
29         y = yaml.load(stream)
30         if y.has_key('Arch') and y['Arch'] != arch:
31             print "Skipping pattern '%s' because architecture doesn't match ('%s' vs '%s')." % (y['Name'], y['Arch'], arch)
32             continue
33         if split:
34             proot = etree.Element("pattern", nsmap=NSMAP)
35         else:
36             proot = etree.SubElement(xmlroot, "pattern",  nsmap=NSMAP)
37
38         etree.SubElement(proot, "name").text = y['Name']
39         etree.SubElement(proot, "summary").text = y['Summary']
40         etree.SubElement(proot, "description").text = y['Description']
41         etree.SubElement(proot, "uservisible")
42         cat = etree.SubElement(proot, "category")
43         cat.text = "Base Group"
44         cat.set("lang", "en")
45         req = etree.SubElement(proot, "{%s}requires" %rpm_ns)
46         if y.has_key('Patterns'):
47             collect = []
48             for pat in y['Patterns']:
49                 if os.path.exists("%s/%s.yaml" %(patterns_dir, pat)):
50                     pf = file("%s/%s.yaml" %(patterns_dir, pat), 'r')
51                     pfy = yaml.load(pf)
52                     if pfy.has_key('Packages'):
53                         collect += pfy['Packages']
54         elif y.has_key('Packages'):
55             collect = y['Packages']
56
57         for p in collect:
58             if type(p).__name__=='dict':
59                 a = p.values()[0]
60                 if a == arch:
61                     entry = etree.SubElement(req, "{%s}entry" %rpm_ns)
62                     entry.set("name", p.keys()[0])
63                     entry.set("arch", arch)
64             else:
65                 entry = etree.SubElement(req, "{%s}entry" %rpm_ns)
66                 entry.set("name", p)
67         if split:
68             tree = etree.ElementTree(proot)
69             tree.write("%s.xml" %y['Name'], pretty_print=True)
70
71     if not split:
72         xmlroot.set('count', "%d" %count)
73         tree = etree.ElementTree(xmlroot)
74         tree.write("patterns.xml")
75
76
77 if __name__ == '__main__':
78     parser = optparse.OptionParser()
79
80     parser.add_option("-a", "--arch", type="string", dest="arch",
81                     help="architecture")
82     parser.add_option("-s", "--split", action="store_true", dest="split", default=False,
83                     help="split patterns into single files")
84         
85     (options, args) = parser.parse_args()
86
87     if options.arch and options.arch in ['i586', 'arm']:
88         create_patterns(arch=options.arch, split=options.split)
89