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