From 821f5aaaea60a562effc03f57806e38b8893c422 Mon Sep 17 00:00:00 2001 From: Zac Medico <zmedico@gentoo.org> Date: Thu, 30 Apr 2009 07:31:39 +0000 Subject: [PATCH] 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. (trunk r13417) svn path=/main/branches/2.1.6/; revision=13557 --- pym/portage/__init__.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py index 3fe6f1ca0..785498e75 100644 --- a/pym/portage/__init__.py +++ b/pym/portage/__init__.py @@ -2063,6 +2063,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 @@ -2278,6 +2303,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: -- 2.26.2