Make sure atoms in profiles follow the profiles EAPI
authorSebastian Luther <SebastianLuther@gmx.de>
Mon, 13 Sep 2010 07:25:55 +0000 (09:25 +0200)
committerZac Medico <zmedico@gentoo.org>
Mon, 13 Sep 2010 08:03:09 +0000 (01:03 -0700)
bin/repoman
pym/portage/_sets/profiles.py
pym/portage/package/ebuild/_config/LicenseManager.py
pym/portage/package/ebuild/_config/MaskManager.py
pym/portage/package/ebuild/_config/UseManager.py
pym/portage/package/ebuild/config.py
pym/portage/util/__init__.py

index 92b01ec2ea3fe0ddda9c137bb17459ed2ea95a9d..70e7cdaf24acec3243ebe68e22f18a29d7f94b3b 100755 (executable)
@@ -672,7 +672,7 @@ for path in portdb.porttrees:
                                        uselist.add(use_prefix + x[0])
 
        global_pmasklines.append(portage.util.grabfile_package(
-               os.path.join(path, 'profiles', 'package.mask'), recursive=1))
+               os.path.join(path, 'profiles', 'package.mask'), recursive=1, verify_eapi=True))
 
        desc_path = os.path.join(path, 'profiles', 'profiles.desc')
        try:
index e47f08db3c4f0d67996b69bde60cfc2f9751bb5c..39a29681499a5b75b721d75b8484fdafb5e2c69d 100644 (file)
@@ -33,7 +33,7 @@ class PackagesSystemSet(PackageSet):
                        writemsg_level("\nPackagesSystemSet: profile paths: %s\n" % \
                                (self._profile_paths,), level=logging.DEBUG, noiselevel=-1)
 
-               mylist = [grabfile_package(os.path.join(x, "packages")) for x in self._profile_paths]
+               mylist = [grabfile_package(os.path.join(x, "packages"), verify_eapi=True) for x in self._profile_paths]
 
                if debug:
                        writemsg_level("\nPackagesSystemSet: raw packages: %s\n" % \
index e092e411f9e9478baf56b0cf14cc6537f04d096f..627b03fa98d8f34b54872d742fb2ae92eeb3d645 100644 (file)
@@ -35,7 +35,7 @@ class LicenseManager(object):
 
        def _read_user_config(self, abs_user_config):
                licdict = grabdict_package(os.path.join(
-                       abs_user_config, "package.license"), recursive=1, allow_wildcard=True)
+                       abs_user_config, "package.license"), recursive=1, allow_wildcard=True, verify_eapi=False)
                for k, v in licdict.items():
                        self._plicensedict.setdefault(k.cp, {})[k] = \
                                self.expandLicenseTokens(v)
index d8f06be6ead41b41484bd2da739a47b3483eb6e2..34cc6ec26be0b58b2897e8a6714f5500c830f272 100644 (file)
@@ -25,10 +25,10 @@ class MaskManager(object):
                repo_pkgunmasklines = []
                for x in repo_profiles:
                        repo_pkgmasklines.append(stack_lists([grabfile_package(
-                               os.path.join(x, "package.mask"), recursive=1, remember_source_file=True)], \
+                               os.path.join(x, "package.mask"), recursive=1, remember_source_file=True, verify_eapi=True)], \
                                        incremental=1, remember_source_file=True, warn_for_unmatched_removal=True))
                        repo_pkgunmasklines.append(stack_lists([grabfile_package(
-                               os.path.join(x, "package.unmask"), recursive=1, remember_source_file=True)], \
+                               os.path.join(x, "package.unmask"), recursive=1, remember_source_file=True, verify_eapi=True)], \
                                incremental=1, remember_source_file=True, warn_for_unmatched_removal=True))
                repo_pkgmasklines = list(chain.from_iterable(repo_pkgmasklines))
                repo_pkgunmasklines = list(chain.from_iterable(repo_pkgunmasklines))
@@ -39,9 +39,9 @@ class MaskManager(object):
                profile_pkgunmasklines = []
                for x in profiles:
                        profile_pkgmasklines.append(grabfile_package(
-                               os.path.join(x, "package.mask"), recursive=1, remember_source_file=True))
+                               os.path.join(x, "package.mask"), recursive=1, remember_source_file=True, verify_eapi=True))
                        profile_pkgunmasklines.append(grabfile_package(
-                               os.path.join(x, "package.unmask"), recursive=1, remember_source_file=True))
+                               os.path.join(x, "package.unmask"), recursive=1, remember_source_file=True, verify_eapi=True))
                profile_pkgmasklines = stack_lists(profile_pkgmasklines, incremental=1, \
                        remember_source_file=True, warn_for_unmatched_removal=True)
                profile_pkgunmasklines = stack_lists(profile_pkgunmasklines, incremental=1, \
@@ -54,10 +54,10 @@ class MaskManager(object):
                if user_config:
                        user_pkgmasklines = grabfile_package(
                                os.path.join(abs_user_config, "package.mask"), recursive=1, \
-                               allow_wildcard=True, remember_source_file=True)
+                               allow_wildcard=True, remember_source_file=True, verify_eapi=False)
                        user_pkgunmasklines = grabfile_package(
                                os.path.join(abs_user_config, "package.unmask"), recursive=1, \
-                               allow_wildcard=True, remember_source_file=True)
+                               allow_wildcard=True, remember_source_file=True, verify_eapi=False)
 
                #Stack everything together. At this point, only user_pkgmasklines may contain -atoms.
                #Don't warn for unmatched -atoms here, since we don't do it for any other user config file.
index 9a3038bdac257fafd6ee4ea6b7c5814d6fe25c6d..8b3e44b380558fb6785c805aa75973b50c8760f7 100644 (file)
@@ -52,7 +52,7 @@ class UseManager(object):
                ret = ExtendedAtomDict(dict)
                if user_config:
                        pusedict = grabdict_package(
-                               os.path.join(location, file_name), recursive=1, allow_wildcard=True)
+                               os.path.join(location, file_name), recursive=1, allow_wildcard=True, verify_eapi=False)
                        for k, v in pusedict.items():
                                ret.setdefault(k.cp, {})[k] = v
 
@@ -66,7 +66,7 @@ class UseManager(object):
        def _parse_profile_files_to_dict(self, file_name, locations, juststrings=False):
                ret = []
                raw = [grabdict_package(os.path.join(x, file_name),
-                       juststrings=juststrings, recursive=1) for x in locations]
+                       juststrings=juststrings, recursive=1, verify_eapi=True) for x in locations]
                for rawdict in raw:
                        cpdict = {}
                        for k, v in rawdict.items():
index 2073f7fe602395aa1541a244babb0ed93a85fb65..fe2cc5497132216d1e51046d04e210f2da3afb2d 100644 (file)
@@ -343,7 +343,7 @@ class config(object):
                        self.configlist.append({})
                        self.configdict["pkginternal"] = self.configlist[-1]
 
-                       self.packages_list = [grabfile_package(os.path.join(x, "packages")) for x in self.profiles]
+                       self.packages_list = [grabfile_package(os.path.join(x, "packages"), verify_eapi=True) for x in self.profiles]
                        self.packages      = tuple(stack_lists(self.packages_list, incremental=1))
                        del self.packages_list
                        #self.packages = grab_stacked("packages", self.profiles, grabfile, incremental_lines=1)
@@ -358,7 +358,7 @@ class config(object):
 
                        self._pkeywords_list = []
                        rawpkeywords = [grabdict_package(
-                               os.path.join(x, "package.keywords"), recursive=1) \
+                               os.path.join(x, "package.keywords"), recursive=1, verify_eapi=True) \
                                for x in self.profiles]
                        for pkeyworddict in rawpkeywords:
                                if not pkeyworddict:
@@ -376,7 +376,7 @@ class config(object):
 
                        self._p_accept_keywords = []
                        raw_p_accept_keywords = [grabdict_package(
-                               os.path.join(x, "package.accept_keywords"), recursive=1) \
+                               os.path.join(x, "package.accept_keywords"), recursive=1, verify_eapi=True) \
                                for x in self.profiles]
                        for d in raw_p_accept_keywords:
                                if not d:
@@ -580,11 +580,11 @@ class config(object):
                                # package.accept_keywords and package.keywords
                                pkgdict = grabdict_package(
                                        os.path.join(abs_user_config, "package.keywords"),
-                                       recursive=1, allow_wildcard=True)
+                                       recursive=1, allow_wildcard=True, verify_eapi=False)
 
                                for k, v in grabdict_package(
                                        os.path.join(abs_user_config, "package.accept_keywords"),
-                                       recursive=1, allow_wildcard=True).items():
+                                       recursive=1, allow_wildcard=True, verify_eapi=False).items():
                                        pkgdict.setdefault(k, []).extend(v)
 
                                accept_keywords_defaults = \
@@ -599,7 +599,7 @@ class config(object):
 
                                #package.properties
                                propdict = grabdict_package(os.path.join(
-                                       abs_user_config, "package.properties"), recursive=1, allow_wildcard=True)
+                                       abs_user_config, "package.properties"), recursive=1, allow_wildcard=True, verify_eapi=False)
                                v = propdict.pop("*/*", None)
                                if v is not None:
                                        if "ACCEPT_PROPERTIES" in self.configdict["conf"]:
@@ -611,7 +611,7 @@ class config(object):
 
                                #package.env
                                penvdict = grabdict_package(os.path.join(
-                                       abs_user_config, "package.env"), recursive=1, allow_wildcard=True)
+                                       abs_user_config, "package.env"), recursive=1, allow_wildcard=True, verify_eapi=False)
                                v = penvdict.pop("*/*", None)
                                if v is not None:
                                        global_wildcard_conf = {}
index d5c87c09d183e81babfa52cbcfb269261d7a1e1c..6000685073929031227fed29a1efe574da924c4a 100644 (file)
@@ -309,26 +309,57 @@ def grabdict(myfilename, juststrings=0, empty=0, recursive=0, incremental=1):
                        newdict[k] = " ".join(v)
        return newdict
 
-def grabdict_package(myfilename, juststrings=0, recursive=0, allow_wildcard=False):
+def read_corresponding_eapi_file(filename):
+       """
+       Read the 'eapi' file from the directory 'filename' is in.
+       Returns "0" if the file is not present or invalid.
+       """
+       default = "0"
+       eapi_file = os.path.join(os.path.dirname(filename), "eapi")
+       try:
+               f = open(eapi_file, "r")
+               lines = f.readlines()
+               if len(lines) == 1:
+                       eapi = lines[0]
+               else:
+                       writemsg(_("--- Invalid 'eapi' file (doesn't contain exactly one line): %s\n") % (eapi_file),
+                               noiselevel=-1)
+                       eapi = default
+               f.close()
+       except IOError:
+               eapi = default
+
+       return eapi
+
+def grabdict_package(myfilename, juststrings=0, recursive=0, allow_wildcard=False, verify_eapi=False):
        """ Does the same thing as grabdict except it validates keys
            with isvalidatom()"""
        pkgs=grabdict(myfilename, juststrings, empty=1, recursive=recursive)
+       eapi = None
+       if verify_eapi:
+               eapi = read_corresponding_eapi_file(myfilename)
+
        # We need to call keys() here in order to avoid the possibility of
        # "RuntimeError: dictionary changed size during iteration"
        # when an invalid atom is deleted.
        atoms = {}
        for k, v in pkgs.items():
                try:
-                       k = Atom(k, allow_wildcard=allow_wildcard)
-               except InvalidAtom:
-                       writemsg(_("--- Invalid atom in %s: %s\n") % (myfilename, k),
+                       k = Atom(k, allow_wildcard=allow_wildcard, eapi=eapi)
+               except InvalidAtom as e:
+                       writemsg(_("--- Invalid atom in %s: %s\n") % (myfilename, e),
                                noiselevel=-1)
                else:
                        atoms[k] = v
        return atoms
 
-def grabfile_package(myfilename, compatlevel=0, recursive=0, allow_wildcard=False, remember_source_file=False):
+def grabfile_package(myfilename, compatlevel=0, recursive=0, allow_wildcard=False, \
+       remember_source_file=False, verify_eapi=False):
+
        pkgs=grabfile(myfilename, compatlevel, recursive=recursive, remember_source_file=True)
+       eapi = None
+       if verify_eapi:
+               eapi = read_corresponding_eapi_file(myfilename)
        mybasename = os.path.basename(myfilename)
        atoms = []
        for pkg, source_file in pkgs:
@@ -339,9 +370,9 @@ def grabfile_package(myfilename, compatlevel=0, recursive=0, allow_wildcard=Fals
                if pkg[:1] == '*' and mybasename == 'packages':
                        pkg = pkg[1:]
                try:
-                       pkg = Atom(pkg, allow_wildcard=allow_wildcard)
-               except InvalidAtom:
-                       writemsg(_("--- Invalid atom in %s: %s\n") % (myfilename, pkg),
+                       pkg = Atom(pkg, allow_wildcard=allow_wildcard, eapi=eapi)
+               except InvalidAtom as e:
+                       writemsg(_("--- Invalid atom in %s: %s\n") % (myfilename, e),
                                noiselevel=-1)
                else:
                        if pkg_orig == str(pkg):