summaryrefslogtreecommitdiffstats
path: root/pym/_emerge/FakeVartree.py
diff options
context:
space:
mode:
authorDavid James <davidjames@google.com>2011-03-24 18:14:45 -0700
committerZac Medico <zmedico@gentoo.org>2011-03-26 12:21:27 -0700
commit23b334d6553fb637ebe8e38f78183e0955180f0f (patch)
tree69fd48d653c1d1e2026e4e057d5b321cbf244bd9 /pym/_emerge/FakeVartree.py
parentf0262dfcc83da93c9f539a16a7e5a2ebca30ee28 (diff)
downloadportage-23b334d6553fb637ebe8e38f78183e0955180f0f.tar.gz
portage-23b334d6553fb637ebe8e38f78183e0955180f0f.tar.bz2
portage-23b334d6553fb637ebe8e38f78183e0955180f0f.zip
Update Portage to sync BlockerDB at init.
Currently, Portage syncs the BlockerDB before every merge. This slows down merges considerably because it requires reading the entire vardb from disk. Since Portage doesn't merge conflicting packages anyway, we can optimize this by just reading the vardb at initialization and caching that. Change-Id: I6701926f022ef3aa2da10482fc8b09573ae24610 Review URL: http://codereview.chromium.org/6688037
Diffstat (limited to 'pym/_emerge/FakeVartree.py')
-rw-r--r--pym/_emerge/FakeVartree.py18
1 files changed, 12 insertions, 6 deletions
diff --git a/pym/_emerge/FakeVartree.py b/pym/_emerge/FakeVartree.py
index 977824c78..21bd355e9 100644
--- a/pym/_emerge/FakeVartree.py
+++ b/pym/_emerge/FakeVartree.py
@@ -100,6 +100,16 @@ class FakeVartree(vartree):
pkg, self.dbapi, self._global_updates)
return self._aux_get(pkg, wants)
+ def cpv_discard(self, pkg):
+ """
+ Discard a package from the fake vardb if it exists.
+ """
+ old_pkg = self.dbapi.get(pkg)
+ if old_pkg is not None:
+ self.dbapi.cpv_remove(old_pkg)
+ self._pkg_cache.pop(old_pkg, None)
+ self._aux_get_history.discard(old_pkg.cpv)
+
def sync(self, acquire_lock=1):
"""
Call this method to synchronize state with the real vardb
@@ -141,9 +151,7 @@ class FakeVartree(vartree):
# Remove any packages that have been uninstalled.
for pkg in list(pkg_vardb):
if pkg.cpv not in current_cpv_set:
- pkg_vardb.cpv_remove(pkg)
- pkg_cache.pop(pkg, None)
- aux_get_history.discard(pkg.cpv)
+ self.cpv_discard(pkg)
# Validate counters and timestamps.
slot_counters = {}
@@ -162,9 +170,7 @@ class FakeVartree(vartree):
if counter != pkg.counter or \
mtime != pkg.mtime:
- pkg_vardb.cpv_remove(pkg)
- pkg_cache.pop(pkg, None)
- aux_get_history.discard(pkg.cpv)
+ self.cpv_discard(pkg)
pkg = None
if pkg is None: