On 02/04/2018 05:40 AM, Michał Górny wrote:
> Ensure that all USE_EXPAND variables are always exported with filtered
> USE flags inside, even if none of those flags are declared in IUSE.
> This is the behavior required for EAPI 5+ by the PMS.
> 
> Since the behavior for earlier EAPIs is left undefined and having
> different behavior would be confusing to users, apply it in earlier
> EAPIs as well.
> ---
>  bin/ebuild.sh                        |  6 ----
>  pym/portage/package/ebuild/config.py | 55 
> ++----------------------------------
>  2 files changed, 3 insertions(+), 58 deletions(-)
> 
> diff --git a/bin/ebuild.sh b/bin/ebuild.sh
> index 94a44d534..a914384d6 100755
> --- a/bin/ebuild.sh
> +++ b/bin/ebuild.sh
> @@ -704,12 +704,6 @@ if ! has "$EBUILD_PHASE" clean cleanrm ; then
>       fi
>  fi
>  
> -# unset USE_EXPAND variables that contain only the special "*" token
> -for x in ${USE_EXPAND} ; do
> -     [ "${!x}" == "*" ] && unset ${x}
> -done
> -unset x
> -
>  if has nostrip ${FEATURES} ${RESTRICT} || has strip ${RESTRICT}
>  then
>       export DEBUGBUILD=1
> diff --git a/pym/portage/package/ebuild/config.py 
> b/pym/portage/package/ebuild/config.py
> index 35cf4f614..739896923 100644
> --- a/pym/portage/package/ebuild/config.py
> +++ b/pym/portage/package/ebuild/config.py
> @@ -1359,47 +1359,7 @@ class config(object):
>                                       filtered_var_split.append(x)
>                       var_split = filtered_var_split
>  
> -                     if var_split:
> -                             value = ' '.join(var_split)
> -                     else:
> -                             # Don't export empty USE_EXPAND vars unless the 
> user config
> -                             # exports them as empty.  This is required for 
> vars such as
> -                             # LINGUAS, where unset and empty have different 
> meanings.
> -                             # The special '*' token is understood by 
> ebuild.sh, which
> -                             # will unset the variable so that things like 
> LINGUAS work
> -                             # properly (see bug #459350).
> -                             if has_wildcard:
> -                                     value = '*'
> -                             else:
> -                                     if has_iuse:
> -                                             already_set = False
> -                                             # Skip the first 'env' 
> configdict, in order to
> -                                             # avoid infinite recursion 
> here, since that dict's
> -                                             # __getitem__ calls the current 
> __getitem__.
> -                                             for d in 
> self._settings.lookuplist[1:]:
> -                                                     if key in d:
> -                                                             already_set = 
> True
> -                                                             break
> -
> -                                             if not already_set:
> -                                                     for x in 
> self._unfiltered_use:
> -                                                             if 
> x[:prefix_len] == prefix:
> -                                                                     
> already_set = True
> -                                                                     break
> -
> -                                             if already_set:
> -                                                     value = ''
> -                                             else:
> -                                                     value = '*'
> -                                     else:
> -                                             # It's not in IUSE, so just 
> allow the variable content
> -                                             # to pass through if it is 
> defined somewhere.  This
> -                                             # allows packages that support 
> LINGUAS but don't
> -                                             # declare it in IUSE to use the 
> variable outside of the
> -                                             # USE_EXPAND context.
> -                                             value = None
> -
> -                     return value
> +                     return ' '.join(var_split)
>  
>       def _setcpv_recursion_gate(f):
>               """
> @@ -1775,7 +1735,7 @@ class config(object):
>                       self, unfiltered_use, use, self.usemask,
>                       portage_iuse, use_expand_split, self._use_expand_dict)
>  
> -             use_expand_iuses = {}
> +             use_expand_iuses = dict((k, set()) for k in use_expand_split)
>               for x in portage_iuse:
>                       x_split = x.split('_')
>                       if len(x_split) == 1:
> @@ -1783,18 +1743,9 @@ class config(object):
>                       for i in range(len(x_split) - 1):
>                               k = '_'.join(x_split[:i+1])
>                               if k in use_expand_split:
> -                                     v = use_expand_iuses.get(k)
> -                                     if v is None:
> -                                             v = set()
> -                                             use_expand_iuses[k] = v
> -                                     v.add(x)
> +                                     v = use_expand_iuses[k].add(x)

This assignment to v is unnecessary, but otherwise both patches look good.
-- 
Thanks,
Zac

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to