* [gentoo-commits] proj/portage:master commit in: lib/portage/package/ebuild/_config/, bin/, lib/portage/package/ebuild/, man/, ...
@ 2021-05-19 8:06 Michał Górny
0 siblings, 0 replies; only message in thread
From: Michał Górny @ 2021-05-19 8:06 UTC (permalink / raw
To: gentoo-commits
commit: a88f4996a9c20a638c8bf9a42bcbbc28ce0cc8dc
Author: Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Wed May 12 15:53:15 2021 +0000
Commit: Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Wed May 19 08:06:38 2021 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=a88f4996
Implement PROPERTIES=test_network and ALLOW_TEST
The 'test_network' property can be used to indicate that the test phase
requires access to the Internet (but RESTRICT=test should still be
used). If present, network-sandbox will be disabled throughout the test
phase. This opens up the possibility of adding further 'test_*'
properties.
Additionally, ALLOW_TEST can be used to ignore RESTRICT=test in a subset
of packages. When the value includes 'network' token, tests using
'test_network' property are reenabled. When the value includes 'all'
token, all instances of RESTRICT=test are ignored.
Bug: https://bugs.gentoo.org/553696
Reviewed-by: Zac Medico <zmedico <AT> gentoo.org>
Acked-by: Ulrich Müller <ulm <AT> gentoo.org>
Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>
bin/ebuild.sh | 3 ++-
bin/phase-functions.sh | 8 +++++---
lib/portage/const.py | 2 +-
.../package/ebuild/_config/special_env_vars.py | 3 ++-
lib/portage/package/ebuild/config.py | 22 ++++++++++++++++++----
lib/portage/package/ebuild/doebuild.py | 15 +++++++++------
man/make.conf.5 | 21 ++++++++++++++++++++-
7 files changed, 57 insertions(+), 17 deletions(-)
diff --git a/bin/ebuild.sh b/bin/ebuild.sh
index ed0218787..bf070080d 100755
--- a/bin/ebuild.sh
+++ b/bin/ebuild.sh
@@ -1,5 +1,5 @@
#!/bin/bash
-# Copyright 1999-2018 Gentoo Foundation
+# Copyright 1999-2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
# Prevent aliases from causing portage to act inappropriately.
@@ -647,6 +647,7 @@ if ! has "$EBUILD_PHASE" clean cleanrm ; then
fi
if [[ "${EBUILD_PHASE}" != "depend" ]] ; then
+ PROPERTIES=${PORTAGE_PROPERTIES}
RESTRICT=${PORTAGE_RESTRICT}
[[ -e $PORTAGE_BUILDDIR/.ebuild_changed ]] && \
rm "$PORTAGE_BUILDDIR/.ebuild_changed"
diff --git a/bin/phase-functions.sh b/bin/phase-functions.sh
index 90e622e75..db30fdefa 100644
--- a/bin/phase-functions.sh
+++ b/bin/phase-functions.sh
@@ -1,5 +1,5 @@
#!/bin/bash
-# Copyright 1999-2019 Gentoo Authors
+# Copyright 1999-2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
# Hardcoded bash lists are needed for backward compatibility with
@@ -23,7 +23,7 @@ PORTAGE_READONLY_VARS="D EBUILD EBUILD_PHASE EBUILD_PHASE_FUNC \
PORTAGE_ECLASS_LOCATIONS \
PORTAGE_GID PORTAGE_GRPNAME PORTAGE_INST_GID PORTAGE_INST_UID \
PORTAGE_INTERNAL_CALLER PORTAGE_IPC_DAEMON PORTAGE_IUSE PORTAGE_LOG_FILE \
- PORTAGE_MUTABLE_FILTERED_VARS PORTAGE_OVERRIDE_EPREFIX \
+ PORTAGE_MUTABLE_FILTERED_VARS PORTAGE_OVERRIDE_EPREFIX PORTAGE_PROPERTIES \
PORTAGE_PYM_PATH PORTAGE_PYTHON PORTAGE_PYTHONPATH \
PORTAGE_READONLY_METADATA PORTAGE_READONLY_VARS \
PORTAGE_REPO_NAME PORTAGE_REPOSITORIES PORTAGE_RESTRICT \
@@ -489,7 +489,9 @@ __dyn_test() {
die "The source directory '${S}' doesn't exist"
fi
- if has test ${RESTRICT} ; then
+ if has test ${RESTRICT} && ! has all ${ALLOW_TEST} &&
+ ! { has test_network ${PROPERTIES} && has network ${ALLOW_TEST}; }
+ then
einfo "Skipping make test/check due to ebuild restriction."
__vecho ">>> Test phase [disabled because of RESTRICT=test]: ${CATEGORY}/${PF}"
diff --git a/lib/portage/const.py b/lib/portage/const.py
index 7effcd85d..76fea8293 100644
--- a/lib/portage/const.py
+++ b/lib/portage/const.py
@@ -1,5 +1,5 @@
# portage: Constants
-# Copyright 1998-2019 Gentoo Authors
+# Copyright 1998-2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
import os
diff --git a/lib/portage/package/ebuild/_config/special_env_vars.py b/lib/portage/package/ebuild/_config/special_env_vars.py
index 8b65762ea..72fc31401 100644
--- a/lib/portage/package/ebuild/_config/special_env_vars.py
+++ b/lib/portage/package/ebuild/_config/special_env_vars.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2020 Gentoo Authors
+# Copyright 2010-2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
__all__ = (
@@ -68,6 +68,7 @@ environ_whitelist += [
"PORTAGE_INST_GID", "PORTAGE_INST_UID",
"PORTAGE_IPC_DAEMON", "PORTAGE_IUSE", "PORTAGE_ECLASS_LOCATIONS",
"PORTAGE_LOG_FILE", "PORTAGE_OVERRIDE_EPREFIX", "PORTAGE_PIPE_FD",
+ "PORTAGE_PROPERTIES",
"PORTAGE_PYM_PATH", "PORTAGE_PYTHON",
"PORTAGE_PYTHONPATH", "PORTAGE_QUIET",
"PORTAGE_REPO_NAME", "PORTAGE_REPOSITORIES", "PORTAGE_RESTRICT",
diff --git a/lib/portage/package/ebuild/config.py b/lib/portage/package/ebuild/config.py
index 0d0b51053..773135b3d 100644
--- a/lib/portage/package/ebuild/config.py
+++ b/lib/portage/package/ebuild/config.py
@@ -1359,12 +1359,13 @@ class config:
values['ACCEPT_LICENSE'] = settings._license_manager.get_prunned_accept_license( \
settings.mycpv, use, settings.get('LICENSE', ''), settings.get('SLOT'), settings.get('PORTAGE_REPO_NAME'))
- values['PORTAGE_RESTRICT'] = self._restrict(use, settings)
+ values['PORTAGE_PROPERTIES'] = self._flatten('PROPERTIES', use, settings)
+ values['PORTAGE_RESTRICT'] = self._flatten('RESTRICT', use, settings)
return values
- def _restrict(self, use, settings):
+ def _flatten(self, var, use, settings):
try:
- restrict = set(use_reduce(settings.get('RESTRICT', ''), uselist=use, flat=True))
+ restrict = set(use_reduce(settings.get(var, ''), uselist=use, flat=True))
except InvalidDependString:
restrict = set()
return ' '.join(sorted(restrict))
@@ -1713,17 +1714,25 @@ class config:
iuse_implicit_match = self._iuse_implicit_match
if pkg is None:
+ raw_properties = pkg_configdict.get("PROPERTIES")
raw_restrict = pkg_configdict.get("RESTRICT")
else:
+ raw_properties = pkg._raw_metadata["PROPERTIES"]
raw_restrict = pkg._raw_metadata["RESTRICT"]
restrict_test = False
if raw_restrict:
try:
if built_use is not None:
+ properties = use_reduce(raw_properties,
+ uselist=built_use, flat=True)
restrict = use_reduce(raw_restrict,
uselist=built_use, flat=True)
else:
+ properties = use_reduce(raw_properties,
+ uselist=frozenset(x for x in self['USE'].split()
+ if x in explicit_iuse or iuse_implicit_match(x)),
+ flat=True)
restrict = use_reduce(raw_restrict,
uselist=frozenset(x for x in self['USE'].split()
if x in explicit_iuse or iuse_implicit_match(x)),
@@ -1731,7 +1740,10 @@ class config:
except PortageException:
pass
else:
- restrict_test = "test" in restrict
+ allow_test = self.get('ALLOW_TEST', '').split()
+ restrict_test = (
+ "test" in restrict and not "all" in allow_test and
+ not ("test_network" in properties and "network" in allow_test))
if restrict_test and "test" in self.features:
# Handle it like IUSE="-test", since features USE is
@@ -1754,6 +1766,8 @@ class config:
lazy_vars = self._lazy_vars(built_use, self)
env_configdict.addLazySingleton('ACCEPT_LICENSE',
lazy_vars.__getitem__, 'ACCEPT_LICENSE')
+ env_configdict.addLazySingleton('PORTAGE_PROPERTIES',
+ lazy_vars.__getitem__, 'PORTAGE_PROPERTIES')
env_configdict.addLazySingleton('PORTAGE_RESTRICT',
lazy_vars.__getitem__, 'PORTAGE_RESTRICT')
diff --git a/lib/portage/package/ebuild/doebuild.py b/lib/portage/package/ebuild/doebuild.py
index 476689d5e..86c1d40b4 100644
--- a/lib/portage/package/ebuild/doebuild.py
+++ b/lib/portage/package/ebuild/doebuild.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2020 Gentoo Authors
+# Copyright 2010-2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
__all__ = ['doebuild', 'doebuild_environment', 'spawn', 'spawnebuild']
@@ -142,11 +142,14 @@ def _doebuild_spawn(phase, settings, actionmap=None, **kwargs):
kwargs['ipc'] = 'ipc-sandbox' not in settings.features or \
phase in _ipc_phases
kwargs['mountns'] = 'mount-sandbox' in settings.features
- kwargs['networked'] = 'network-sandbox' not in settings.features or \
- (phase == 'unpack' and \
- 'live' in settings.configdict['pkg'].get('PROPERTIES', '').split()) or \
- phase in _ipc_phases or \
- 'network-sandbox' in settings['PORTAGE_RESTRICT'].split()
+ kwargs['networked'] = (
+ 'network-sandbox' not in settings.features or
+ (phase == 'unpack' and
+ 'live' in settings['PORTAGE_PROPERTIES'].split()) or
+ (phase == 'test' and
+ 'test_network' in settings['PORTAGE_PROPERTIES'].split()) or
+ phase in _ipc_phases or
+ 'network-sandbox' in settings['PORTAGE_RESTRICT'].split())
kwargs['pidns'] = ('pid-sandbox' in settings.features and
phase not in _global_pid_phases)
diff --git a/man/make.conf.5 b/man/make.conf.5
index 8d551c95e..badaea18e 100644
--- a/man/make.conf.5
+++ b/man/make.conf.5
@@ -1,4 +1,4 @@
-.TH "MAKE.CONF" "5" "Feb 2021" "Portage VERSION" "Portage"
+.TH "MAKE.CONF" "5" "May 2021" "Portage VERSION" "Portage"
.SH "NAME"
make.conf \- custom settings for Portage
.SH "SYNOPSIS"
@@ -1139,6 +1139,25 @@ settings from ebuilds. See also \fBebuild\fR(5).
Set this to cause portage to ignore any \fIQA_WX_LOAD\fR override
settings from ebuilds. See also \fBebuild\fR(5).
.TP
+\fBALLOW_TEST\fR = \fI[token]...\fR
+This variable can be used to select the kinds of additional tests to run,
+particularly overriding \fBRESTRICT\fR="\fBtest\fR". It contains
+a whitespace-separated list of tokens. The following tokens are currently
+recognized:
+.RS
+.TP
+.B all
+Run tests in all packages, even if they specify \fBRESTRICT\fR="\fBtest\fR".
+This option is certain to cause test failures, it is intended to be used
+by developers when testing specific packages.
+.TP
+.B network
+Run tests in packages specifying \fBPROPERTIES\fR="\fBtest_network\fR". Note
+that this will most likely cause Internet access during the test suite which
+could cause additional costs, privacy concerns and intermittent test failures.
+.TP
+.RE
+.TP
.B RESUMECOMMAND
This variable contains the command used for resuming package sources that
have been partially downloaded. It should be defined using the same format
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2021-05-19 8:06 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-05-19 8:06 [gentoo-commits] proj/portage:master commit in: lib/portage/package/ebuild/_config/, bin/, lib/portage/package/ebuild/, man/, Michał Górny
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox