summaryrefslogtreecommitdiffstats
path: root/pym/repoman/utilities.py
diff options
context:
space:
mode:
authorSebastian Pipping <sebastian@pipping.org>2010-02-27 03:37:45 +0100
committerZac Medico <zmedico@gmail.com>2010-03-23 18:51:17 -0700
commit7c11c8ec5f568984ee720fc677959f9d2c9dfd32 (patch)
tree29245a70db33d8023509a8a410f93e3c4f4718ec /pym/repoman/utilities.py
parent4866b8f1bc4cc4c089916ea5cd4b6d44691e8c6c (diff)
downloadportage-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.py33
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