mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
Merge branch 'bugfix/idf_py_shell_complete_env_check' into 'master'
Tools: Don't check the environment during idf.py shell completion Closes IDFGH-6733 See merge request espressif/esp-idf!17111
This commit is contained in:
commit
786592cef9
38
tools/idf.py
38
tools/idf.py
@ -32,8 +32,14 @@ from pkgutil import iter_modules
|
||||
sys.dont_write_bytecode = True
|
||||
|
||||
import python_version_checker # noqa: E402
|
||||
from idf_py_actions.errors import FatalError # noqa: E402
|
||||
from idf_py_actions.tools import executable_exists, idf_version, merge_action_lists, realpath # noqa: E402
|
||||
|
||||
try:
|
||||
from idf_py_actions.errors import FatalError # noqa: E402
|
||||
from idf_py_actions.tools import executable_exists, idf_version, merge_action_lists, realpath # noqa: E402
|
||||
except ImportError:
|
||||
# For example, importing click could cause this.
|
||||
print('Please use idf.py only in an ESP-IDF shell environment.', file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
# Use this Python interpreter for any subprocesses we launch
|
||||
PYTHON = sys.executable
|
||||
@ -46,13 +52,18 @@ os.environ['PYTHON'] = sys.executable
|
||||
# Can be overridden from idf.bat using IDF_PY_PROGRAM_NAME
|
||||
PROG = os.getenv('IDF_PY_PROGRAM_NAME', 'idf.py')
|
||||
|
||||
# environment variable used during click shell completion run
|
||||
SHELL_COMPLETE_VAR = '_IDF.PY_COMPLETE'
|
||||
|
||||
# was shell completion invoked?
|
||||
SHELL_COMPLETE_RUN = SHELL_COMPLETE_VAR in os.environ
|
||||
|
||||
|
||||
# function prints warning when autocompletion is not being performed
|
||||
# set argument stream to sys.stderr for errors and exceptions
|
||||
def print_warning(message, stream=None):
|
||||
stream = stream or sys.stderr
|
||||
if not os.getenv('_IDF.PY_COMPLETE'):
|
||||
print(message, file=stream)
|
||||
if not SHELL_COMPLETE_RUN:
|
||||
print(message, file=stream or sys.stderr)
|
||||
|
||||
|
||||
def check_environment():
|
||||
@ -729,14 +740,21 @@ def signal_handler(_signal, _frame):
|
||||
|
||||
|
||||
def main():
|
||||
|
||||
# Processing of Ctrl+C event for all threads made by main()
|
||||
signal.signal(signal.SIGINT, signal_handler)
|
||||
|
||||
checks_output = check_environment()
|
||||
cli = init_cli(verbose_output=checks_output)
|
||||
# the argument `prog_name` must contain name of the file - not the absolute path to it!
|
||||
cli(sys.argv[1:], prog_name=PROG, complete_var='_IDF.PY_COMPLETE')
|
||||
# Check the environment only when idf.py is invoked regularly from command line.
|
||||
checks_output = None if SHELL_COMPLETE_RUN else check_environment()
|
||||
|
||||
try:
|
||||
cli = init_cli(verbose_output=checks_output)
|
||||
except ImportError:
|
||||
if SHELL_COMPLETE_RUN:
|
||||
pass
|
||||
else:
|
||||
raise
|
||||
else:
|
||||
cli(sys.argv[1:], prog_name=PROG, complete_var=SHELL_COMPLETE_VAR)
|
||||
|
||||
|
||||
def _valid_unicode_config():
|
||||
|
@ -988,12 +988,15 @@ def get_python_env_path(): # type: () -> Tuple[str, str, str, str]
|
||||
idf_version_str = ''
|
||||
try:
|
||||
idf_version_str = subprocess.check_output(['git', 'describe'],
|
||||
cwd=global_idf_path, env=os.environ).decode()
|
||||
cwd=global_idf_path, env=os.environ,
|
||||
stderr=subprocess.DEVNULL).decode()
|
||||
except OSError:
|
||||
# OSError should cover FileNotFoundError and WindowsError
|
||||
warn('Git was not found')
|
||||
except subprocess.CalledProcessError as e:
|
||||
warn('Git describe was unsuccessful: {}'.format(e.output))
|
||||
except subprocess.CalledProcessError:
|
||||
# This happens quite often when the repo is shallow. Don't print a warning because there are other
|
||||
# possibilities for version detection.
|
||||
pass
|
||||
match = re.match(r'^v([0-9]+\.[0-9]+).*', idf_version_str)
|
||||
if match:
|
||||
idf_version = match.group(1) # type: Optional[str]
|
||||
|
Loading…
Reference in New Issue
Block a user