summaryrefslogtreecommitdiff
path: root/eclass
diff options
context:
space:
mode:
authorV3n3RiX <venerix@koprulu.sector>2023-11-07 10:17:51 +0000
committerV3n3RiX <venerix@koprulu.sector>2023-11-07 10:17:51 +0000
commite0fac29676c44b996e61c06f8d5c92288e46966b (patch)
treebe619e692a42f1a90900cca21b19a2ec88404f8d /eclass
parent639971d0c3ee4eef36854ab7d9729b6e8c3ac1cb (diff)
gentoo auto-resync : 07:11:2023 - 10:17:51
Diffstat (limited to 'eclass')
-rw-r--r--eclass/Manifest.gzbin38800 -> 38807 bytes
-rw-r--r--eclass/distutils-r1.eclass32
-rw-r--r--eclass/python-utils-r1.eclass31
3 files changed, 48 insertions, 15 deletions
diff --git a/eclass/Manifest.gz b/eclass/Manifest.gz
index 1a69a031c4cb..e1736b48238d 100644
--- a/eclass/Manifest.gz
+++ b/eclass/Manifest.gz
Binary files differ
diff --git a/eclass/distutils-r1.eclass b/eclass/distutils-r1.eclass
index 1cc91110dccf..3d756eaad556 100644
--- a/eclass/distutils-r1.eclass
+++ b/eclass/distutils-r1.eclass
@@ -608,18 +608,28 @@ distutils_enable_tests() {
esac
[[ ${#} -eq 1 ]] || die "${FUNCNAME} takes exactly one argument: test-runner"
- local test_pkg
+
+ local test_deps=${RDEPEND}
+ local test_pkgs
case ${1} in
nose)
- test_pkg=">=dev-python/nose-1.3.7_p20221026"
+ test_pkgs='>=dev-python/nose-1.3.7_p20221026[${PYTHON_USEDEP}]'
;;
pytest)
- test_pkg=">=dev-python/pytest-7.3.1"
+ test_pkgs='>=dev-python/pytest-7.3.1[${PYTHON_USEDEP}]'
+ if [[ ${EPYTEST_XDIST} ]]; then
+ test_pkgs+=' dev-python/pytest-xdist[${PYTHON_USEDEP}]'
+ fi
;;
setup.py)
;;
unittest)
- # dep handled below
+ # unittest-or-fail is needed in py<3.12
+ test_deps+="
+ $(python_gen_cond_dep '
+ dev-python/unittest-or-fail[${PYTHON_USEDEP}]
+ ' 3.10 3.11)
+ "
;;
*)
die "${FUNCNAME}: unsupported argument: ${1}"
@@ -628,22 +638,14 @@ distutils_enable_tests() {
_DISTUTILS_TEST_RUNNER=${1}
python_test() { distutils-r1_python_test; }
- local test_deps=${RDEPEND}
- if [[ -n ${test_pkg} ]]; then
+ if [[ -n ${test_pkgs} ]]; then
if [[ ! ${DISTUTILS_SINGLE_IMPL} ]]; then
- test_deps+=" ${test_pkg}[${PYTHON_USEDEP}]"
+ test_deps+=" ${test_pkgs//'${PYTHON_USEDEP}'/${PYTHON_USEDEP}}"
else
test_deps+=" $(python_gen_cond_dep "
- ${test_pkg}[\${PYTHON_USEDEP}]
+ ${test_pkgs}
")"
fi
- elif [[ ${1} == unittest ]]; then
- # unittest-or-fail is needed in py<3.12
- test_deps+="
- $(python_gen_cond_dep '
- dev-python/unittest-or-fail[${PYTHON_USEDEP}]
- ' 3.{9..11})
- "
fi
if [[ -n ${test_deps} ]]; then
IUSE+=" test"
diff --git a/eclass/python-utils-r1.eclass b/eclass/python-utils-r1.eclass
index 4a538f9942f6..80abe974f9df 100644
--- a/eclass/python-utils-r1.eclass
+++ b/eclass/python-utils-r1.eclass
@@ -1307,6 +1307,21 @@ _python_check_occluded_packages() {
# parameter, when calling epytest. The listed files will be entirely
# skipped from test collection.
+# @ECLASS_VARIABLE: EPYTEST_XDIST
+# @DEFAULT_UNSET
+# @DESCRIPTION:
+# If set to a non-empty value, enables running tests in parallel
+# via pytest-xdist plugin. If this variable is set prior to calling
+# distutils_enable_tests in distutils-r1, a test dependency
+# on dev-python/pytest-xdist is added automatically.
+
+# @ECLASS_VARIABLE: EPYTEST_JOBS
+# @USER_VARIABLE
+# @DEFAULT_UNSET
+# @DESCRIPTION:
+# Specifies the number of jobs for parallel (pytest-xdist) test runs.
+# When unset, defaults to -j from MAKEOPTS, or the current nproc.
+
# @FUNCTION: epytest
# @USAGE: [<args>...]
# @DESCRIPTION:
@@ -1371,6 +1386,22 @@ epytest() {
-p no:plus
-p no:tavern
)
+
+ if [[ ${EPYTEST_XDIST} ]]; then
+ local jobs=${EPYTEST_JOBS:-$(makeopts_jobs)}
+ if [[ ${jobs} -gt 1 ]]; then
+ args+=(
+ # explicitly enable the plugin, in case the ebuild was using
+ # PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
+ -p xdist
+ -n "${jobs}"
+ # worksteal ensures that workers don't end up idle when heavy
+ # jobs are unevenly distributed
+ --dist=worksteal
+ )
+ fi
+ fi
+
local x
for x in "${EPYTEST_DESELECT[@]}"; do
args+=( --deselect "${x}" )