diff options
author | Zac Medico <zmedico@gentoo.org> | 2008-06-26 00:49:10 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2008-06-26 00:49:10 +0000 |
commit | 9a58611323e313a7a5d48fa65a316a3ffedc3954 (patch) | |
tree | 73d848b4919edd2e09d0c56fc9da1b7727a54177 /pym/portage/getbinpkg.py | |
parent | d6b64ea06ff357b920b24a75f2c5ddf03674190d (diff) | |
download | portage-9a58611323e313a7a5d48fa65a316a3ffedc3954.tar.gz portage-9a58611323e313a7a5d48fa65a316a3ffedc3954.tar.bz2 portage-9a58611323e313a7a5d48fa65a316a3ffedc3954.zip |
Make PackageIndex use SlotDict for package metadata storage. The set of
allowed keys is passed into the PackageIndex constructor (normal dict
instances will be used if the set of keys is not passed in for some
reason). A SlotDict.allowed_keys attribute now provides access to a
frozenset of allowed keys.
svn path=/main/trunk/; revision=10797
Diffstat (limited to 'pym/portage/getbinpkg.py')
-rw-r--r-- | pym/portage/getbinpkg.py | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/pym/portage/getbinpkg.py b/pym/portage/getbinpkg.py index 75f3a352a..497194d67 100644 --- a/pym/portage/getbinpkg.py +++ b/pym/portage/getbinpkg.py @@ -4,6 +4,7 @@ # $Id$ from portage.output import red, yellow, green +from portage.cache.mappings import slot_dict_class import portage.xpak import HTMLParser import sys @@ -680,8 +681,17 @@ def _cmp_cpv(d1, d2): class PackageIndex(object): - def __init__(self, default_header_data=None, default_pkg_data=None, - inherited_keys=None, translated_keys=None): + def __init__(self, + allowed_pkg_keys=None, + default_header_data=None, + default_pkg_data=None, + inherited_keys=None, + translated_keys=None): + + self._pkg_slot_dict = None + if allowed_pkg_keys is not None: + self._pkg_slot_dict = slot_dict_class(allowed_pkg_keys) + self._default_header_data = default_header_data self._default_pkg_data = default_pkg_data self._inherited_keys = inherited_keys @@ -696,8 +706,15 @@ class PackageIndex(object): self.packages = [] self.modified = True - def _readpkgindex(self, pkgfile): - d = {} + def _readpkgindex(self, pkgfile, pkg_entry=True): + + allowed_keys = None + if self._pkg_slot_dict is None or not pkg_entry: + d = {} + else: + d = self._pkg_slot_dict() + allowed_keys = d.allowed_keys + for line in pkgfile: line = line.rstrip("\n") if not line: @@ -708,7 +725,11 @@ class PackageIndex(object): k, v = line if v: v = v[1:] - d[self._read_translation_map.get(k, k)] = v + k = self._read_translation_map.get(k, k) + if allowed_keys is not None and \ + k not in allowed_keys: + continue + d[k] = v return d def _writepkgindex(self, pkgfile, items): @@ -722,7 +743,7 @@ class PackageIndex(object): self.readBody(pkgfile) def readHeader(self, pkgfile): - self.header.update(self._readpkgindex(pkgfile)) + self.header.update(self._readpkgindex(pkgfile, pkg_entry=False)) def readBody(self, pkgfile): while True: |