From ae0eabec53d5fa1d826a7f95aff42191694949de Mon Sep 17 00:00:00 2001 From: Frantisek Hrbata Date: Mon, 6 May 2024 12:30:08 +0200 Subject: [PATCH] fix: display correct help in the idf_size.py wrapper Currently the wrapper tries to figure out which version of the esp-idf-size should be started. The legacy version is used if explicitly requested by the -l/--legacy option or if json format is specified. This works fine, but if help is requested, it is printed for the wrapper as shown bellow $ idf_size.py -h usage: idf_size.py [-h] [--format FORMAT] [-l] options: -h, --help show this help message and exit --format FORMAT -l, --legacy This is not convenient and the full help from the underlying version should be displayed. Fix this by only peeking into the args to figure out if legacy or refactored version should be started and always spawn the underlying esp_idf_size python module. This is done by using exit_on_error=False and add_help=False for the ArgumentParser. When help for refactored version is requested a note as following is printed to notify users that the legacy version can still be used. $ idf_size.py -h 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. Signed-off-by: Frantisek Hrbata --- tools/idf_size.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/tools/idf_size.py b/tools/idf_size.py index 342340002c..80c968239a 100755 --- a/tools/idf_size.py +++ b/tools/idf_size.py @@ -1,22 +1,30 @@ #!/usr/bin/env python # -# SPDX-FileCopyrightText: 2017-2023 Espressif Systems (Shanghai) CO LTD +# SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD # # SPDX-License-Identifier: Apache-2.0 # - import argparse import os import subprocess import sys if __name__ == '__main__': - parser = argparse.ArgumentParser() + # 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.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 + # exception should never occur, because unknown args should be put into + # the rest variable, since the parse_known_args() method is used. args, rest = parser.parse_known_args() if not args.legacy and args.format != 'json': + # By default start the refactored version, unless legacy version is explicitly requested with + # -l/--legacy option or if old json format is specified. try: import esp_idf_size.ng # noqa: F401 except ImportError: @@ -24,9 +32,9 @@ if __name__ == '__main__': args.legacy = True else: os.environ['ESP_IDF_SIZE_NG'] = '1' - - if args.legacy and args.format in ['json2', 'raw', 'tree']: - sys.exit(f'Legacy esp-idf-size does not support {args.format} format') + 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.')) if args.format is not None: rest = ['--format', args.format] + rest