Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TESTSUITE: Extract cmake logs in testresults. #8235

Merged
Merged
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
167 changes: 109 additions & 58 deletions Testsuite/test/post_process_ctest_results.py
Original file line number Diff line number Diff line change
@@ -1,75 +1,126 @@
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('(.*Configuring (examples|demo|test)*( in )*(test\/|examples\/|demo\/)*)((?!done)\w+)')
demo_regex=re.compile('.*in demo\/')
examples_regex=re.compile('.*in examples\/')
lrineau marked this conversation as resolved.
Show resolved Hide resolved
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
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()