mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-11-04 06:11:06 +00:00 
			
		
		
		
	Previous6caa4a17ac("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:6caa4a17ac("fix: display correct help in the idf_size.py wrapper") Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
		
			
				
	
	
		
			50 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env python
 | 
						|
#
 | 
						|
# 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__':
 | 
						|
    # 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(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
 | 
						|
    # 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:
 | 
						|
            print('warning: refactored esp-idf-size not installed, using legacy mode', file=sys.stderr)
 | 
						|
            args.legacy = True
 | 
						|
        else:
 | 
						|
            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. 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
 | 
						|
 | 
						|
    sys.exit(subprocess.run([sys.executable, '-m', 'esp_idf_size'] + rest).returncode)
 |