From cd9e494b36b4ae554c88173309e9d4a054946e8c Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Tue, 9 Mar 2010 02:36:00 +0000 Subject: When portage upgrades or downgrades itself, preload lazily referenced portage submodules into memory so that imports won't fail later. svn path=/main/trunk/; revision=15778 --- pym/portage/proxy/lazyimport.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'pym/portage/proxy') diff --git a/pym/portage/proxy/lazyimport.py b/pym/portage/proxy/lazyimport.py index c62f90788..84b2c730b 100644 --- a/pym/portage/proxy/lazyimport.py +++ b/pym/portage/proxy/lazyimport.py @@ -20,6 +20,24 @@ if sys.hexversion >= 0x3000000: _module_proxies = {} _module_proxies_lock = threading.RLock() +def _preload_portage_submodules(): + """ + Load lazily referenced portage submodules into memory, + so imports won't fail during portage upgrade/downgrade. + Note that this recursively loads only the modules that + are lazily referenced by currently imported modules, + so some portage submodules may still remain unimported + after this function is called. + """ + while True: + remaining = False + for name in list(_module_proxies): + if name.startswith('portage.'): + remaining = True + _unregister_module_proxy(name) + if not remaining: + break + def _register_module_proxy(name, proxy): _module_proxies_lock.acquire() try: -- cgit v1.2.3-1-g7c22