diff options
author | Zac Medico <zmedico@gentoo.org> | 2008-07-18 12:40:58 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2008-07-18 12:40:58 +0000 |
commit | 39c89b95ba4843fd746a23717638f6ede8fb86ad (patch) | |
tree | e38494bd120068fc977ed82b66f6de3c4eca2ee8 /pym/repoman | |
parent | 700169f22d7f985e9ad038c79b1a9299d83d7951 (diff) | |
download | portage-39c89b95ba4843fd746a23717638f6ede8fb86ad.tar.gz portage-39c89b95ba4843fd746a23717638f6ede8fb86ad.tar.bz2 portage-39c89b95ba4843fd746a23717638f6ede8fb86ad.zip |
Bug #199788 - Make repoman parse GLEP 56 USE flag descriptions from
metadata.xml (in addition to use.local.desc). Thanks to Doug Goldstein
<cardoe@g.o> for this patch.
svn path=/main/trunk/; revision=11126
Diffstat (limited to 'pym/repoman')
-rw-r--r-- | pym/repoman/utilities.py | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/pym/repoman/utilities.py b/pym/repoman/utilities.py index f6c50326b..c32f69fed 100644 --- a/pym/repoman/utilities.py +++ b/pym/repoman/utilities.py @@ -13,6 +13,8 @@ import logging import os import sys +from xml.dom import minidom +from xml.dom import NotFoundErr from portage import output from portage.output import red, green from portage.process import find_binary @@ -111,6 +113,37 @@ def parse_use_local_desc(mylines, usedict=None): usedict[pkg].add(flag) return usedict +def parse_metadata_use(mylines, uselist=None): + """ + Records are wrapped in XML as per GLEP 56 + returns a dict of the form a list of flags""" + if uselist is None: + uselist = [] + metadatadom = minidom.parse(mylines) + + try: + usetag = metadatadom.getElementsByTagName("use") + if not usetag: + return uselist + except NotFoundErr: + return uselist + + try: + flags = usetag[0].getElementsByTagName("flag") + except NotFoundErr: + raise exception.ParseError("metadata.xml: " + \ + "Malformed input: missing 'flag' tag(s)") + + for flag in flags: + pkg_flag = flag.getAttribute("name") + if not pkg_flag: + raise exception.ParseError("metadata.xml: " + \ + "Malformed input: missing 'name' attribute for 'flag' tag") + uselist.append(pkg_flag) + + metadatadom.unlink() + return uselist + def FindPackagesToScan(settings, startdir, reposplit): """ Try to find packages that need to be scanned |