From badf0ec6e4c89d8ee54b96f943057efe3c253113 Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Fri, 1 Jun 2018 09:38:15 -0600 Subject: [PATCH] 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 --- tools/binman/binman.py | 3 --- tools/binman/{etype => }/entry.py | 10 ++++++++++ 2 files changed, 10 insertions(+), 3 deletions(-) rename tools/binman/{etype => }/entry.py (96%) diff --git a/tools/binman/binman.py b/tools/binman/binman.py index fa2f551..d49402a 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 similarity index 96% rename from tools/binman/etype/entry.py rename to tools/binman/entry.py index cbcabe2..5374178 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.