diff options
-rwxr-xr-x | bin/repoman | 8 | ||||
-rw-r--r-- | pym/repoman/utilities.py | 17 |
2 files changed, 15 insertions, 10 deletions
diff --git a/bin/repoman b/bin/repoman index 86b4c1c46..0c0e7d0ed 100755 --- a/bin/repoman +++ b/bin/repoman @@ -1335,8 +1335,6 @@ for x in scanlist: fails["changelog.missing"].append(x+"/ChangeLog") #metadata.xml file check - muselist = [] - if "metadata.xml" not in checkdirlist: stats["metadata.missing"]+=1 fails["metadata.missing"].append(x+"/metadata.xml") @@ -1358,12 +1356,12 @@ for x in scanlist: else: # load USE flags from metadata.xml try: - utilities.parse_metadata_use(_metadata_xml, muselist) + musedict = utilities.parse_metadata_use(_metadata_xml) except portage.exception.ParseError as e: metadata_bad = True stats["metadata.bad"] += 1 fails["metadata.bad"].append("%s/metadata.xml: %s" % (x, e)) - muselist = [] + musedict = {} # Run other metadata.xml checkers try: @@ -1389,7 +1387,7 @@ for x in scanlist: fails["metadata.bad"].append(x+"/metadata.xml") del metadata_bad - muselist = frozenset(muselist) + muselist = frozenset(musedict.keys()) changelog_path = os.path.join(checkdir_relative, "ChangeLog") changelog_modified = changelog_path in modified_changelogs diff --git a/pym/repoman/utilities.py b/pym/repoman/utilities.py index 9dd5cde35..ed0de4449 100644 --- a/pym/repoman/utilities.py +++ b/pym/repoman/utilities.py @@ -23,6 +23,7 @@ __all__ = [ import codecs import errno import logging +import re import sys from portage import os from portage import subprocess_getstatusoutput @@ -110,12 +111,15 @@ def have_profile_dir(path, maxdepth=3, filename="profiles.desc"): path = normalize_path(path + "/..") maxdepth -= 1 -def parse_metadata_use(xml_tree, uselist=None): +whitespace_re = re.compile('\s+') + +def parse_metadata_use(xml_tree): """ Records are wrapped in XML as per GLEP 56 - returns a dict of the form a list of flags""" - if uselist is None: - uselist = [] + returns a dict with keys constisting of USE flag names and values + containing their respective descriptions + """ + uselist = {} usetag = xml_tree.findall("use") if not usetag: @@ -127,9 +131,12 @@ def parse_metadata_use(xml_tree, uselist=None): for flag in flags: pkg_flag = flag.get("name") + pkg_flag_value = whitespace_re.sub(' ', flag.text).strip() if pkg_flag is None: raise exception.ParseError("missing 'name' attribute for 'flag' tag") - uselist.append(pkg_flag) + if not pkg_flag_value: + raise exception.ParseError("missing USE description with the 'flag' tag") + uselist[pkg_flag] = pkg_flag_value return uselist class UnknownHerdsError(ValueError): |