diff --git a/Testsuite/test/post_process_ctest_results.py b/Testsuite/test/post_process_ctest_results.py index 6da4d7de21c1..f7253ac4c081 100644 --- a/Testsuite/test/post_process_ctest_results.py +++ b/Testsuite/test/post_process_ctest_results.py @@ -1,75 +1,130 @@ import sys -import io import re import os -report_file=sys.argv[1] -report_name=sys.argv[2] -global_report_name=sys.argv[3] -rx=re.compile('(.*Configuring (examples|demo|test)*( in )*(test\/|examples\/|demo\/)*)((?!done)\w+)') -rx_demo=re.compile('.*in demo\/') -rx_examples=re.compile('.*in examples\/') +input_report_file_name=sys.argv[1] +report_file_name=sys.argv[2] +global_report_file_name=sys.argv[3] +config_regex=re.compile(r'(.*Configuring (examples|demo|test)*( in )*(test/|examples/|demo/)*)((?!done)\w+)') +demo_regex=re.compile(r'.*in demo/') +examples_regex=re.compile(r'.*in examples/') +Separator = "------------------------------------------------------------------" #open the Installation report -#For each NAME, check if NAME is a directory. If not, create one, create a +#For each NAME, check if NAME is a directory. If not, create one, create a #text report, and write everything that is in the report until the next NAME -#in it. Then, add 'NAME r' in the global report. This should allow to get all +#in it. Then, add 'NAME r' in the global report. This should allow to get all #the NOTICE and other info explaining why the configuration is skipped. name="" is_writing=False is_ignored=False -global_report=open(global_report_name, "a+") -with open(report_file, "rt") as test_report: - for myline in test_report: - m=rx.match(myline) - - if is_writing: - if m: - is_writing=False - test_report.close() - if is_ignored: - print("{label} {result}".format(label=name, result='r'), file=global_report) - is_ignored=False - else: - test_report.write(myline) - if not is_writing: - if m: - name=m.group(0).replace(m.group(1), "") - if rx_demo.match(myline): - name="{str}_Demo".format(str=name) - elif rx_examples.match(myline): - name="{str}_Examples".format(str=name) - elif name == "libCGAL": - name="libCGAL_shared" - elif name == "libCGAL_Core": - name="libCGALCore_shared" - elif name == "libCGAL_ImageIO": - name="libCGALimageIO_shared" - elif name == "libCGAL_Qt6": - name="libCGALQt6_shared" - if name=="incomplete": - is_writing=False - is_ignored=False - continue - else: - if not os.path.isdir(name): - is_ignored=True - os.mkdir(name) - test_report=open("{dir}/{file}".format(dir=name, file=report_name), "w+") - print(""" -{scm_branch} -""" .format(scm_branch=open("{}/../../../../../.scm-branch".format(os.getcwd()), 'r').read()),file=test_report) - else: - is_ignored=False - test_report=open("{dir}/{file}".format(dir=name, file=report_name), "a+") - test_report.write(" --- CMake Results: --- \n\n") - is_writing=True +position = 0 +lines_to_write = [] +installation_cmake_logs = [] + + + +def find_third_separator(inner_contents): + separator_count = 0 + for j, inner_line in enumerate(inner_contents): + if inner_line.strip() == Separator: + separator_count += 1 + if separator_count == 3: + return j + return len(inner_contents) + 2 + +def find_last_separator(inner_contents): + for j, inner_line in enumerate(inner_contents): + if inner_line.strip() == Separator: + inner_position = j + return inner_position + +with open ("{dir}/{file}".format(dir="Installation",file=report_file_name), "r", encoding="utf-8") as file: + contents = file.readlines() +position = find_last_separator(contents) +for i, line in enumerate(contents): + if i > position: + installation_cmake_logs.append(line) + if line.strip() == "== Generating build files for tests ==": + break +contents = [] + +global_report = open(global_report_file_name, "a+", encoding="utf-8") +with open(input_report_file_name, "rt", encoding="utf-8") as input_report_file: + for myline in input_report_file: + match = config_regex.match(myline) + if is_writing: + if match: + is_writing = False + input_report_file.close() + if is_ignored: + print("{label} {result}".format(label=name, result='r'), file=global_report) + is_ignored = False + if lines_to_write: + file_path = "{dir}/{file}".format(dir=name, file=report_file_name) + if os.path.exists(file_path): + with open(file_path, "r", encoding="utf-8") as file: + contents = file.readlines() + else: + contents = [] + + position = find_third_separator(contents) + + if not any(re.search("- CMake Results .*", content) for content in contents): + lines_to_write.insert(0, f"{Separator}\n- CMake Results for {name}\n{Separator}\n\n") + if not any(re.search("- CMake Logs .*", content) for content in contents): + contents.insert(position - 1, Separator + "\n- CMake Logs from Installation \n" + Separator + "\n\n") + for log in installation_cmake_logs: + contents.insert(position, log) + position += 1 + lines_to_write.insert(0, "\n") + contents[position:position] = lines_to_write + + with open(file_path, "w", encoding="utf-8") as file: + file.write("".join(contents)) + + lines_to_write = [] + + if is_ignored: + is_ignored = False + else: + if myline.strip() != "": + lines_to_write.append(myline) + if not is_writing: + if match: + name=match.group(0).replace(match.group(1), "") + if demo_regex.match(myline): + name="{str}_Demo".format(str=name) + elif examples_regex.match(myline): + name="{str}_Examples".format(str=name) + elif name == "libCGAL": + name="libCGAL_shared" + elif name == "libCGAL_Core": + name="libCGALCore_shared" + elif name == "libCGAL_ImageIO": + name="libCGALimageIO_shared" + elif name == "libCGAL_Qt6": + name="libCGALQt6_shared" + if name=="incomplete": + is_writing=False + is_ignored=False + continue + else: + if not os.path.isdir(name): + is_ignored = True + os.mkdir(name) + with open("{dir}/{file}".format(dir=name, file=report_file_name), "w", encoding="utf-8") as input_report_file: + input_report_file.write(open("{}/../../../../../.scm-branch".format(os.getcwd()), 'r', encoding="utf-8").read()) + else: + is_ignored = False + is_writing = True + if is_writing: is_writing=False - test_report.close() + input_report_file.close() if is_ignored: - print("{label} {result}".format(label=name, result='r'), file=global_report) - is_ignored=False + print("{label} {result}".format(label=name, result='r'), file=global_report) + is_ignored=False global_report.close()