summaryrefslogtreecommitdiffstats
path: root/pym/repoman/herdbase.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/herdbase.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/herdbase.py')
-rw-r--r--pym/repoman/herdbase.py87
1 files changed, 87 insertions, 0 deletions
diff --git a/pym/repoman/herdbase.py b/pym/repoman/herdbase.py
new file mode 100644
index 000000000..3734a2f0a
--- /dev/null
+++ b/pym/repoman/herdbase.py
@@ -0,0 +1,87 @@
+# -*- coding: utf-8 -*-
+# repoman: Herd database analysis
+# Copyright 2010 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id: $
+
+import xml.etree.ElementTree as ET
+from xml.parsers.expat import ExpatError
+from portage.exception import ParseError
+
+__all__ = [
+ "make_herd_base"
+]
+
+_SPECIAL_HERDS = set(('no-herd',))
+
+def _make_email(nick_name):
+ if not nick_name.endswith('@gentoo.org'):
+ nick_name = nick_name + '@gentoo.org'
+ return nick_name
+
+
+class HerdBase(object):
+ def __init__(self, herd_to_emails, all_emails):
+ self.herd_to_emails = herd_to_emails
+ self.all_emails = all_emails
+
+ def known_herd(self, herd_name):
+ if herd_name in _SPECIAL_HERDS:
+ return True
+ return herd_name in self.herd_to_emails
+
+ def known_maintainer(self, nick_name):
+ return _make_email(nick_name) in self.all_emails
+
+ def maintainer_in_herd(self, nick_name, herd_name):
+ return _make_email(nick_name) in self.herd_to_emails[herd_name]
+
+
+def make_herd_base(filename):
+ herd_to_emails = dict()
+ all_emails = set()
+
+ try:
+ xml_tree = ET.parse(filename)
+ except ExpatError as e:
+ raise ParseError("metadata.xml: " + str(e))
+
+ herds = xml_tree.findall('herd')
+ for h in herds:
+ _herd_name = h.find('name')
+ if _herd_name is None:
+ continue
+ herd_name = _herd_name.text.strip()
+ del _herd_name
+
+ maintainers = h.findall('maintainer')
+ herd_emails = set()
+ for m in maintainers:
+ _m_email = m.find('email')
+ if _m_email is None:
+ continue
+ m_email = _m_email.text.strip()
+
+ herd_emails.add(m_email)
+ all_emails.add(m_email)
+
+ herd_to_emails[herd_name] = herd_emails
+
+ return HerdBase(herd_to_emails, all_emails)
+
+
+if __name__ == '__main__':
+ h = make_herd_base('/usr/portage/metadata/herds.xml')
+
+ assert(h.known_herd('sound'))
+ assert(not h.known_herd('media-sound'))
+
+ assert(h.known_maintainer('sping'))
+ assert(h.known_maintainer('sping@gentoo.org'))
+ assert(not h.known_maintainer('portage'))
+
+ assert(h.maintainer_in_herd('zmedico@gentoo.org', 'tools-portage'))
+ assert(not h.maintainer_in_herd('pva@gentoo.org', 'tools-portage'))
+
+ import pprint
+ pprint.pprint(h.herd_to_emails)