9 def create_patterns(arch='i586', split=False, patterns_dir='patterns', output="."):
11 rpm_ns="http://linux.duke.edu/metadata/rpm"
12 pattern_ns="http://novell.com/package/metadata/suse/pattern"
13 PATTERN = "{%s}" % pattern_ns
15 xmlroot = etree.Element("patterns")
16 NSMAP = {None : pattern_ns, "rpm": rpm_ns, "patterns": pattern_ns}
18 NSMAP = {None : pattern_ns, "rpm": rpm_ns}
21 for f in os.listdir(patterns_dir):
22 if not f.endswith('.yaml'):
25 stream = file("%s/%s" %(patterns_dir,f), 'r')
27 if y.has_key('Arch') and y['Arch'] != arch:
28 print "Skipping pattern '%s' because architecture doesn't match ('%s' vs '%s')." % (y['Name'], y['Arch'], arch)
31 proot = etree.Element("pattern", nsmap=NSMAP)
33 proot = etree.SubElement(xmlroot, "pattern", nsmap=NSMAP)
35 etree.SubElement(proot, "name").text = y['Name']
36 etree.SubElement(proot, "summary").text = y['Summary']
37 etree.SubElement(proot, "description").text = y['Description']
38 etree.SubElement(proot, "uservisible")
39 cat = etree.SubElement(proot, "category")
40 cat.text = "Base Group"
42 req = etree.SubElement(proot, "{%s}requires" %rpm_ns)
43 if y.has_key('Patterns'):
45 for pat in y['Patterns']:
46 if os.path.exists("%s/%s.yaml" %(patterns_dir, pat)):
47 pf = file("%s/%s.yaml" %(patterns_dir, pat), 'r')
49 if pfy.has_key('Packages'):
50 collect += pfy['Packages']
51 elif y.has_key('Packages'):
52 collect = y['Packages']
55 if type(p).__name__=='dict':
58 entry = etree.SubElement(req, "{%s}entry" %rpm_ns)
59 entry.set("name", p.keys()[0])
60 entry.set("arch", arch)
62 entry = etree.SubElement(req, "{%s}entry" %rpm_ns)
65 tree = etree.ElementTree(proot)
66 tree.write("%s.xml" %y['Name'], pretty_print=True)
69 xmlroot.set('count', "%d" %count)
70 tree = etree.ElementTree(xmlroot)
71 tree.write("%s/patterns.xml" %(output))
74 if __name__ == '__main__':
75 parser = optparse.OptionParser()
77 parser.add_option("-a", "--arch", type="string", dest="arch", default="i586", help="architecture")
78 parser.add_option("-s", "--split", action="store_true", dest="split", default=False,
79 help="split patterns into single files")
80 parser.add_option("-p", "--pattern-dir", type="string", dest="patterns", default="patterns",
81 help="Directory where patterns reside.")
82 parser.add_option("-o", "--output-dir", type="string", dest="output", default=".",
83 help="Directory where to put patterns file.")
85 (options, args) = parser.parse_args()
87 if options.arch and options.arch in ['i586', 'arm']:
88 create_patterns(arch=options.arch, split=options.split, patterns_dir=options.patterns, output=options.output)
90 sys.stderr.write("Unsupported architecture\n")