From 9fe4ceafc79431377af909fa467e35797045f50c Mon Sep 17 00:00:00 2001 From: Frantisek Hrbata Date: Wed, 8 May 2024 11:21:10 +0200 Subject: [PATCH] fix: make idf_size.py compatible with python3.8 Previous 6caa4a17ace9 ("fix: display correct help in the idf_size.py wrapper") introduced a regression, because it uses exit_on_error parameter for argparse.ArgumentParser, which was added in python3.9, making idf_size.py incompatible with idf.py minimal required python3.8. The objective is to inspect the arguments of idf_size.py using a wrapper argparse to determine whether the legacy or refactored version should be initiated, while always displaying help for the underlying version. The exit_on_error function was previously utilized to prevent argparse from exiting and displaying help/usage. This replaces exit_on_error with a workaround that makes the --format argument optional. Since this is the sole instance where the wrapper argparse might fail, it achieves the same outcome as using exit_on_error. Fixes: 6caa4a17ace9 ("fix: display correct help in the idf_size.py wrapper") Signed-off-by: Frantisek Hrbata --- tools/idf_size.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/tools/idf_size.py b/tools/idf_size.py index 80c968239a..a3cb75c7da 100755 --- a/tools/idf_size.py +++ b/tools/idf_size.py @@ -13,8 +13,13 @@ if __name__ == '__main__': # Here the argparse is used only to "peek" into arguments if # legacy version is requested or if old json format is specified. # In these two cases the esp_idf_size legacy version is spawned. - parser = argparse.ArgumentParser(exit_on_error=False, add_help=False) - parser.add_argument('--format') + parser = argparse.ArgumentParser(add_help=False) + # Make the --format arg optional, so this argparse instance does not + # fail with an error and the proper underlying help is displayed. + # Note that exit_on_error is supported from python3.9, so this is + # a workaround how to make sure that the args parsing doesn't fail here if idf_size.py + # is invoked e.g. without specifying the format, like "idf_size.py --format". + parser.add_argument('--format', nargs='?') parser.add_argument('-l', '--legacy', action='store_true', default=os.environ.get('ESP_IDF_SIZE_LEGACY', '0') == '1') # The sys.argv is parsed with "exit_on_error", but the argparse.ArgumentError @@ -34,7 +39,9 @@ if __name__ == '__main__': os.environ['ESP_IDF_SIZE_NG'] = '1' if not rest or '-h' in rest or '--help' in rest: print(('Note: legacy esp_idf_size version can be invoked by specifying the -l/--legacy ' - 'option or by setting the ESP_IDF_SIZE_LEGACY environment variable.')) + 'option or by setting the ESP_IDF_SIZE_LEGACY environment variable. Additionally, the ' + 'legacy version is automatically employed when the JSON format is specified for ' + 'compatibility with previous versions.')) if args.format is not None: rest = ['--format', args.format] + rest