On 07/31/2018 08:42 AM, Brian Dolbec wrote:
> On Sun, 15 Jul 2018 16:02:03 -0700
> Zac Medico <zmed...@gentoo.org> wrote:
> 
>> For the empty profile that's used to check dependencies of
>> ebuilds that have empty KEYWORDS, populate implicit IUSE
>> from all of the make.defaults files found in the relevant
>> repositories (this should take less than 1 second on most
>> hardware). Since the IUSE.missing check cannot be performed
>> without implicit IUSE settings, this makes the IUSE.missing
>> check work for ebuilds with empty KEYWORDS.
>>
>> Bug: https://bugs.gentoo.org/660982
>> ---
>>  pym/portage/dbapi/__init__.py                      | 10 +++-----
>>  repoman/pym/repoman/modules/scan/depend/profile.py | 30
>> +++++++++++++++++++++- 2 files changed, 32 insertions(+), 8
>> deletions(-)
>>
>> diff --git a/pym/portage/dbapi/__init__.py
>> b/pym/portage/dbapi/__init__.py index 61d301839..6fca6090c 100644
>> --- a/pym/portage/dbapi/__init__.py
>> +++ b/pym/portage/dbapi/__init__.py
>> @@ -219,17 +219,13 @@ class dbapi(object):
>>      def _repoman_iuse_implicit_cnstr(self, pkg, metadata):
>>              """
>>              In repoman's version of _iuse_implicit_cnstr,
>> account for modifications
>> -            of the self.settings reference between calls, and
>> treat all flags as
>> -            valid for the empty profile because it does not have
>> any implicit IUSE
>> -            settings. See bug 660982.
>> +            of the self.settings reference between calls.
>>              """
>>              eapi_attrs = _get_eapi_attrs(metadata["EAPI"])
>>              if eapi_attrs.iuse_effective:
>> -                    iuse_implicit_match = lambda flag: (True if
>> not self.settings.profile_path
>> -                            else
>> self.settings._iuse_effective_match(flag))
>> +                    iuse_implicit_match = lambda flag:
>> self.settings._iuse_effective_match(flag) else:
>> -                    iuse_implicit_match = lambda flag: (True if
>> not self.settings.profile_path
>> -                            else
>> self.settings._iuse_implicit_match(flag))
>> +                    iuse_implicit_match = lambda flag:
>> self.settings._iuse_implicit_match(flag) return iuse_implicit_match
>>  
>>      def _iuse_implicit_cnstr(self, pkg, metadata):
>> diff --git a/repoman/pym/repoman/modules/scan/depend/profile.py
>> b/repoman/pym/repoman/modules/scan/depend/profile.py index
>> 8e0a22f9c..233ed8e4b 100644 ---
>> a/repoman/pym/repoman/modules/scan/depend/profile.py +++
>> b/repoman/pym/repoman/modules/scan/depend/profile.py @@ -2,6 +2,7 @@
>>  
>>  
>>  import copy
>> +import os
>>  from pprint import pformat
>>  
>>  from _emerge.Package import Package
>> @@ -12,7 +13,8 @@ from repoman.modules.scan.scanbase import ScanBase
>>  from repoman.modules.scan.depend._depend_checks import _depend_checks
>>  from repoman.modules.scan.depend._gen_arches import _gen_arches
>>  from portage.dep import Atom
>> -
>> +from portage.package.ebuild.profile_iuse import iter_iuse_vars
>> +from portage.util import getconfig
>>  
>>  def sort_key(item):
>>      return item[2].sub_path
>> @@ -102,6 +104,10 @@ class ProfileDependsChecks(ScanBase):
>>                                      local_config=False,
>>                                      
>> _unmatched_removal=self.options.unmatched_removal,
>>                                      env=self.env,
>> repositories=self.repo_settings.repoman_settings.repositories) +
>> +                            if not prof.abs_path:
>> +
>> self._populate_implicit_iuse(dep_settings) +
>>                              dep_settings.categories =
>> self.repo_settings.repoman_settings.categories if
>> self.options.without_mask: dep_settings._mask_manager_obj = \
>> @@ -257,3 +263,25 @@ class ProfileDependsChecks(ScanBase):
>>      def runInEbuilds(self):
>>              '''Ebuild level scans'''
>>              return (True, [self.check])
>> +
>> +    @staticmethod
>> +    def _populate_implicit_iuse(config):
>> +            """
>> +            Populate implicit IUSE for the empty profile, see
>> bug 660982.
>> +            """
>> +            dest = config.configdict['defaults']
>> +            for repo in config.repositories:
>> +                    for parent_dir, dirs, files in
>> os.walk(os.path.join(repo.location, 'profiles')):
>> +                            src =
>> getconfig(os.path.join(parent_dir, 'make.defaults'))
>> +                            if not src:
>> +                                    continue
>> +                            for k, v in iter_iuse_vars(src):
>> +                                    v_before = dest.get(k)
>> +                                    if v_before is not None:
>> +                                            merged_values =
>> set(v_before.split())
>> +
>> merged_values.update(v.split())
>> +                                            v = '
>> '.join(sorted(merged_values))
>> +                                    dest[k] = v
>> +
>> +            config.regenerate()
>> +            config._init_iuse()
> looks good
> 

Thanks, merged:

https://gitweb.gentoo.org/proj/portage.git/commit/?id=ef604f402a93234a4b6e3ef433678c8fa04c746b
-- 
Thanks,
Zac

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to