diff options
-rw-r--r-- | pym/_emerge/__init__.py | 2 | ||||
-rw-r--r-- | pym/portage/dbapi/vartree.py | 19 |
2 files changed, 19 insertions, 2 deletions
diff --git a/pym/_emerge/__init__.py b/pym/_emerge/__init__.py index 0a5306bf6..c9ab97722 100644 --- a/pym/_emerge/__init__.py +++ b/pym/_emerge/__init__.py @@ -998,7 +998,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/dbapi/vartree.py b/pym/portage/dbapi/vartree.py index a5d73843a..69b1512ef 100644 --- a/pym/portage/dbapi/vartree.py +++ b/pym/portage/dbapi/vartree.py @@ -136,7 +136,7 @@ class LinkageMap(object): libs = {} obj_properties = {} lines = [] - for cpv in self._dbapi.cpv_all(): + for cpv in self._dbapi.cpv_all(use_cache=0): lines += self._dbapi.aux_get(cpv, ["NEEDED.ELF.2"])[0].split('\n') # Cache NEEDED.* files avoid doing excessive IO for every rebuild. self._dbapi.flush_cache() @@ -455,8 +455,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 |