diff options
author | Zac Medico <zmedico@gentoo.org> | 2009-04-30 05:21:22 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2009-04-30 05:21:22 +0000 |
commit | 3251210e410c851a7f31579089969a5df7995777 (patch) | |
tree | 4d59e916f0ecc26cc03465580e700f9dd2301830 | |
parent | 0aa668e28b30904b0664f0f9dd1a737ce5da3575 (diff) | |
download | portage-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__.py | 28 |
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: |