Make _global_updates ensure that the binarytree is only populated with local
authorZac Medico <zmedico@gentoo.org>
Sun, 28 Feb 2010 03:05:44 +0000 (03:05 -0000)
committerZac Medico <zmedico@gentoo.org>
Sun, 28 Feb 2010 03:05:44 +0000 (03:05 -0000)
packages (getbinpkgs=0), and fix binarytree.populate() to behave properly
when called more than once.

svn path=/main/trunk/; revision=15487

pym/portage/_global_updates.py
pym/portage/dbapi/bintree.py

index baf2e9b7225d03cfad5d7ca92374374bb7508a2e..040de276ac0a5c30df56331af233e46f47f53bb3 100644 (file)
@@ -94,6 +94,10 @@ def _global_updates(trees, prev_mtimes):
                bindb = trees["/"]["bintree"].dbapi
                if not os.access(bindb.bintree.pkgdir, os.W_OK):
                        bindb = None
+               else:
+                       # Call binarytree.populate(), since we want to make sure it's
+                       # only populated with local packages here (getbinpkgs=0).
+                       bindb.bintree.populate()
                for update_cmd in myupd:
                        if update_cmd[0] == "move":
                                moves = vardb.move_ent(update_cmd)
index fa68ba7d7b17a592d7a779163a640dcdc9165aef..626e55808e01849d55b6eafceafa9a5eeccae5f7 100644 (file)
@@ -482,6 +482,13 @@ class binarytree(object):
                if (not os.path.isdir(self.pkgdir) and not getbinpkgs):
                        return 0
 
+               # Clear all caches in case populate is called multiple times
+               # as may be the case when _global_updates calls populate()
+               # prior to performing package moves since it only wants to
+               # operate on local packages (getbinpkgs=0).
+               self._remotepkgs = None
+               self.dbapi._clear_cache()
+               self.dbapi._aux_cache.clear()
                if True:
                        pkg_paths = {}
                        self._pkg_paths = pkg_paths
@@ -693,10 +700,7 @@ class binarytree(object):
                        writemsg(_("!!! PORTAGE_BINHOST unset, but use is requested.\n"),
                                noiselevel=-1)
 
-               if getbinpkgs and \
-                       "PORTAGE_BINHOST" in self.settings and \
-                       not self._remotepkgs:
-
+               if getbinpkgs and 'PORTAGE_BINHOST' in self.settings:
                        base_url = self.settings["PORTAGE_BINHOST"]
                        from portage.const import CACHE_PATH
                        try: