Просмотр исходного кода

Merge branch 'feature/pyc_clean' into 'master'

tools/idf.py: Clean Python bytecode files

Closes IDFGH-3368

See merge request espressif/esp-idf!8907
Ivan Grokhotkov 5 лет назад
Родитель
Сommit
5aae08e6b4
2 измененных файлов с 34 добавлено и 0 удалено
  1. 11 0
      tools/ci/test_build_system_cmake.sh
  2. 23 0
      tools/idf_py_actions/core_ext.py

+ 11 - 0
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

+ 23 - 0
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):
         if(not args["preview"] and idf_target in PREVIEW_TARGETS):
             raise FatalError("%s is still in preview. You have to append '--preview' option after idf.py to use any preview feature." % idf_target)
@@ -418,6 +433,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.")
+            },
         }
     }