Parse flag descriptions in repoman.utilities.parse_metadata_use().
authorMichał Górny <gentoo@mgorny.alt.pl>
Thu, 26 Aug 2010 16:51:14 +0000 (18:51 +0200)
committerZac Medico <zmedico@gentoo.org>
Thu, 26 Aug 2010 17:17:32 +0000 (10:17 -0700)
Grab the USE descriptions from metadata.xml within parse_metadata_use().
Instead of a plain flag list, return a dict containing both the flag
names and their descriptions.

bin/repoman
pym/repoman/utilities.py

index 86b4c1c46d265d33edb3d2b40ec0c24768b79e59..0c0e7d0eda83eaba9e25f1372864aa9d6f2f838b 100755 (executable)
@@ -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
index 9dd5cde3533a9c40da153014cef47deedc5d509d..ed0de4449aef58287527c45b52334341c7f6f2aa 100644 (file)
@@ -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):