summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xbin/emerge2
-rw-r--r--pym/portage.py17
2 files changed, 18 insertions, 1 deletions
diff --git a/bin/emerge b/bin/emerge
index dafb3bb66..47c095e89 100755
--- a/bin/emerge
+++ b/bin/emerge
@@ -1163,7 +1163,7 @@ class FakeVartree(portage.vartree):
vdb_lock = portage_locks.lockdir(vdb_path)
real_dbapi = real_vartree.dbapi
slot_counters = {}
- for cpv in real_dbapi.cpv_all():
+ for cpv in real_dbapi.cpv_all(use_cache=0):
cache_key = ("installed", self.root, cpv, "nomerge")
pkg = self._pkg_cache.get(cache_key)
if pkg is not None:
diff --git a/pym/portage.py b/pym/portage.py
index 85b9bf670..cf38107df 100644
--- a/pym/portage.py
+++ b/pym/portage.py
@@ -6764,8 +6764,25 @@ class vardbapi(dbapi):
return returnme
def cpv_all(self, use_cache=1):
+ """
+ Set use_cache=0 to bypass the portage.cachedir() cache in cases
+ when the accuracy of mtime staleness checks should not be trusted
+ (generally this is only necessary in critical sections that
+ involve merge or unmerge of packages).
+ """
returnme = []
basepath = os.path.join(self.root, VDB_PATH) + os.path.sep
+
+ if use_cache:
+ from portage import listdir
+ else:
+ def listdir(p, **kwargs):
+ try:
+ return [x for x in os.listdir(p) \
+ if os.path.isdir(os.path.join(p, x))]
+ except EnvironmentError:
+ return []
+
for x in listdir(basepath, EmptyOnError=1, ignorecvs=1, dirsonly=1):
if self._excluded_dirs.match(x) is not None:
continue