summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pym/portage/__init__.py39
1 files changed, 32 insertions, 7 deletions
diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py
index bcb2b7afb..516be638d 100644
--- a/pym/portage/__init__.py
+++ b/pym/portage/__init__.py
@@ -6930,11 +6930,31 @@ class _PortdbProxy(portage.util.ObjectProxy):
def _get_target(self):
init_legacy_globals()
- global db, portdb, root
- if portdb is self:
+ global db, portdb, root, _portdb_initialized
+ if not _portdb_initialized:
portdb = db[root]["porttree"].dbapi
+ _portdb_initialized = True
return portdb
+class _MtimedbProxy(portage.util.ObjectProxy):
+ """
+ The mtimedb is independent from the portdb and other globals.
+ """
+
+ def __init__(self, name):
+ portage.util.ObjectProxy.__init__(self)
+ object.__setattr__(self, '_name', name)
+
+ def _get_target(self):
+ global mtimedb, mtimedbfile, _mtimedb_initialized
+ if not _mtimedb_initialized:
+ mtimedbfile = os.path.join("/",
+ CACHE_PATH.lstrip(os.path.sep), "mtimedb")
+ mtimedb = MtimeDB(mtimedbfile)
+ _mtimedb_initialized = True
+ name = object.__getattribute__(self, '_name')
+ return globals()[name]
+
# Initialization of legacy globals. No functions/classes below this point
# please! When the above functions and classes become independent of the
# below global variables, it will be possible to make the below code
@@ -6943,8 +6963,6 @@ class _PortdbProxy(portage.util.ObjectProxy):
# code that is aware of this flag to import portage without the unnecessary
# overhead (and other issues!) of initializing the legacy globals.
-_globals_initialized = False
-
def init_legacy_globals():
global _globals_initialized
if _globals_initialized:
@@ -6976,8 +6994,6 @@ def init_legacy_globals():
root = settings["ROOT"]
- mtimedbfile = os.path.join("/", CACHE_PATH.lstrip(os.path.sep), "mtimedb")
- mtimedb = MtimeDB(mtimedbfile)
# ========================================================================
# COMPATIBILITY
@@ -7007,9 +7023,18 @@ def init_legacy_globals():
# use within Portage. External use of this variable is unsupported because
# it is experimental and it's behavior is likely to change.
if "PORTAGE_LEGACY_GLOBALS" not in os.environ:
+
+ _mtimedb_initialized = False
+ mtimedb = _MtimedbProxy("mtimedb")
+ mtimedbfile = _MtimedbProxy("mtimedbfile")
+
+ _portdb_initialized = False
portdb = _PortdbProxy()
+
+ _globals_initialized = False
+
for k in ("db", "settings", "root", "selinux_enabled",
- "mtimedbfile", "mtimedb", "archlist", "features", "groups",
+ "archlist", "features", "groups",
"pkglines", "thirdpartymirrors", "usedefaults", "profiledir",
"flushmtimedb"):
globals()[k] = _LegacyGlobalProxy(k)