summaryrefslogtreecommitdiffstats
path: root/pym/repoman
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2008-07-18 12:40:58 +0000
committerZac Medico <zmedico@gentoo.org>2008-07-18 12:40:58 +0000
commit39c89b95ba4843fd746a23717638f6ede8fb86ad (patch)
treee38494bd120068fc977ed82b66f6de3c4eca2ee8 /pym/repoman
parent700169f22d7f985e9ad038c79b1a9299d83d7951 (diff)
downloadportage-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.py33
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