From 0b4fdcbd173dda188ab5079c3d7d8f60e6d0ad1b Mon Sep 17 00:00:00 2001 From: Giovanni La Mura <giovanni.lamura@inaf.it> Date: Wed, 19 Jun 2024 09:09:09 +0000 Subject: [PATCH] Report progress when running pycompare --- src/scripts/pycompare.py | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/scripts/pycompare.py b/src/scripts/pycompare.py index 252000b3..633876ab 100755 --- a/src/scripts/pycompare.py +++ b/src/scripts/pycompare.py @@ -139,6 +139,8 @@ def compare_files(config): fortran_file = open(config['fortran_file_name'], 'r') c_file = open(config['c_file_name'], 'r') num_read_lines = 0 + num_filtered_lines = 0 + last_progress = 0; # LOG FILE INITIALIZATION # if (config['log_html']): l_file = open(config['html_output'], 'w') @@ -161,7 +163,10 @@ def compare_files(config): num_len = 1 if (line_count > 0): num_len = max(4, int(log10(line_count)) + 1) - print("INFO: checking file contents...") + if (config['say_progress']): + print("INFO: checking file contents... 0", end='%', flush=True) + else: + print("INFO: checking file contents...") while (line_loop): if (not config['linewise']): line_loop = False @@ -172,6 +177,7 @@ def compare_files(config): c_lines = [c_file.readline()] num_read_lines += 1 num_read_lines += 1 + num_filtered_lines += 1 # Start here the comparison loop if (len(f_lines) == len(c_lines)): for li in range(len(f_lines)): @@ -180,24 +186,31 @@ def compare_files(config): mismatch_count['warnings'] += line_result[1] mismatch_count['noisy'] += line_result[2] if (mismatch_count['errors'] > 0 and not config['check_all']): - print("INFO: mismatch found at line %d"%(num_read_lines)) + print("\nINFO: mismatch found at line %d"%(num_read_lines)) line_loop = False break else: mismatch_count['errors'] = len(c_lines) - print("ERROR: {0:s} and {1:s} have different numbers of lines!".format( + print("\nERROR: {0:s} and {1:s} have different numbers of lines!".format( config['fortran_file_name'], config['c_file_name'] )) if (config['log_html']): print("Different file sizes. No log produced.") config['log_html'] = False - if (num_read_lines >= line_count): + if (num_filtered_lines >= line_count): line_loop = False + if (config['say_progress']): + progress = int(100 * num_filtered_lines / line_count) + if (progress > last_progress): + print("\b\b\b\b%3d"%progress, end="%", flush=True) + last_progress = progress #End line loop if l_file is not None: l_file.write(" </body>\n") l_file.write("</html>\n") l_file.close() + if (config['say_progress']): + print("") return mismatch_count ## \brief Perform the comparison of two file lines. @@ -438,6 +451,7 @@ def parse_arguments(): 'linewise': True, 'log_html': False, 'html_output': 'pycompare.html', + 'say_progress': True, 'warning_threshold': 0.005, 'help_mode': False, 'check_all': True, @@ -460,6 +474,8 @@ def parse_arguments(): config['help_mode'] = True elif (arg.startswith("--linewise")): config['linewise'] = True + elif (arg.startswith("--no-progress")): + config['say_progress'] = False elif (arg.startswith("--quick")): config['check_all'] = False else: @@ -482,6 +498,7 @@ def print_help(): print("--help Print this help and exit.") print("--html[=OPT_OUTPUT_NAME] Enable logging to HTML file (default logs to \"pycompare.html\").") print("--linewise Load only one line at a time. Useful to compare big files (True by default).") + print("--no-progress Disable progress logging.") print("--quick Stop on first mismatch (default is to perform a full check).") print("--warn Set a fractional threshold for numeric warning (default = 0.005).") print(" ") -- GitLab