From 9930060ea8a815651b0c0498fa9a5738011c8eb5 Mon Sep 17 00:00:00 2001 From: Roland Dobai Date: Mon, 25 May 2020 14:17:07 +0200 Subject: [PATCH] tools/idf.py: Clean Python bytecode files --- tools/ci/test_build_system_cmake.sh | 11 +++++++++++ tools/idf_py_actions/core_ext.py | 23 +++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/tools/ci/test_build_system_cmake.sh b/tools/ci/test_build_system_cmake.sh index ef2ee5ce4..dffca2c0a 100755 --- a/tools/ci/test_build_system_cmake.sh +++ b/tools/ci/test_build_system_cmake.sh @@ -488,6 +488,17 @@ function run_tests() rm -r sdkconfig.defaults build done + print_status "Cleaning Python bytecode" + idf.py clean > /dev/null + idf.py fullclean > /dev/null + if [ "$(find $IDF_PATH -name "*.py[co]" | wc -l)" -eq 0 ]; then + failure "No Python bytecode in IDF!" + fi + idf.py python-clean + if [ "$(find $IDF_PATH -name "*.py[co]" | wc -l)" -gt 0 ]; then + failure "Python bytecode isn't working!" + fi + print_status "Displays partition table when executing target partition_table" idf.py partition_table | grep -E "# ESP-IDF .+ Partition Table" rm -r build diff --git a/tools/idf_py_actions/core_ext.py b/tools/idf_py_actions/core_ext.py index 97c8e248f..182194785 100644 --- a/tools/idf_py_actions/core_ext.py +++ b/tools/idf_py_actions/core_ext.py @@ -1,3 +1,4 @@ +import fnmatch import os import shutil import subprocess @@ -121,6 +122,20 @@ def action_extensions(base_actions, project_path): else: os.remove(f) + def python_clean(action, ctx, args): + for root, dirnames, filenames in os.walk(os.environ["IDF_PATH"]): + for d in dirnames: + if d == "__pycache__": + dir_to_delete = os.path.join(root, d) + if args.verbose: + print("Removing: %s" % dir_to_delete) + shutil.rmtree(dir_to_delete) + for filename in fnmatch.filter(filenames, '*.py[co]'): + file_to_delete = os.path.join(root, filename) + if args.verbose: + print("Removing: %s" % file_to_delete) + os.remove(file_to_delete) + def set_target(action, ctx, args, idf_target): args.define_cache_entry.append("IDF_TARGET=" + idf_target) sdkconfig_path = os.path.join(args.project_dir, 'sdkconfig') @@ -406,6 +421,14 @@ def action_extensions(base_actions, project_path): "in the build directory, so use with care." "Project configuration is not deleted.") }, + "python-clean": { + "callback": python_clean, + "short_help": "Delete generated Python byte code from the IDF directory", + "help": ( + "Delete generated Python byte code from the IDF directory " + "which may cause issues when switching between IDF and Python versions. " + "It is advised to run this target after switching versions.") + }, } }