diff options
author | Sebastian Pipping <sebastian@pipping.org> | 2010-02-27 03:37:45 +0100 |
---|---|---|
committer | Zac Medico <zmedico@gmail.com> | 2010-03-23 18:51:17 -0700 |
commit | 7c11c8ec5f568984ee720fc677959f9d2c9dfd32 (patch) | |
tree | 29245a70db33d8023509a8a410f93e3c4f4718ec /pym/repoman/utilities.py | |
parent | 4866b8f1bc4cc4c089916ea5cd4b6d44691e8c6c (diff) | |
download | portage-7c11c8ec5f568984ee720fc677959f9d2c9dfd32.tar.gz portage-7c11c8ec5f568984ee720fc677959f9d2c9dfd32.tar.bz2 portage-7c11c8ec5f568984ee720fc677959f9d2c9dfd32.zip |
Add check of herds in metadata.xml
Diffstat (limited to 'pym/repoman/utilities.py')
-rw-r--r-- | pym/repoman/utilities.py | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/pym/repoman/utilities.py b/pym/repoman/utilities.py index d30552ed4..1efed7663 100644 --- a/pym/repoman/utilities.py +++ b/pym/repoman/utilities.py @@ -15,7 +15,9 @@ __all__ = [ "get_commit_message_with_editor", "get_commit_message_with_stdin", "have_profile_dir", - "parse_metadata_use" + "parse_metadata_use", + "UnknownHerdsError", + "check_metadata" ] import codecs @@ -30,6 +32,7 @@ except ImportError: from xml.dom import minidom from xml.dom import NotFoundErr from xml.parsers.expat import ExpatError +import xml.etree.ElementTree as ET from portage import os from portage import _encodings from portage import _unicode_decode @@ -149,6 +152,34 @@ def parse_metadata_use(metadata_xml_content, uselist=None): finally: metadatadom.unlink() + +class UnknownHerdsError(ValueError): + def __init__(self, herd_names): + _plural = len(herd_names) != 1 + super(UnknownHerdsError, self).__init__( + 'Unknown %s %s' % (_plural and 'herds' or 'herd', + ','.join('"%s"' % e for e in herd_names))) + + +def check_metadata_herds(xml_tree, herd_base): + herd_nodes = xml_tree.findall('herd') + unknown_herds = [name for name in + (e.text.strip() for e in herd_nodes) + if not herd_base.known_herd(name)] + + if unknown_herds: + raise UnknownHerdsError(unknown_herds) + + +def check_metadata(metadata_xml_content, herd_base): + try: + xml_tree = ET.fromstring(metadata_xml_content) + except (ExpatError, ) as e: + raise exception.ParseError("metadata.xml: " + str(e)) + + check_metadata_herds(xml_tree, herd_base) + + def FindPackagesToScan(settings, startdir, reposplit): """ Try to find packages that need to be scanned |