summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2009-04-30 05:21:22 +0000
committerZac Medico <zmedico@gentoo.org>2009-04-30 05:21:22 +0000
commit3251210e410c851a7f31579089969a5df7995777 (patch)
tree4d59e916f0ecc26cc03465580e700f9dd2301830
parent0aa668e28b30904b0664f0f9dd1a737ce5da3575 (diff)
downloadportage-3251210e410c851a7f31579089969a5df7995777.tar.gz
portage-3251210e410c851a7f31579089969a5df7995777.tar.bz2
portage-3251210e410c851a7f31579089969a5df7995777.zip
Generate a pruned version of ACCEPT_LICENSE, by intersection with
LICENSE. This is required since otherwise ACCEPT_LICENSE might be too big (bigger than ARG_MAX), causing execve() calls to fail with E2BIG errors as in bug #262647. svn path=/main/trunk/; revision=13417
-rw-r--r--pym/portage/__init__.py28
1 files changed, 28 insertions, 0 deletions
diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py
index 7e7ff8139..43a3dfad8 100644
--- a/pym/portage/__init__.py
+++ b/pym/portage/__init__.py
@@ -2073,6 +2073,31 @@ class config(object):
DeprecationWarning)
return 1
+ class _lazy_accept_license(object):
+ """
+ Generate a pruned version of ACCEPT_LICENSE, by intersection with
+ LICENSE. This is required since otherwise ACCEPT_LICENSE might be too
+ big (bigger than ARG_MAX), causing execve() calls to fail with E2BIG
+ errors as in bug #262647.
+ """
+ __slots__ = ('settings',)
+
+ def __init__(self, settings):
+ self.settings = settings
+
+ def __call__(self):
+ settings = self.settings
+ try:
+ licenses = set(flatten(
+ dep.use_reduce(dep.paren_reduce(
+ settings['LICENSE']),
+ uselist=settings['PORTAGE_USE'].split())))
+ except exception.InvalidDependString:
+ licenses = set()
+ if '*' not in settings._accept_license:
+ licenses.intersection_update(settings._accept_license)
+ return ' '.join(sorted(licenses))
+
class _lazy_use_expand(object):
"""
Lazily evaluate USE_EXPAND variables since they are only needed when
@@ -2288,6 +2313,9 @@ class config(object):
if has_changed:
self.reset(keeping_pkg=1,use_cache=use_cache)
+ env_configdict.addLazySingleton('ACCEPT_LICENSE',
+ self._lazy_accept_license(self))
+
# If reset() has not been called, it's safe to return
# early if IUSE has not changed.
if not has_changed and previous_iuse == iuse: