Merged from trunk 10781:10783
authorFabian Groffen <grobian@gentoo.org>
Wed, 25 Jun 2008 18:49:44 +0000 (18:49 -0000)
committerFabian Groffen <grobian@gentoo.org>
Wed, 25 Jun 2008 18:49:44 +0000 (18:49 -0000)
   | 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
pym/_emerge/__init__.py
pym/portage/dbapi/vartree.py

index ce3f20235d027c3f901fcb40cffac91bba85508b..93c01f677ecc6d86a56fb7121b814640d12fa1d1 100755 (executable)
@@ -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
index ede6d068174519c05dcb7af2484fe724c9637f05..e207885f6f0d29292889758227f3e64a0f1e04ee 100644 (file)
@@ -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
index 17071655190dffcd4202e70a589c119d6b7bc57f..8b4093a87736e7d11c98feb7080adbb023b12474 100644 (file)
@@ -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 <python-2.5, mtime checks
                # are not always sufficient to invalidate vardbapi caches. Therefore,
                # the caches need to be actively invalidated here.