Skip to content
Merged
49 changes: 34 additions & 15 deletions ros2_batch_job/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,11 @@

import argparse
import configparser
from distutils.version import StrictVersion
import os
from pathlib import Path
import platform
import pytest
from shutil import which
import subprocess
import sys
Expand Down Expand Up @@ -333,6 +335,35 @@ def process_coverage(args, job):
return 0


def check_xunit2_junit_family_value(config, value):
try:
if config.get('pytest', 'junit_family') == value:
return True
except configparser.NoOptionError:
return False
else:
return False
Comment thread
dirk-thomas marked this conversation as resolved.
Outdated


def force_xunit2_in_pytest_ini_files():
xunit_6_or_greater = StrictVersion(pytest.__version__) >= StrictVersion('6.0.0')
for path in Path('.').rglob('pytest.ini'):
config = configparser.ConfigParser()
config.read(str(path))
if xunit_6_or_greater:
# only need to correct explicit legacy option if exists
if not check_xunit2_junit_family_value(config, 'legacy'):
continue
else:
# in xunit < 6 need to enforce xunit2 if not set
if check_xunit2_junit_family_value(config, 'xunit2'):
continue

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am wondering if the duplicate logic in the if and else block can't be avoided...

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the code was awful, yes. I made some changes in 057c1f7 . Hopefully it can be read more easily.

print('xunit2 patch applied to ' + str(path))
Comment thread
dirk-thomas marked this conversation as resolved.
Outdated
config.set('pytest', 'junit_family', 'xunit2')
with open(path, 'w+') as configfile:
config.write(configfile)


def build_and_test(args, job):
compile_with_clang = args.compile_with_clang and args.os == 'linux'

Expand Down Expand Up @@ -382,21 +413,9 @@ def build_and_test(args, job):
# xunit2 format is needed to make Jenkins xunit plugin 2.x happy
with open('pytest.ini', 'w') as ini_file:
ini_file.write('[pytest]\njunit_family=xunit2')
# check if packages have a pytest.ini file and add the xunit2
# format if it is not present
for path in Path('.').rglob('pytest.ini'):
config = configparser.ConfigParser()
config.read(str(path))
try:
# only if xunit2 is set continue the loop with the file unpatched
if config.get('pytest', 'junit_family') == 'xunit2':
continue
except configparser.NoOptionError:
pass
print('xunit2 patch applied to ' + str(path))
config.set('pytest', 'junit_family', 'xunit2')
with open(path, 'w+') as configfile:
config.write(configfile)
# check if packages have a pytest.ini file that will override xunit2 setup
# and patch configuration if needed to keep the xunit2 configuration
force_xunit2_in_pytest_ini_files()
Comment thread
dirk-thomas marked this conversation as resolved.
Outdated

test_cmd = [
args.colcon_script, 'test',
Expand Down