Merge branch 'feature/pyc_clean_v4.0' into 'release/v4.0'

tools/idf.py: Clean Python bytecode files (v4.0)

See merge request espressif/esp-idf!9264
This commit is contained in:
Angus Gratton 2020-06-24 12:30:48 +08:00
commit e37cb829f4
2 changed files with 34 additions and 0 deletions

View file

@ -395,6 +395,17 @@ function run_tests()
(grep '"command"' build/compile_commands.json | grep -v mfix-esp32-psram-cache-issue) && failure "All commands in compile_commands.json should use PSRAM cache workaround" (grep '"command"' build/compile_commands.json | grep -v mfix-esp32-psram-cache-issue) && failure "All commands in compile_commands.json should use PSRAM cache workaround"
rm -r build rm -r build
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" print_status "Displays partition table when executing target partition_table"
idf.py partition_table | grep -E "# Espressif .+ Partition Table" idf.py partition_table | grep -E "# Espressif .+ Partition Table"
rm -r build rm -r build

View file

@ -27,6 +27,7 @@
# any external libraries here - put in external script, or import in # any external libraries here - put in external script, or import in
# their specific function instead. # their specific function instead.
import codecs import codecs
import fnmatch
import json import json
import locale import locale
import multiprocessing import multiprocessing
@ -491,6 +492,21 @@ def fullclean(action, ctx, args):
os.remove(f) 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 _safe_relpath(path, start=None): def _safe_relpath(path, start=None):
""" Return a relative path, same as os.path.relpath, but only if this is possible. """ Return a relative path, same as os.path.relpath, but only if this is possible.
@ -1124,6 +1140,13 @@ def init_cli():
+ "Note that this option recursively deletes all files in the build directory, so use with care." + "Note that this option recursively deletes all files in the build directory, so use with care."
+ "Project configuration is not deleted.", + "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.")
},
} }
} }