From b507503548823347fafc76d92ee97f22465add26 Mon Sep 17 00:00:00 2001 From: Marcel Telka <marcel@telka.sk> Date: Wed, 20 Mar 2024 07:20:17 +0100 Subject: [PATCH] Add stestr Python project --- components/python/stestr/python-integrate-project.conf | 23 ++ components/python/stestr/stestr-PYVER.p5m | 113 ++++++++++ components/python/stestr/Makefile | 62 +++++ components/python/stestr/test/results-all.master | 242 ++++++++++++++++++++++ make-rules/setup.py.mk | 16 + components/python/stestr/manifests/sample-manifest.p5m | 113 ++++++++++ components/python/stestr/pkg5 | 19 + components/python/stestr/patches/01-test-reqs.patch | 15 + 8 files changed, 603 insertions(+), 0 deletions(-) diff --git a/components/python/stestr/Makefile b/components/python/stestr/Makefile new file mode 100644 index 0000000..7f75f6f --- /dev/null +++ b/components/python/stestr/Makefile @@ -0,0 +1,62 @@ +# +# This file and its contents are supplied under the terms of the +# Common Development and Distribution License ("CDDL"), version 1.0. +# You may only use this file in accordance with the terms of version +# 1.0 of the CDDL. +# +# A full copy of the text of the CDDL should have accompanied this +# source. A copy of the CDDL is also available via the Internet at +# http://www.illumos.org/license/CDDL. +# + +# +# This file was automatically generated using the following command: +# $WS_TOOLS/python-integrate-project stestr +# + +BUILD_STYLE = setup.py + +include ../../../make-rules/shared-macros.mk + +COMPONENT_NAME = stestr +HUMAN_VERSION = 4.1.0 +COMPONENT_SUMMARY = stestr - A parallel Python test runner built around subunit +COMPONENT_PROJECT_URL = http://stestr.readthedocs.io/en/latest/ +COMPONENT_ARCHIVE_HASH = \ + sha256:5f61c369eece63c292d13599e12aa158af7685990643f24dd6fa7fabfe34e98a +COMPONENT_LICENSE = Apache-2.0 +COMPONENT_LICENSE_FILE = LICENSE + +include $(WS_MAKE_RULES)/common.mk + +# stestr is used to test stestr +USE_STESTR = yes + +# Ignore stdout and stderr of successfull tests +TOX_POSARGS += --suppress-attachments + +# Auto-generated dependencies +PYTHON_REQUIRED_PACKAGES += library/python/cliff +PYTHON_REQUIRED_PACKAGES += library/python/extras +PYTHON_REQUIRED_PACKAGES += library/python/fixtures +PYTHON_REQUIRED_PACKAGES += library/python/pbr +PYTHON_REQUIRED_PACKAGES += library/python/python-subunit +PYTHON_REQUIRED_PACKAGES += library/python/pyyaml +PYTHON_REQUIRED_PACKAGES += library/python/testtools +PYTHON_REQUIRED_PACKAGES += library/python/tomlkit +PYTHON_REQUIRED_PACKAGES += library/python/voluptuous +PYTHON_REQUIRED_PACKAGES += runtime/python +TEST_REQUIRED_PACKAGES.python += library/python/black +TEST_REQUIRED_PACKAGES.python += library/python/cliff +TEST_REQUIRED_PACKAGES.python += library/python/coverage +TEST_REQUIRED_PACKAGES.python += library/python/ddt +TEST_REQUIRED_PACKAGES.python += library/python/extras +TEST_REQUIRED_PACKAGES.python += library/python/fixtures +TEST_REQUIRED_PACKAGES.python += library/python/iso8601 +TEST_REQUIRED_PACKAGES.python += library/python/pbr +TEST_REQUIRED_PACKAGES.python += library/python/python-subunit +TEST_REQUIRED_PACKAGES.python += library/python/pyyaml +TEST_REQUIRED_PACKAGES.python += library/python/sphinx +TEST_REQUIRED_PACKAGES.python += library/python/testtools +TEST_REQUIRED_PACKAGES.python += library/python/tomlkit +TEST_REQUIRED_PACKAGES.python += library/python/voluptuous diff --git a/components/python/stestr/manifests/sample-manifest.p5m b/components/python/stestr/manifests/sample-manifest.p5m new file mode 100644 index 0000000..3cda4b2 --- /dev/null +++ b/components/python/stestr/manifests/sample-manifest.p5m @@ -0,0 +1,113 @@ +# +# This file and its contents are supplied under the terms of the +# Common Development and Distribution License ("CDDL"), version 1.0. +# You may only use this file in accordance with the terms of version +# 1.0 of the CDDL. +# +# A full copy of the text of the CDDL should have accompanied this +# source. A copy of the CDDL is also available via the Internet at +# http://www.illumos.org/license/CDDL. +# + +# +# Copyright 2024 <contributor> +# + +set name=pkg.fmri value=pkg:/$(COMPONENT_FMRI)-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION) +set name=pkg.human-version value=$(HUMAN_VERSION) +set name=pkg.summary value="$(COMPONENT_SUMMARY)" +set name=info.classification value="$(COMPONENT_CLASSIFICATION)" +set name=info.upstream-url value=$(COMPONENT_PROJECT_URL) +set name=info.source-url value=$(COMPONENT_ARCHIVE_URL) +set name=org.opensolaris.consolidation value=$(CONSOLIDATION) + +license $(COMPONENT_LICENSE_FILE) license='$(COMPONENT_LICENSE)' + +file path=usr/bin/stestr-$(PYVER) +file path=usr/lib/python$(PYVER)/vendor-packages/stestr-$(HUMAN_VERSION)-py$(PYVER).egg-info/PKG-INFO +file path=usr/lib/python$(PYVER)/vendor-packages/stestr-$(HUMAN_VERSION)-py$(PYVER).egg-info/SOURCES.txt +file path=usr/lib/python$(PYVER)/vendor-packages/stestr-$(HUMAN_VERSION)-py$(PYVER).egg-info/dependency_links.txt +file path=usr/lib/python$(PYVER)/vendor-packages/stestr-$(HUMAN_VERSION)-py$(PYVER).egg-info/entry_points.txt +file path=usr/lib/python$(PYVER)/vendor-packages/stestr-$(HUMAN_VERSION)-py$(PYVER).egg-info/not-zip-safe +file path=usr/lib/python$(PYVER)/vendor-packages/stestr-$(HUMAN_VERSION)-py$(PYVER).egg-info/pbr.json +file path=usr/lib/python$(PYVER)/vendor-packages/stestr-$(HUMAN_VERSION)-py$(PYVER).egg-info/requires.txt +file path=usr/lib/python$(PYVER)/vendor-packages/stestr-$(HUMAN_VERSION)-py$(PYVER).egg-info/top_level.txt +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/__init__.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/__main__.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/bisect_tests.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/cli.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/colorizer.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/commands/__init__.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/commands/failing.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/commands/history.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/commands/init.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/commands/last.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/commands/list.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/commands/load.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/commands/run.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/commands/slowest.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/config_file.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/output.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/repository/__init__.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/repository/abstract.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/repository/file.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/repository/memory.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/repository/util.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/results.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/scheduler.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/selection.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/subunit_runner/__init__.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/subunit_runner/program.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/subunit_runner/run.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/subunit_trace.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/test_processor.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/testlist.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/__init__.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/base.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/files/__init__.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/files/bisect-fail-serial-tests +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/files/failing-tests +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/files/passing-tests +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/files/setup.cfg +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/files/stestr.yaml +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/files/testr-conf +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/files/tox.ini +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/repository/__init__.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/repository/test_file.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/repository/test_util.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/sample_streams/all_skips.subunit +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/sample_streams/failure.subunit +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/sample_streams/successful.subunit +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/test_bisect_return_codes.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/test_bisect_tests.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/test_config_file.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/test_load.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/test_output.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/test_return_codes.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/test_run.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/test_scheduler.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/test_selection.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/test_slowest.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/test_subunit_trace.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/test_test_processor.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/test_user_config.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/test_user_config_return_codes.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/test_utils.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/user_config.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/utils.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/version.py + +# python modules are unusable without python runtime binary +depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \ + pkg.debug.depend.path=usr/bin + +# Automatically generated dependencies based on distribution metadata +depend type=require fmri=pkg:/library/python/cliff-$(PYV) +depend type=require fmri=pkg:/library/python/extras-$(PYV) +depend type=require fmri=pkg:/library/python/fixtures-$(PYV) +depend type=require fmri=pkg:/library/python/pbr-$(PYV) +depend type=require fmri=pkg:/library/python/python-subunit-$(PYV) +depend type=require fmri=pkg:/library/python/pyyaml-$(PYV) +depend type=require fmri=pkg:/library/python/testtools-$(PYV) +depend type=require fmri=pkg:/library/python/tomlkit-$(PYV) +depend type=require fmri=pkg:/library/python/voluptuous-$(PYV) diff --git a/components/python/stestr/patches/01-test-reqs.patch b/components/python/stestr/patches/01-test-reqs.patch new file mode 100644 index 0000000..a6c296c --- /dev/null +++ b/components/python/stestr/patches/01-test-reqs.patch @@ -0,0 +1,15 @@ +Remove dependencies not needed to run tests. + +--- stestr-4.1.0/test-requirements.txt.orig ++++ stestr-4.1.0/test-requirements.txt +@@ -2,10 +2,8 @@ + # of appearance. Changing the order has an impact on the overall integration + # process, which may cause wedges in the gate later. + +-hacking<3.2.0,>=3.1.0 + sphinx>2.1.0 # BSD + coverage>=4.0 # Apache-2.0 + ddt>=1.0.1 # MIT + iso8601 # MIT +-doc8>=0.8.0 # Apache-2.0 + black~=22.0 diff --git a/components/python/stestr/pkg5 b/components/python/stestr/pkg5 new file mode 100644 index 0000000..4572e9b --- /dev/null +++ b/components/python/stestr/pkg5 @@ -0,0 +1,19 @@ +{ + "dependencies": [ + "library/python/cliff-39", + "library/python/extras-39", + "library/python/fixtures-39", + "library/python/pbr-39", + "library/python/python-subunit-39", + "library/python/pyyaml-39", + "library/python/testtools-39", + "library/python/tomlkit-39", + "library/python/voluptuous-39", + "runtime/python-39" + ], + "fmris": [ + "library/python/stestr", + "library/python/stestr-39" + ], + "name": "stestr" +} diff --git a/components/python/stestr/python-integrate-project.conf b/components/python/stestr/python-integrate-project.conf new file mode 100644 index 0000000..0e4d04d --- /dev/null +++ b/components/python/stestr/python-integrate-project.conf @@ -0,0 +1,23 @@ +# +# This file and its contents are supplied under the terms of the +# Common Development and Distribution License ("CDDL"), version 1.0. +# You may only use this file in accordance with the terms of version +# 1.0 of the CDDL. +# +# A full copy of the text of the CDDL should have accompanied this +# source. A copy of the CDDL is also available via the Internet at +# http://www.illumos.org/license/CDDL. +# + +# +# Copyright 2024 Marcel Telka +# + +%patch% 01-test-reqs.patch + +%include-3% +# stestr is used to test stestr +USE_STESTR = yes + +# Ignore stdout and stderr of successfull tests +TOX_POSARGS += --suppress-attachments diff --git a/components/python/stestr/stestr-PYVER.p5m b/components/python/stestr/stestr-PYVER.p5m new file mode 100644 index 0000000..e9764cf --- /dev/null +++ b/components/python/stestr/stestr-PYVER.p5m @@ -0,0 +1,113 @@ +# +# This file and its contents are supplied under the terms of the +# Common Development and Distribution License ("CDDL"), version 1.0. +# You may only use this file in accordance with the terms of version +# 1.0 of the CDDL. +# +# A full copy of the text of the CDDL should have accompanied this +# source. A copy of the CDDL is also available via the Internet at +# http://www.illumos.org/license/CDDL. +# + +# +# This file was automatically generated using python-integrate-project +# + +set name=pkg.fmri value=pkg:/$(COMPONENT_FMRI)-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION) +set name=pkg.human-version value=$(HUMAN_VERSION) +set name=pkg.summary value="$(COMPONENT_SUMMARY)" +set name=info.classification value="$(COMPONENT_CLASSIFICATION)" +set name=info.upstream-url value=$(COMPONENT_PROJECT_URL) +set name=info.source-url value=$(COMPONENT_ARCHIVE_URL) +set name=org.opensolaris.consolidation value=$(CONSOLIDATION) + +license $(COMPONENT_LICENSE_FILE) license='$(COMPONENT_LICENSE)' + +file path=usr/bin/stestr-$(PYVER) +file path=usr/lib/python$(PYVER)/vendor-packages/stestr-$(HUMAN_VERSION)-py$(PYVER).egg-info/PKG-INFO +file path=usr/lib/python$(PYVER)/vendor-packages/stestr-$(HUMAN_VERSION)-py$(PYVER).egg-info/SOURCES.txt +file path=usr/lib/python$(PYVER)/vendor-packages/stestr-$(HUMAN_VERSION)-py$(PYVER).egg-info/dependency_links.txt +file path=usr/lib/python$(PYVER)/vendor-packages/stestr-$(HUMAN_VERSION)-py$(PYVER).egg-info/entry_points.txt +file path=usr/lib/python$(PYVER)/vendor-packages/stestr-$(HUMAN_VERSION)-py$(PYVER).egg-info/not-zip-safe +file path=usr/lib/python$(PYVER)/vendor-packages/stestr-$(HUMAN_VERSION)-py$(PYVER).egg-info/pbr.json +file path=usr/lib/python$(PYVER)/vendor-packages/stestr-$(HUMAN_VERSION)-py$(PYVER).egg-info/requires.txt +file path=usr/lib/python$(PYVER)/vendor-packages/stestr-$(HUMAN_VERSION)-py$(PYVER).egg-info/top_level.txt +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/__init__.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/__main__.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/bisect_tests.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/cli.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/colorizer.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/commands/__init__.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/commands/failing.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/commands/history.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/commands/init.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/commands/last.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/commands/list.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/commands/load.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/commands/run.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/commands/slowest.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/config_file.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/output.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/repository/__init__.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/repository/abstract.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/repository/file.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/repository/memory.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/repository/util.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/results.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/scheduler.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/selection.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/subunit_runner/__init__.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/subunit_runner/program.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/subunit_runner/run.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/subunit_trace.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/test_processor.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/testlist.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/__init__.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/base.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/files/__init__.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/files/bisect-fail-serial-tests +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/files/failing-tests +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/files/passing-tests +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/files/setup.cfg +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/files/stestr.yaml +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/files/testr-conf +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/files/tox.ini +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/repository/__init__.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/repository/test_file.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/repository/test_util.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/sample_streams/all_skips.subunit +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/sample_streams/failure.subunit +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/sample_streams/successful.subunit +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/test_bisect_return_codes.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/test_bisect_tests.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/test_config_file.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/test_load.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/test_output.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/test_return_codes.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/test_run.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/test_scheduler.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/test_selection.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/test_slowest.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/test_subunit_trace.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/test_test_processor.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/test_user_config.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/test_user_config_return_codes.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/tests/test_utils.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/user_config.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/utils.py +file path=usr/lib/python$(PYVER)/vendor-packages/stestr/version.py + +# python modules are unusable without python runtime binary +depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \ + pkg.debug.depend.path=usr/bin + +# Automatically generated dependencies based on distribution metadata +depend type=require fmri=pkg:/library/python/cliff-$(PYV) +depend type=require fmri=pkg:/library/python/extras-$(PYV) +depend type=require fmri=pkg:/library/python/fixtures-$(PYV) +depend type=require fmri=pkg:/library/python/pbr-$(PYV) +depend type=require fmri=pkg:/library/python/python-subunit-$(PYV) +depend type=require fmri=pkg:/library/python/pyyaml-$(PYV) +depend type=require fmri=pkg:/library/python/testtools-$(PYV) +depend type=require fmri=pkg:/library/python/tomlkit-$(PYV) +depend type=require fmri=pkg:/library/python/voluptuous-$(PYV) diff --git a/components/python/stestr/test/results-all.master b/components/python/stestr/test/results-all.master new file mode 100644 index 0000000..853250e --- /dev/null +++ b/components/python/stestr/test/results-all.master @@ -0,0 +1,242 @@ +py$(PYV): remove tox env folder $(@D)/.tox/py$(PYV) +py$(PYV): commands[0]> python tools/find_and_rm.py +py$(PYV): commands[1]> stestr run --suppress-attachments +stestr.tests.repository.test_file.TestFileRepository.test_find_metadata ... ok +stestr.tests.repository.test_file.TestFileRepository.test_get_metadata ... ok +stestr.tests.repository.test_file.TestFileRepository.test_get_run_ids ... ok +stestr.tests.repository.test_file.TestFileRepository.test_get_run_ids_empty ... ok +stestr.tests.repository.test_file.TestFileRepository.test_get_run_ids_with_hole ... ok +stestr.tests.repository.test_file.TestFileRepository.test_get_test_run_unexpected_ioerror_errno ... ok +stestr.tests.repository.test_file.TestFileRepository.test_initialise ... ok +stestr.tests.repository.test_file.TestFileRepository.test_initialise_empty_dir ... ok +stestr.tests.repository.test_file.TestFileRepository.test_initialise_expands_user_directory ... ok +stestr.tests.repository.test_file.TestFileRepository.test_initialise_non_empty_dir ... ok +stestr.tests.repository.test_file.TestFileRepository.test_inserter_output_path ... ok +stestr.tests.repository.test_file.TestFileRepository.test_inserting_creates_id ... ok +stestr.tests.repository.test_file.TestFileRepository.test_next_stream_corruption_error ... ok +stestr.tests.repository.test_file.TestFileRepository.test_open_expands_user_directory ... ok +stestr.tests.repository.test_file.TestFileRepository.test_remove_ids ... ok +stestr.tests.repository.test_file.TestFileRepository.test_remove_ids_id_not_in_repo ... ok +stestr.tests.repository.test_util.TestUtil.test_get_default_url_file ... ok +stestr.tests.repository.test_util.TestUtil.test_get_default_url_invalid_type ... ok +stestr.tests.repository.test_util.TestUtil.test_non_sql_get_repo_init_no_deps_import_error ... ok +stestr.tests.repository.test_util.TestUtil.test_non_sql_get_repo_open_no_deps_import_error ... ok +stestr.tests.test_bisect_return_codes.TestBisectReturnCodes.test_bisect_serial_fail_detected ... ok +stestr.tests.test_bisect_tests.TestBisectTests.test_bisect_no_failures_provided ... ok +stestr.tests.test_bisect_tests.TestBisectTests.test_bisect_tests_isolated_failure ... ok +stestr.tests.test_bisect_tests.TestBisectTests.test_bisect_tests_not_isolated_failure ... ok +stestr.tests.test_bisect_tests.TestBisectTests.test_bisect_tests_not_isolated_multiworker_failures ... ok +stestr.tests.test_bisect_tests.TestBisectTests.test_get_prior_tests_no_tags ... ok +stestr.tests.test_bisect_tests.TestBisectTests.test_get_prior_tests_with_tags ... ok +stestr.tests.test_bisect_tests.TestBisectTests.test_prior_tests_invlaid_test_id ... ok +stestr.tests.test_config_file.TestTestrConf.test_get_run_command_emptysysexecutable_noenv ... ok +stestr.tests.test_config_file.TestTestrConf.test_get_run_command_emptysysexecutable_win32 ... ok +stestr.tests.test_config_file.TestTestrConf.test_get_run_command_emptysysexecutable_withenv ... ok +stestr.tests.test_config_file.TestTestrConf.test_get_run_command_linux ... ok +stestr.tests.test_config_file.TestTestrConf.test_get_run_command_nogroup_regex_noparallel_class ... ok +stestr.tests.test_config_file.TestTestrConf.test_get_run_command_parallel_class ... ok +stestr.tests.test_config_file.TestTestrConf.test_get_run_command_win32 ... ok +stestr.tests.test_config_file.TestTestrConf.test_load_from_file_ini_fallback ... ok +stestr.tests.test_config_file.TestTestrConf.test_load_from_file_toml_has_precedence ... ok +stestr.tests.test_config_file.TestTestrConf.test_load_from_file_user_specified ... ok +stestr.tests.test_config_file.TestTestrConf.test_load_from_file_user_specified_fails ... ok +stestr.tests.test_config_file.TestTestrConf.test_sanitize_dir_win32_1_________________ ... ok +stestr.tests.test_config_file.TestTestrConf.test_sanitize_dir_win32_2___a__b______a__b______ ... ok +stestr.tests.test_config_file.TestTestrConf.test_sanitize_dir_win32_3___a__b____a__b__ ... ok +stestr.tests.test_config_file.TestTestrConf.test_toml_load ... ok +stestr.tests.test_load.TestLoadCommand.test_empty_with_pretty_out ... ok +stestr.tests.test_output.TestOutput.test_output_summary_failed ... ok +stestr.tests.test_output.TestOutput.test_output_summary_passed ... ok +stestr.tests.test_output.TestOutput.test_output_table ... ok +stestr.tests.test_output.TestOutput.test_output_tests ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_combine_results ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_empty_repo_dir ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_history_empty ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_history_list ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_history_remove ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_history_show_failing ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_history_show_invalid_id ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_history_show_passing ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_list ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_list_from_func ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_load_force_init ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_load_force_init_invalid ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_load_from_stdin ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_load_from_stdin_quiet ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_no_repo_dir ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_no_subunit_trace_force_subunit_trace ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_non_empty_repo_dir ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_parallel_exclusion_list ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_parallel_fails ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_parallel_fails_from_func ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_parallel_fails_unxsuccess ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_parallel_inclusion_list ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_parallel_passing ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_parallel_passing_bad_regex ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_parallel_passing_bad_regex_from_func ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_parallel_passing_from_func ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_parallel_passing_xfail ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_parallel_subunit_failing ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_parallel_subunit_passing ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_parallel_subunit_passing_from_func ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_run_no_discover_file_path ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_run_no_discover_file_path_failing ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_run_no_discover_pytest_path ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_run_no_discover_pytest_path_failing ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_serial_exclusion_list ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_serial_fails ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_serial_fails_from_func ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_serial_inclusion_list ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_serial_passing ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_serial_passing_from_func ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_serial_subunit_failing ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_serial_subunit_passing ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_serial_subunit_passing_from_func ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_slowest_failing ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_slowest_passing ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_str_concurrency_fails_from_func ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_str_concurrency_passing_from_func ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_until_failure_fails ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_until_failure_fails_from_func ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_until_failure_with_subunit_fails ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_until_failure_with_subunit_fails_from_func ... ok +stestr.tests.test_return_codes.TestReturnCodes.test_with_parallel_class ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_combine_results ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_empty_repo_dir ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_history_empty ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_history_list ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_history_remove ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_history_show_failing ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_history_show_invalid_id ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_history_show_passing ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_list ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_list_from_func ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_load_force_init ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_load_force_init_invalid ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_load_from_stdin ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_load_from_stdin_quiet ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_no_repo_dir ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_no_subunit_trace_force_subunit_trace ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_non_empty_repo_dir ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_parallel_exclusion_list ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_parallel_fails ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_parallel_fails_from_func ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_parallel_fails_unxsuccess ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_parallel_inclusion_list ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_parallel_passing ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_parallel_passing_bad_regex ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_parallel_passing_bad_regex_from_func ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_parallel_passing_from_func ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_parallel_passing_xfail ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_parallel_subunit_failing ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_parallel_subunit_passing ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_parallel_subunit_passing_from_func ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_run_no_discover_file_path ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_run_no_discover_file_path_failing ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_run_no_discover_pytest_path ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_run_no_discover_pytest_path_failing ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_serial_exclusion_list ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_serial_fails ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_serial_fails_from_func ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_serial_inclusion_list ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_serial_passing ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_serial_passing_from_func ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_serial_subunit_failing ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_serial_subunit_passing ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_serial_subunit_passing_from_func ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_slowest_failing ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_slowest_passing ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_str_concurrency_fails_from_func ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_str_concurrency_passing_from_func ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_until_failure_fails ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_until_failure_fails_from_func ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_until_failure_with_subunit_fails ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_until_failure_with_subunit_fails_from_func ... ok +stestr.tests.test_return_codes.TestReturnCodesToxIni.test_with_parallel_class ... ok +stestr.tests.test_run.TestRunCommand.test_to_int_invalid_str ... ok +stestr.tests.test_run.TestRunCommand.test_to_int_negative_int ... ok +stestr.tests.test_run.TestRunCommand.test_to_int_negative_int_str ... ok +stestr.tests.test_run.TestRunCommand.test_to_int_none ... ok +stestr.tests.test_run.TestRunCommand.test_to_int_positive_int ... ok +stestr.tests.test_run.TestRunCommand.test_to_int_positive_int_str ... ok +stestr.tests.test_scheduler.TestScheduler.test_generate_worker_partitions ... ok +stestr.tests.test_scheduler.TestScheduler.test_generate_worker_partitions_group_without_list ... ok +stestr.tests.test_scheduler.TestScheduler.test_generate_worker_partitions_group_without_match ... ok +stestr.tests.test_scheduler.TestScheduler.test_generate_worker_partitions_no_worker_tag ... ok +stestr.tests.test_scheduler.TestScheduler.test_generate_worker_partitions_with_count ... ok +stestr.tests.test_scheduler.TestScheduler.test_generate_worker_partitions_with_count_1 ... ok +stestr.tests.test_scheduler.TestScheduler.test_partition_tests ... ok +stestr.tests.test_scheduler.TestScheduler.test_partition_tests_with_grouping ... ok +stestr.tests.test_scheduler.TestScheduler.test_partition_tests_with_zero_duration ... ok +stestr.tests.test_scheduler.TestScheduler.test_random_partitions ... ok +stestr.tests.test_selection.TestConstructList.test_exclusion_list ... ok +stestr.tests.test_selection.TestConstructList.test_inclusion_exclusion_list_re ... ok +stestr.tests.test_selection.TestConstructList.test_inclusion_list ... ok +stestr.tests.test_selection.TestConstructList.test_inclusion_list_invalid_regex ... ok +stestr.tests.test_selection.TestConstructList.test_invalid_exclusion_re ... ok +stestr.tests.test_selection.TestConstructList.test_overlapping_exclude_regex ... ok +stestr.tests.test_selection.TestConstructList.test_simple_exclusion_re ... ok +stestr.tests.test_selection.TestConstructList.test_simple_re ... ok +stestr.tests.test_selection.TestExclusionReader.test_exclusion_reader ... ok +stestr.tests.test_selection.TestExclusionReader.test_invalid_regex ... ok +stestr.tests.test_selection.TestSelection.test_filter_invalid_regex ... ok +stestr.tests.test_selection.TestSelection.test_filter_tests ... ok +stestr.tests.test_selection.TestSelection.test_filter_tests_no_filter ... ok +stestr.tests.test_slowest.TestSlowest.test_format_times ... ok +stestr.tests.test_slowest.TestSlowest.test_format_times_all_zero ... ok +stestr.tests.test_slowest.TestSlowest.test_format_times_with_zero ... ok +stestr.tests.test_subunit_trace.TestSubunitTrace.test_get_durating_1 ... ok +stestr.tests.test_subunit_trace.TestSubunitTrace.test_get_durating_2 ... ok +stestr.tests.test_subunit_trace.TestSubunitTrace.test_get_durating_3 ... ok +stestr.tests.test_subunit_trace.TestSubunitTrace.test_run_time_1 ... ok +stestr.tests.test_subunit_trace.TestSubunitTrace.test_run_time_2 ... ok +stestr.tests.test_subunit_trace.TestSubunitTrace.test_run_time_3 ... ok +stestr.tests.test_subunit_trace.TestSubunitTrace.test_trace ... ok +stestr.tests.test_subunit_trace.TestSubunitTrace.test_trace_with_all_skips ... ok +stestr.tests.test_subunit_trace.TestSubunitTrace.test_trace_with_failures ... ok +stestr.tests.test_subunit_trace.TestSubunitTrace.test_trace_with_stuck_inprogress ... ok +stestr.tests.test_test_processor.TestTestProcessorFixture.test_start_process_linux ... ok +stestr.tests.test_test_processor.TestTestProcessorFixture.test_start_process_win32 ... ok +stestr.tests.test_user_config.TestUserConfig.test_get_default_user_config_file ... ok +stestr.tests.test_user_config.TestUserConfig.test_get_user_config_invalid_path ... ok +stestr.tests.test_user_config.TestUserConfig.test_get_user_config_xdg_file ... ok +stestr.tests.test_user_config.TestUserConfig.test_user_config_empty_schema ... ok +stestr.tests.test_user_config.TestUserConfig.test_user_config_full_config ... ok +stestr.tests.test_user_config.TestUserConfig.test_user_config_invalid_command ... ok +stestr.tests.test_user_config.TestUserConfig.test_user_config_invalid_integer ... ok +stestr.tests.test_user_config.TestUserConfig.test_user_config_invalid_option ... ok +stestr.tests.test_user_config.TestUserConfig.test_user_config_invalid_value_type ... ok +stestr.tests.test_user_config_return_codes.TestReturnCodes.test_abbreviate_config_file_failing ... ok +stestr.tests.test_user_config_return_codes.TestReturnCodes.test_abbreviate_config_file_passing ... ok +stestr.tests.test_user_config_return_codes.TestReturnCodes.test_abbreviate_load_from_config_failing ... SKIPPED: Abbreviated output not displaying +stestr.tests.test_user_config_return_codes.TestReturnCodes.test_abbreviate_load_from_config_passing ... SKIPPED: Abbreviated output not displaying +stestr.tests.test_user_config_return_codes.TestReturnCodes.test_empty_config_file_failing ... ok +stestr.tests.test_user_config_return_codes.TestReturnCodes.test_empty_config_file_passing ... ok +stestr.tests.test_user_config_return_codes.TestReturnCodes.test_failing_list_config_file ... ok +stestr.tests.test_user_config_return_codes.TestReturnCodes.test_no_subunit_trace_config_file_failing ... ok +stestr.tests.test_user_config_return_codes.TestReturnCodes.test_no_subunit_trace_config_file_force_subunit_trace ... ok +stestr.tests.test_user_config_return_codes.TestReturnCodes.test_no_subunit_trace_config_file_passing ... ok +stestr.tests.test_user_config_return_codes.TestReturnCodes.test_no_subunit_trace_last_config_file_passing ... ok +stestr.tests.test_user_config_return_codes.TestReturnCodes.test_no_subunit_trace_slowest_config_file_passing ... ok +stestr.tests.test_user_config_return_codes.TestReturnCodes.test_subunit_trace_load_from_config_failing ... ok +stestr.tests.test_user_config_return_codes.TestReturnCodes.test_subunit_trace_load_from_config_passing ... ok +stestr.tests.test_utils.TestUtils.test_cleanup_test_name_defaults ... ok +stestr.tests.test_utils.TestUtils.test_cleanup_test_name_leave_attrs ... ok +stestr.tests.test_utils.TestUtils.test_cleanup_test_name_strip_scenario ... ok +stestr.tests.test_utils.TestUtils.test_cleanup_test_name_strip_scenario_and_attrs ... ok + +====== +Totals +====== +Ran: 223 tests + - Passed: 221 + - Skipped: 2 + - Expected Fail: 0 + - Unexpected Success: 0 + - Failed: 0 + +============== +Worker Balance +============== + py$(PYV): OK + congratulations :) diff --git a/make-rules/setup.py.mk b/make-rules/setup.py.mk index 4a95156..e38016e 100644 --- a/make-rules/setup.py.mk +++ b/make-rules/setup.py.mk @@ -535,6 +535,22 @@ $(CAT) \ ) | $(COMPONENT_TEST_TRANSFORMER) -e ''") +# Normalize stestr test results +USE_STESTR = $(filter library/python/stestr-$(subst .,,$(PYTHON_VERSION)), $(REQUIRED_PACKAGES) $(TEST_REQUIRED_PACKAGES)) +COMPONENT_TEST_TRANSFORMS += \ + $(if $(strip $(USE_STESTR)),"| ( \ + $(GSED) -e '0,/^{[0-9]\{1,\}}/{//i\'\$$'\\\n{0}\\\n}' \ + -e 's/^\(Ran: [0-9]\{1,\} tests\{0,1\}\) in .*\$$/\1/' \ + -e '/^Sum of execute time for each test/d' \ + -e '/^ - Worker /d' \ + ) | ( \ + $(GSED) -u -e '/^{0}\$$/Q' ; \ + $(GSED) -u -e 's/^{[0-9]\{1,\}} //' \ + -e 's/\[[.0-9]\{1,\}s\] \.\.\./.../' \ + -e '/^\$$/Q' | $(SORT) | $(GSED) -e '\$$a\'\$$'\\\n\\\n' ; \ + $(CAT) \ + ) | $(COMPONENT_TEST_TRANSFORMER) -e ''") + # Normalize setup.py test results. The setup.py testing could be used either # directly or via tox so add these transforms for all test styles # unconditionally. -- Gitblit v1.9.3