]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
binman: Avoid setting sys.path globally
authorSimon Glass <sjg@chromium.org>
Fri, 1 Jun 2018 15:38:15 +0000 (09:38 -0600)
committerSimon Glass <sjg@chromium.org>
Thu, 7 Jun 2018 19:25:08 +0000 (11:25 -0800)
At present we set the Python path at the start of binman so we can read
modules in the 'etype' directory. This is a bit messy since it affects
'import' statements through binman.

Adjust the code to set the path locally, just where it is needed. Move
the 'entry' module in with the other base modules to help with this. It
makes more sense here anyway since it does not implement an entry type.

Signed-off-by: Simon Glass <sjg@chromium.org>
tools/binman/binman.py
tools/binman/entry.py [moved from tools/binman/etype/entry.py with 96% similarity]

index fa2f551f55420e92e7e110eacf0fc8bef6e83535..d49402a977e8c9034c5745b2cadfcdd3e718b993 100755 (executable)
@@ -23,9 +23,6 @@ for dirname in ['../patman', '../dtoc', '..']:
 # Bring in the libfdt module
 sys.path.insert(0, 'scripts/dtc/pylibfdt')
 
-# Also allow entry-type modules to be brought in from the etype directory.
-sys.path.insert(0, os.path.join(our_path, 'etype'))
-
 import cmdline
 import command
 import control
similarity index 96%
rename from tools/binman/etype/entry.py
rename to tools/binman/entry.py
index cbcabe20582a4997bbbafacc17d2cf59d802820d..5374178542ed1bde020d326bf48e9a6d88a5599f 100644 (file)
@@ -14,10 +14,14 @@ except:
     have_importlib = False
 
 import fdt_util
+import os
+import sys
 import tools
 
 modules = {}
 
+our_path = os.path.dirname(os.path.realpath(__file__))
+
 class Entry(object):
     """An Entry in the section
 
@@ -80,8 +84,12 @@ class Entry(object):
             module_name = module_name.split('@')[0]
         module = modules.get(module_name)
 
+        # Also allow entry-type modules to be brought in from the etype directory.
+
         # Import the module if we have not already done so.
         if not module:
+            old_path = sys.path
+            sys.path.insert(0, os.path.join(our_path, 'etype'))
             try:
                 if have_importlib:
                     module = importlib.import_module(module_name)
@@ -90,6 +98,8 @@ class Entry(object):
             except ImportError:
                 raise ValueError("Unknown entry type '%s' in node '%s'" %
                         (etype, node.path))
+            finally:
+                sys.path = old_path
             modules[module_name] = module
 
         # Call its constructor to get the object we want.