summaryrefslogtreecommitdiffstats
path: root/pym
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2010-08-24 10:10:36 -0700
committerZac Medico <zmedico@gentoo.org>2010-08-24 10:10:36 -0700
commit67601abd9cb96782ce2824ea7abe74a2a9068621 (patch)
treee7a05f0328a6e762a5244ed9a6cb6b7dc4ad443f /pym
parenta0636f13ffcd2f1b38d32e9f289af8008db418fb (diff)
downloadportage-67601abd9cb96782ce2824ea7abe74a2a9068621.tar.gz
portage-67601abd9cb96782ce2824ea7abe74a2a9068621.tar.bz2
portage-67601abd9cb96782ce2824ea7abe74a2a9068621.zip
* Make dblink instantiate the ConfigProtect object on demand instead of
in the constructor, since it triggers lots of stat calls and it's wasteful for iter_owners. * Fix dblink ConfigProtect construction to use EROOT.
Diffstat (limited to 'pym')
-rw-r--r--pym/portage/dbapi/vartree.py24
1 files changed, 18 insertions, 6 deletions
diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py
index b2e03e9c3..34dc14718 100644
--- a/pym/portage/dbapi/vartree.py
+++ b/pym/portage/dbapi/vartree.py
@@ -1958,12 +1958,6 @@ class dblink(object):
self._verbose = self.settings.get("PORTAGE_VERBOSE") == "1"
self.myroot=myroot
- protect_obj = ConfigProtect(myroot,
- portage.util.shlex_split(mysettings.get("CONFIG_PROTECT", "")),
- portage.util.shlex_split(
- mysettings.get("CONFIG_PROTECT_MASK", "")))
- self.updateprotect = protect_obj.updateprotect
- self.isprotected = protect_obj.isprotected
self._installed_instance = None
self.contentscache = None
self._contents_inodes = None
@@ -1971,6 +1965,7 @@ class dblink(object):
self._linkmap_broken = False
self._md5_merge_map = {}
self._hash_key = (self.myroot, self.mycpv)
+ self._protect_obj = None
def __hash__(self):
return hash(self._hash_key)
@@ -1979,6 +1974,23 @@ class dblink(object):
return isinstance(other, dblink) and \
self._hash_key == other._hash_key
+ def _get_protect_obj(self):
+
+ if self._protect_obj is None:
+ self._protect_obj = ConfigProtect(self._eroot,
+ portage.util.shlex_split(
+ self.settings.get("CONFIG_PROTECT", "")),
+ portage.util.shlex_split(
+ self.settings.get("CONFIG_PROTECT_MASK", "")))
+
+ return self._protect_obj
+
+ def isprotected(self, obj):
+ return self._get_protect_obj().isprotected(obj)
+
+ def updateprotect(self):
+ self._get_protect_obj().updateprotect()
+
def lockdb(self):
if self._lock_vdb:
raise AssertionError("Lock already held.")