read_corresponding_eapi_file: cache results
authorZac Medico <zmedico@gentoo.org>
Thu, 23 Aug 2012 16:55:19 +0000 (09:55 -0700)
committerZac Medico <zmedico@gentoo.org>
Thu, 23 Aug 2012 16:55:19 +0000 (09:55 -0700)
pym/portage/package/ebuild/config.py
pym/portage/util/__init__.py

index 2fa799f7e3d6f022691dd01c8c284cdae1ce59e7..81e05012e2c1d11de43d35268da1617f2a0c9499 100644 (file)
@@ -42,7 +42,7 @@ from portage.repository.config import load_repository_config
 from portage.util import ensure_dirs, getconfig, grabdict, \
        grabdict_package, grabfile, grabfile_package, LazyItemsDict, \
        normalize_path, shlex_split, stack_dictlist, stack_dicts, stack_lists, \
-       writemsg, writemsg_level
+       writemsg, writemsg_level, _eapi_cache
 from portage.versions import catpkgsplit, catsplit, cpv_getkey, _pkg_str
 
 from portage.package.ebuild._config import special_env_vars
@@ -811,6 +811,7 @@ class config(object):
                        # and subsequent calls to the _init() functions have no effect.
                        portage.output._init(config_root=self['PORTAGE_CONFIGROOT'])
                        portage.data._init(self)
+                       _eapi_cache.clear()
 
                if mycpv:
                        self.setcpv(mycpv)
index 4645be52f210e61cfd831e144e67617ad494c73f..951a158a9bfb3e13b46d0fd66d38672594a37f55 100644 (file)
@@ -379,6 +379,8 @@ def grabdict(myfilename, juststrings=0, empty=0, recursive=0, incremental=1):
                        newdict[k] = " ".join(v)
        return newdict
 
+_eapi_cache = {}
+
 def read_corresponding_eapi_file(filename):
        """
        Read the 'eapi' file from the directory 'filename' is in.
@@ -386,6 +388,10 @@ def read_corresponding_eapi_file(filename):
        """
        default = "0"
        eapi_file = os.path.join(os.path.dirname(filename), "eapi")
+       try:
+               return _eapi_cache[eapi_file]
+       except KeyError:
+               pass
        try:
                f = io.open(_unicode_encode(eapi_file,
                        encoding=_encodings['fs'], errors='strict'),
@@ -401,6 +407,7 @@ def read_corresponding_eapi_file(filename):
        except IOError:
                eapi = default
 
+       _eapi_cache[eapi_file] = eapi
        return eapi
 
 def grabdict_package(myfilename, juststrings=0, recursive=0, allow_wildcard=False, allow_repo=False,