commit:     06086354fdd66fdf84c812f4be1757cb96e16c45
Author:     Ulrich Müller <ulm <AT> gentoo <DOT> org>
AuthorDate: Sat Mar  9 08:16:17 2019 +0000
Commit:     Ulrich Müller <ulm <AT> gentoo <DOT> org>
CommitDate: Tue Mar 19 01:18:37 2019 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=06086354

__dyn_test: Make fallback to WORKDIR conditional.

When the fallback from S to WORKDIR was made conditional in EAPI 4,
src_test() was originally omitted. This has been fixed retroactively
in PMS:
https://gitweb.gentoo.org/proj/pms.git/commit/?id=0038f90a942f0856ae2533b26f709002a3ec80ae

There should be no issues with backwards compatibility of existing
ebuilds. The feature is not used in the Gentoo repository. Plus, the
scenario is very unlikely, because in src_test the fallback to WORKDIR
could only happen for an ebuild that:
- Has no files in A to be unpacked.
- Doesn't define any of the unpack, prepare, configure, compile or
  install phases (otherwise it would die in one of these phases).

Acked-by: Zac Medico <zmedico <AT> gentoo.org>
Signed-off-by: Ulrich Müller <ulm <AT> gentoo.org>

 bin/phase-functions.sh | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/bin/phase-functions.sh b/bin/phase-functions.sh
index d8ebf3d3e..ee07ea0f9 100644
--- a/bin/phase-functions.sh
+++ b/bin/phase-functions.sh
@@ -1,5 +1,5 @@
 #!/bin/bash
-# Copyright 1999-2018 Gentoo Foundation
+# Copyright 1999-2019 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 # Hardcoded bash lists are needed for backward compatibility with
@@ -358,7 +358,7 @@ __abort_install() {
 
 __has_phase_defined_up_to() {
        local phase
-       for phase in unpack prepare configure compile install; do
+       for phase in unpack prepare configure compile test install; do
                has ${phase} ${DEFINED_PHASES} && return 0
                [[ ${phase} == $1 ]] && return 1
        done
@@ -495,10 +495,14 @@ __dyn_test() {
        trap "__abort_test" SIGINT SIGQUIT
        __start_distcc
 
-       if [ -d "${S}" ]; then
+       if [[ -d ${S} ]]; then
                cd "${S}"
-       else
+       elif ___eapi_has_S_WORKDIR_fallback; then
+               cd "${WORKDIR}"
+       elif [[ -z ${A} ]] && ! __has_phase_defined_up_to test; then
                cd "${WORKDIR}"
+       else
+               die "The source directory '${S}' doesn't exist"
        fi
 
        if has test ${RESTRICT} ; then

Reply via email to