summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2018-06-01 09:38:15 -0600
committerSimon Glass <sjg@chromium.org>2018-06-07 11:25:08 -0800
commitbadf0ec6e4c89d8ee54b96f943057efe3c253113 (patch)
tree219e6f74fd9fc7f76c798ac12069100c24be7d5b
parent25ac0e61fe5612d28cbc98654fb325d762f4411b (diff)
binman: Avoid setting sys.path globally
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>
-rwxr-xr-xtools/binman/binman.py3
-rw-r--r--tools/binman/entry.py (renamed from tools/binman/etype/entry.py)10
2 files changed, 10 insertions, 3 deletions
diff --git a/tools/binman/binman.py b/tools/binman/binman.py
index fa2f551f554..d49402a977e 100755
--- a/tools/binman/binman.py
+++ b/tools/binman/binman.py
@@ -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
diff --git a/tools/binman/etype/entry.py b/tools/binman/entry.py
index cbcabe20582..5374178542e 100644
--- a/tools/binman/etype/entry.py
+++ b/tools/binman/entry.py
@@ -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.