From 46906109c5223a9b100f3504301658bc8b2e07de Mon Sep 17 00:00:00 2001 From: Fabian Groffen Date: Wed, 25 Jun 2008 18:49:44 +0000 Subject: [PATCH] Merged from trunk 10781:10783 | 10782 | After the depgraph caches the vardb state in a FakeVartree, | | zmedico | to make some room on the heap, clear the vardbapi caches. | | 10783 | Fix repoman breakage wrt _PackageMetadataWrapper._keys | | zmedico | values. | svn path=/main/branches/prefix/; revision=10784 --- bin/repoman | 3 ++- pym/_emerge/__init__.py | 14 +++++++++++++- pym/portage/dbapi/vartree.py | 12 +++++++++--- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/bin/repoman b/bin/repoman index ce3f20235..93c01f677 100755 --- a/bin/repoman +++ b/bin/repoman @@ -355,7 +355,8 @@ qawarnings=[ ] missingvars=["KEYWORDS","LICENSE","DESCRIPTION","HOMEPAGE","SLOT"] -allvars = set(portage.auxdbkeys) +allvars = set(x for x in portage.auxdbkeys if not x.startswith("UNUSED_")) +allvars.discard("CDEPEND") allvars.update(Package.metadata_keys) allvars = sorted(allvars) commitmessage=None diff --git a/pym/_emerge/__init__.py b/pym/_emerge/__init__.py index ede6d0681..e207885f6 100644 --- a/pym/_emerge/__init__.py +++ b/pym/_emerge/__init__.py @@ -1402,7 +1402,11 @@ class _PackageMetadataWrapper(object): """ Detect metadata updates and synchronize Package attributes. """ - _keys = Package.metadata_keys + _keys = set(x for x in portage.auxdbkeys \ + if not x.startswith("UNUSED_")) + _keys.discard("CDEPEND") + _keys.update(Package.metadata_keys) + _keys = tuple(sorted(_keys)) __slots__ = ("__weakref__", "_pkg") + tuple("_val_" + k for k in _keys) _wrapped_keys = frozenset( ["COUNTER", "INHERITED", "IUSE", "SLOT", "USE", "_mtime_"]) @@ -2052,6 +2056,14 @@ class depgraph(object): # This triggers metadata updates via FakeVartree. vardb.aux_get(pkg.cpv, []) fakedb.cpv_inject(pkg) + + # Now that the vardb state is cached in our FakeVartree, + # we won't be needing the real vartree cache for awhile. + # To make some room on the heap, clear the vardbapi + # caches. + trees[myroot]["vartree"].dbapi._clear_cache() + gc.collect() + self.mydbapi[myroot] = fakedb def graph_tree(): pass diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py index 170716551..8b4093a87 100644 --- a/pym/portage/dbapi/vartree.py +++ b/pym/portage/dbapi/vartree.py @@ -691,13 +691,19 @@ class vardbapi(dbapi): def checkblockers(self, origdep): pass + def _clear_cache(self): + self.mtdircache.clear() + self.matchcache.clear() + self.cpcache.clear() + self._aux_cache_obj = None + def _add(self, pkg_dblink): - self._clear_cache(pkg_dblink) + self._clear_pkg_cache(pkg_dblink) def _remove(self, pkg_dblink): - self._clear_cache(pkg_dblink) + self._clear_pkg_cache(pkg_dblink) - def _clear_cache(self, pkg_dblink): + def _clear_pkg_cache(self, pkg_dblink): # Due to 1 second mtime granularity in