[Chromecast] Fix for building Android Cast builds with virtualenv.
The Chromecast CQ bots are failing to build the Android builds. Iterating over sys.modules with itervalues() results in a runtime error because sys.modules is apparently changing size. Using sys.modules.values() instead lets sys.modules change without a runtime error since it makes a copy. BUG=673915 Review-Url: https://codereview.chromium.org/2567393003 Cr-Original-Commit-Position: refs/heads/master@{#439234} Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src Cr-Mirrored-Commit: d00168a948a32f378a0c05842ee52ca35905c9d5
This commit is contained in:
Родитель
872ac23152
Коммит
d39391f1f6
|
@ -406,8 +406,7 @@ def GetPythonDependencies():
|
|||
A path is assumed to be a "system" import if it is outside of chromium's
|
||||
src/. The paths will be relative to the current directory.
|
||||
"""
|
||||
module_paths = (m.__file__ for m in sys.modules.itervalues()
|
||||
if m is not None and hasattr(m, '__file__'))
|
||||
module_paths = GetModulePaths()
|
||||
|
||||
abs_module_paths = map(os.path.abspath, module_paths)
|
||||
|
||||
|
@ -424,6 +423,30 @@ def GetPythonDependencies():
|
|||
return sorted(set(non_system_module_paths))
|
||||
|
||||
|
||||
def GetModulePaths():
|
||||
"""Returns the paths to all of the modules in sys.modules."""
|
||||
ForceLazyModulesToLoad()
|
||||
return (m.__file__ for m in sys.modules.itervalues()
|
||||
if m is not None and hasattr(m, '__file__'))
|
||||
|
||||
|
||||
def ForceLazyModulesToLoad():
|
||||
"""Forces any lazily imported modules to fully load themselves.
|
||||
|
||||
Inspecting the modules' __file__ attribute causes lazily imported modules
|
||||
(e.g. from email) to get fully imported and update sys.modules. Iterate
|
||||
over the values until sys.modules stabilizes so that no modules are missed.
|
||||
"""
|
||||
while True:
|
||||
num_modules_before = len(sys.modules.keys())
|
||||
for m in sys.modules.values():
|
||||
if m is not None and hasattr(m, '__file__'):
|
||||
_ = m.__file__
|
||||
num_modules_after = len(sys.modules.keys())
|
||||
if num_modules_before == num_modules_after:
|
||||
break
|
||||
|
||||
|
||||
def AddDepfileOption(parser):
|
||||
# TODO(agrieve): Get rid of this once we've moved to argparse.
|
||||
if hasattr(parser, 'add_option'):
|
||||
|
|
Загрузка…
Ссылка в новой задаче