summaryrefslogtreecommitdiffstats
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
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
-rwxr-xr-xbin/repoman15
-rw-r--r--pym/repoman/utilities.py33
2 files changed, 48 insertions, 0 deletions
diff --git a/bin/repoman b/bin/repoman
index 2c34ac919..e53ae076a 100755
--- a/bin/repoman
+++ b/bin/repoman
@@ -1072,6 +1072,16 @@ for x in scanlist:
stats["metadata.bad"]+=1
fails["metadata.bad"].append(x+"/metadata.xml")
+ #load USE flags from metadata.xml
+ muselist=[]
+ try:
+ f = open(os.path.join(checkdir, "metadata.xml"))
+ utilities.parse_metadata_use(f, muselist)
+ f.close()
+ except (IOError, OSError, ParseError), e:
+ logging.exception("Couldn't read from metadata.xml", e)
+ sys.exit(1)
+
allmasked = True
for y in ebuildlist:
@@ -1354,6 +1364,11 @@ for x in scanlist:
if flag_name not in uselist:
myuse.append(flag_name)
+ # uselist checks - metadata
+ for mypos in range(len(myuse)-1,-1,-1):
+ if myuse[mypos] and (myuse[mypos] in muselist):
+ del myuse[mypos]
+
# uselist checks - local
mykey = portage.dep_getkey(catpkg)
if mykey in luselist:
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