diff --git a/src/mio.py b/src/mio.py index aab2f3ddfc93fbbaf1c9ab6ebc7f94f7457f7306..dfa02c160e799553fdc0f5ea922f1a7e0c28a15d 100755 --- a/src/mio.py +++ b/src/mio.py @@ -23,7 +23,7 @@ if not hasattr(__builtins__, "True"): def parse_with_path(path, filename, repository): f = mio.filecache.loadfile(path, filename) tree = mio.parser.parse(f.filename, url=f.key) - + if tree._tag == "comps": # Transform comps to canonical form tree = mio.transform.from_fedora(tree) @@ -85,6 +85,7 @@ def find_and_parse(target, builder, url=None): except ValueError, e: pass except DuplicateGroupException, e: + print e traceback.print_exc() print "Failed to locate: %s" % target sys.exit(1) diff --git a/src/mio/transform.py b/src/mio/transform.py index 2da67f99c76dd7dbeb04f41ead467300c0319142..a7846d2340068f2e3a2dd05fba09c16f4cd14c7a 100755 --- a/src/mio/transform.py +++ b/src/mio/transform.py @@ -1,5 +1,6 @@ import mio.parser import copy +import itertools def from_fedora(tree): result = mio.parser.Node("mio", tree._line) @@ -61,6 +62,43 @@ def from_fedora(tree): result._add(mandatory) result._add(default) result._add(optional) + + for e in tree._environment_: + ename = e._id_[0]._char[0] + # print ename + # print unicode(e).encode('ascii', 'replace') + mandatory = mio.parser.Node("group", e._line, + { "name": "@%s/mandatory" % ename }) + default = mio.parser.Node("group", e._line, + { "name": "@%s" % ename }) + default._add(mio.parser.Node("dependency", e._line, + { "name": "@%s/mandatory" % ename })) + optional = mio.parser.Node("group", e._line, + { "name": "@%s/optional" % ename }) + optional._add(mio.parser.Node("dependency", e._line, + { "name": "@%s" % ename })) + for r in e._grouplist_._groupid_: + mandatory._add(mio.parser.Node("dependency", r._line, + { "name": + "@%s/mandatory" % r._char[0] })) + default._add(mio.parser.Node("dependency", r._line, + { "name": + "@%s" % r._char[0] })) + optional._add(mio.parser.Node("dependency", r._line, + { "name": + "@%s/optional" % r._char[0] })) + for r in e._optionlist_._groupid_: + if r.default[0] != None: + default._add(mio.parser.Node("dependency", r._line, + { "name": + "@%s" % r._char[0] })) + optional._add(mio.parser.Node("dependency", r._line, + { "name": + "@%s/optional" % r._char[0] })) + result._add(mandatory) + result._add(default) + result._add(optional) + return result def from_hostinfo(tree):