* [gentoo-portage-dev] [PATCH 1/4] portage.dep.Atom: Clean up __new__ parameters
@ 2022-02-24 4:14 Matt Turner
2022-02-24 4:14 ` [gentoo-portage-dev] [PATCH 2/4] portage.eapi: use tuple instead of str for namedtuple definition Matt Turner
` (3 more replies)
0 siblings, 4 replies; 8+ messages in thread
From: Matt Turner @ 2022-02-24 4:14 UTC (permalink / raw
To: gentoo-portage-dev; +Cc: Wolfgang E. Sanyer, Matt Turner
From: "Wolfgang E. Sanyer" <WolfgangESanyer@gmail.com>
Reviewed-by: Matt Turner <mattst88@gentoo.org>
Signed-off-by: Wolfgang E. Sanyer <WolfgangESanyer@gmail.com>
---
lib/portage/dep/__init__.py | 12 +-----------
1 file changed, 1 insertion(+), 11 deletions(-)
diff --git a/lib/portage/dep/__init__.py b/lib/portage/dep/__init__.py
index 3b3577025..13c0f4ef7 100644
--- a/lib/portage/dep/__init__.py
+++ b/lib/portage/dep/__init__.py
@@ -1489,17 +1489,7 @@ class Atom(str):
def __init__(self, forbid_overlap=False):
self.overlap = self._overlap(forbid=forbid_overlap)
- def __new__(
- cls,
- s,
- unevaluated_atom=None,
- allow_wildcard=False,
- allow_repo=None,
- _use=None,
- eapi=None,
- is_valid_flag=None,
- allow_build_id=None,
- ):
+ def __new__(cls, s, *args, **kwargs):
return str.__new__(cls, s)
def __init__(
--
2.34.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [gentoo-portage-dev] [PATCH 2/4] portage.eapi: use tuple instead of str for namedtuple definition
2022-02-24 4:14 [gentoo-portage-dev] [PATCH 1/4] portage.dep.Atom: Clean up __new__ parameters Matt Turner
@ 2022-02-24 4:14 ` Matt Turner
2022-03-09 1:12 ` Alec Warner
2022-02-24 4:14 ` [gentoo-portage-dev] [PATCH 3/4] portage.eapi: move None check to helper functions Matt Turner
` (2 subsequent siblings)
3 siblings, 1 reply; 8+ messages in thread
From: Matt Turner @ 2022-02-24 4:14 UTC (permalink / raw
To: gentoo-portage-dev; +Cc: Wolfgang E. Sanyer, Matt Turner
From: "Wolfgang E. Sanyer" <WolfgangESanyer@gmail.com>
Reviewed-by: Matt Turner <mattst88@gentoo.org>
Signed-off-by: Wolfgang E. Sanyer <WolfgangESanyer@gmail.com>
---
lib/portage/eapi.py | 52 ++++++++++++++++++++++++++++-----------------
1 file changed, 33 insertions(+), 19 deletions(-)
diff --git a/lib/portage/eapi.py b/lib/portage/eapi.py
index adee87d00..18069b04b 100644
--- a/lib/portage/eapi.py
+++ b/lib/portage/eapi.py
@@ -288,25 +288,39 @@ def eapi_has_sysroot(eapi):
_eapi_attrs = collections.namedtuple(
"_eapi_attrs",
- "allows_package_provided "
- "bdepend "
- "broot "
- "dots_in_PN dots_in_use_flags "
- "exports_AA "
- "exports_EBUILD_PHASE_FUNC "
- "exports_ECLASSDIR "
- "exports_KV "
- "exports_merge_type "
- "exports_PORTDIR "
- "exports_replace_vars "
- "feature_flag_test "
- "idepend iuse_defaults iuse_effective posixish_locale "
- "path_variables_end_with_trailing_slash "
- "prefix "
- "repo_deps required_use required_use_at_most_one_of "
- "selective_src_uri_restriction slot_operator slot_deps "
- "src_uri_arrows strong_blocks use_deps use_dep_defaults "
- "empty_groups_always_true sysroot",
+ (
+ "allows_package_provided",
+ "bdepend",
+ "broot",
+ "dots_in_PN",
+ "dots_in_use_flags",
+ "exports_AA",
+ "exports_EBUILD_PHASE_FUNC",
+ "exports_ECLASSDIR",
+ "exports_KV",
+ "exports_merge_type",
+ "exports_PORTDIR",
+ "exports_replace_vars",
+ "feature_flag_test",
+ "idepend",
+ "iuse_defaults",
+ "iuse_effective",
+ "posixish_locale",
+ "path_variables_end_with_trailing_slash",
+ "prefix",
+ "repo_deps",
+ "required_use",
+ "required_use_at_most_one_of",
+ "selective_src_uri_restriction",
+ "slot_operator",
+ "slot_deps",
+ "src_uri_arrows",
+ "strong_blocks",
+ "use_deps",
+ "use_dep_defaults",
+ "empty_groups_always_true",
+ "sysroot",
+ ),
)
--
2.34.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [gentoo-portage-dev] [PATCH 3/4] portage.eapi: move None check to helper functions
2022-02-24 4:14 [gentoo-portage-dev] [PATCH 1/4] portage.dep.Atom: Clean up __new__ parameters Matt Turner
2022-02-24 4:14 ` [gentoo-portage-dev] [PATCH 2/4] portage.eapi: use tuple instead of str for namedtuple definition Matt Turner
@ 2022-02-24 4:14 ` Matt Turner
2022-02-24 4:14 ` [gentoo-portage-dev] [PATCH 4/4] portage.eapi: use functools @lru_cache decorator instead of custom implementation Matt Turner
2022-03-09 1:11 ` [gentoo-portage-dev] [PATCH 1/4] portage.dep.Atom: Clean up __new__ parameters Alec Warner
3 siblings, 0 replies; 8+ messages in thread
From: Matt Turner @ 2022-02-24 4:14 UTC (permalink / raw
To: gentoo-portage-dev; +Cc: Wolfgang E. Sanyer, Matt Turner
From: "Wolfgang E. Sanyer" <WolfgangESanyer@gmail.com>
Reviewed-by: Matt Turner <mattst88@gentoo.org>
Signed-off-by: Wolfgang E. Sanyer <WolfgangESanyer@gmail.com>
---
lib/portage/eapi.py | 162 +++++++++++++++++++++++++++++++++-----------
1 file changed, 121 insertions(+), 41 deletions(-)
diff --git a/lib/portage/eapi.py b/lib/portage/eapi.py
index 18069b04b..56e64620a 100644
--- a/lib/portage/eapi.py
+++ b/lib/portage/eapi.py
@@ -9,26 +9,44 @@ from portage import eapi_is_supported
def eapi_has_iuse_defaults(eapi):
+ if eapi is None:
+ return True
+
return eapi != "0"
def eapi_has_iuse_effective(eapi):
+ if eapi is None:
+ return False
+
return eapi not in ("0", "1", "2", "3", "4", "4-python", "4-slot-abi")
def eapi_has_slot_deps(eapi):
+ if eapi is None:
+ return True
+
return eapi != "0"
def eapi_has_slot_operator(eapi):
+ if eapi is None:
+ return True
+
return eapi not in ("0", "1", "2", "3", "4", "4-python")
def eapi_has_src_uri_arrows(eapi):
+ if eapi is None:
+ return True
+
return eapi not in ("0", "1")
def eapi_has_selective_src_uri_restriction(eapi):
+ if eapi is None:
+ return True
+
return eapi not in (
"0",
"1",
@@ -45,10 +63,16 @@ def eapi_has_selective_src_uri_restriction(eapi):
def eapi_has_use_deps(eapi):
+ if eapi is None:
+ return True
+
return eapi not in ("0", "1")
def eapi_has_strong_blocks(eapi):
+ if eapi is None:
+ return True
+
return eapi not in ("0", "1")
@@ -57,30 +81,51 @@ def eapi_has_src_prepare_and_src_configure(eapi):
def eapi_supports_prefix(eapi):
+ if eapi is None:
+ return True
+
return eapi not in ("0", "1", "2")
def eapi_exports_AA(eapi):
+ if eapi is None:
+ return False
+
return eapi in ("0", "1", "2", "3")
def eapi_exports_KV(eapi):
+ if eapi is None:
+ return False
+
return eapi in ("0", "1", "2", "3")
def eapi_exports_merge_type(eapi):
+ if eapi is None:
+ return True
+
return eapi not in ("0", "1", "2", "3")
def eapi_exports_replace_vars(eapi):
+ if eapi is None:
+ return True
+
return eapi not in ("0", "1", "2", "3")
def eapi_exports_EBUILD_PHASE_FUNC(eapi):
+ if eapi is None:
+ return True
+
return eapi not in ("0", "1", "2", "3", "4", "4-python", "4-slot-abi")
def eapi_exports_PORTDIR(eapi):
+ if eapi is None:
+ return True
+
return eapi in (
"0",
"1",
@@ -96,6 +141,9 @@ def eapi_exports_PORTDIR(eapi):
def eapi_exports_ECLASSDIR(eapi):
+ if eapi is None:
+ return False
+
return eapi in (
"0",
"1",
@@ -127,18 +175,30 @@ def eapi_has_dosed_dohard(eapi):
def eapi_has_required_use(eapi):
+ if eapi is None:
+ return True
+
return eapi not in ("0", "1", "2", "3")
def eapi_has_required_use_at_most_one_of(eapi):
+ if eapi is None:
+ return True
+
return eapi not in ("0", "1", "2", "3", "4", "4-python", "4-slot-abi")
def eapi_has_use_dep_defaults(eapi):
+ if eapi is None:
+ return True
+
return eapi not in ("0", "1", "2", "3")
def eapi_requires_posixish_locale(eapi):
+ if eapi is None:
+ return False
+
return eapi not in (
"0",
"1",
@@ -153,14 +213,23 @@ def eapi_requires_posixish_locale(eapi):
def eapi_has_repo_deps(eapi):
+ if eapi is None:
+ return True
+
return eapi in ("4-python", "5-progress")
def eapi_allows_dots_in_PN(eapi):
+ if eapi is None:
+ return True
+
return eapi in ("4-python", "5-progress")
def eapi_allows_dots_in_use_flags(eapi):
+ if eapi is None:
+ return True
+
return eapi in ("4-python", "5-progress")
@@ -181,6 +250,9 @@ def eapi_has_automatic_unpack_dependencies(eapi):
def eapi_allows_package_provided(eapi):
+ if eapi is None:
+ return True
+
return eapi in (
"0",
"1",
@@ -196,6 +268,9 @@ def eapi_allows_package_provided(eapi):
def eapi_has_bdepend(eapi):
+ if eapi is None:
+ return False
+
return eapi not in (
"0",
"1",
@@ -211,6 +286,9 @@ def eapi_has_bdepend(eapi):
def eapi_has_idepend(eapi):
+ if eapi is None:
+ return False
+
return eapi not in (
"0",
"1",
@@ -227,6 +305,9 @@ def eapi_has_idepend(eapi):
def eapi_empty_groups_always_true(eapi):
+ if eapi is None:
+ return False
+
return eapi in (
"0",
"1",
@@ -242,6 +323,9 @@ def eapi_empty_groups_always_true(eapi):
def eapi_path_variables_end_with_trailing_slash(eapi):
+ if eapi is None:
+ return False
+
return eapi in (
"0",
"1",
@@ -257,6 +341,9 @@ def eapi_path_variables_end_with_trailing_slash(eapi):
def eapi_has_broot(eapi):
+ if eapi is None:
+ return True
+
return eapi not in (
"0",
"1",
@@ -272,6 +359,9 @@ def eapi_has_broot(eapi):
def eapi_has_sysroot(eapi):
+ if eapi is None:
+ return True
+
return eapi not in (
"0",
"1",
@@ -387,49 +477,39 @@ def _get_eapi_attrs(eapi):
eapi = None
eapi_attrs = _eapi_attrs(
- allows_package_provided=(
- eapi is None or eapi_allows_package_provided.func(eapi)
- ),
- bdepend=(eapi is not None and eapi_has_bdepend.func(eapi)),
- broot=(eapi is None or eapi_has_broot.func(eapi)),
- dots_in_PN=(eapi is None or eapi_allows_dots_in_PN.func(eapi)),
- dots_in_use_flags=(eapi is None or eapi_allows_dots_in_use_flags.func(eapi)),
- empty_groups_always_true=(
- eapi is not None and eapi_empty_groups_always_true.func(eapi)
- ),
- exports_AA=(eapi is not None and eapi_exports_AA.func(eapi)),
- exports_EBUILD_PHASE_FUNC=(
- eapi is None or eapi_exports_EBUILD_PHASE_FUNC.func(eapi)
- ),
- exports_ECLASSDIR=(eapi is not None and eapi_exports_ECLASSDIR.func(eapi)),
- exports_KV=(eapi is not None and eapi_exports_KV.func(eapi)),
- exports_merge_type=(eapi is None or eapi_exports_merge_type.func(eapi)),
- exports_PORTDIR=(eapi is None or eapi_exports_PORTDIR.func(eapi)),
- exports_replace_vars=(eapi is None or eapi_exports_replace_vars.func(eapi)),
+ allows_package_provided=eapi_allows_package_provided.func(eapi),
+ bdepend=eapi_has_bdepend.func(eapi),
+ broot=eapi_has_broot.func(eapi),
+ dots_in_PN=eapi_allows_dots_in_PN.func(eapi),
+ dots_in_use_flags=eapi_allows_dots_in_use_flags.func(eapi),
+ empty_groups_always_true=eapi_empty_groups_always_true.func(eapi),
+ exports_AA=eapi_exports_AA.func(eapi),
+ exports_EBUILD_PHASE_FUNC=eapi_exports_EBUILD_PHASE_FUNC.func(eapi),
+ exports_ECLASSDIR=eapi_exports_ECLASSDIR.func(eapi),
+ exports_KV=eapi_exports_KV.func(eapi),
+ exports_merge_type=eapi_exports_merge_type.func(eapi),
+ exports_PORTDIR=eapi_exports_PORTDIR.func(eapi),
+ exports_replace_vars=eapi_exports_replace_vars.func(eapi),
feature_flag_test=False,
- idepend=(eapi is not None and eapi_has_idepend.func(eapi)),
- iuse_defaults=(eapi is None or eapi_has_iuse_defaults.func(eapi)),
- iuse_effective=(eapi is not None and eapi_has_iuse_effective.func(eapi)),
- path_variables_end_with_trailing_slash=(
- eapi is not None and eapi_path_variables_end_with_trailing_slash.func(eapi)
- ),
- posixish_locale=(eapi is not None and eapi_requires_posixish_locale.func(eapi)),
- prefix=(eapi is None or eapi_supports_prefix.func(eapi)),
- repo_deps=(eapi is None or eapi_has_repo_deps.func(eapi)),
- required_use=(eapi is None or eapi_has_required_use.func(eapi)),
- required_use_at_most_one_of=(
- eapi is None or eapi_has_required_use_at_most_one_of.func(eapi)
- ),
- selective_src_uri_restriction=(
- eapi is None or eapi_has_selective_src_uri_restriction.func(eapi)
+ idepend=eapi_has_idepend.func(eapi),
+ iuse_defaults=eapi_has_iuse_defaults.func(eapi),
+ iuse_effective=eapi_has_iuse_effective.func(eapi),
+ path_variables_end_with_trailing_slash=eapi_path_variables_end_with_trailing_slash.func(
+ eapi
),
- slot_deps=(eapi is None or eapi_has_slot_deps.func(eapi)),
- slot_operator=(eapi is None or eapi_has_slot_operator.func(eapi)),
- src_uri_arrows=(eapi is None or eapi_has_src_uri_arrows.func(eapi)),
- strong_blocks=(eapi is None or eapi_has_strong_blocks.func(eapi)),
- sysroot=(eapi is None or eapi_has_sysroot.func(eapi)),
- use_deps=(eapi is None or eapi_has_use_deps.func(eapi)),
- use_dep_defaults=(eapi is None or eapi_has_use_dep_defaults.func(eapi)),
+ posixish_locale=eapi_requires_posixish_locale.func(eapi),
+ prefix=eapi_supports_prefix.func(eapi),
+ repo_deps=eapi_has_repo_deps.func(eapi),
+ required_use=eapi_has_required_use.func(eapi),
+ required_use_at_most_one_of=eapi_has_required_use_at_most_one_of.func(eapi),
+ selective_src_uri_restriction=eapi_has_selective_src_uri_restriction.func(eapi),
+ slot_deps=eapi_has_slot_deps.func(eapi),
+ slot_operator=eapi_has_slot_operator.func(eapi),
+ src_uri_arrows=eapi_has_src_uri_arrows.func(eapi),
+ strong_blocks=eapi_has_strong_blocks.func(eapi),
+ sysroot=eapi_has_sysroot.func(eapi),
+ use_deps=eapi_has_use_deps.func(eapi),
+ use_dep_defaults=eapi_has_use_dep_defaults.func(eapi),
)
_eapi_attrs_cache[orig_eapi] = eapi_attrs
--
2.34.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [gentoo-portage-dev] [PATCH 4/4] portage.eapi: use functools @lru_cache decorator instead of custom implementation
2022-02-24 4:14 [gentoo-portage-dev] [PATCH 1/4] portage.dep.Atom: Clean up __new__ parameters Matt Turner
2022-02-24 4:14 ` [gentoo-portage-dev] [PATCH 2/4] portage.eapi: use tuple instead of str for namedtuple definition Matt Turner
2022-02-24 4:14 ` [gentoo-portage-dev] [PATCH 3/4] portage.eapi: move None check to helper functions Matt Turner
@ 2022-02-24 4:14 ` Matt Turner
2022-02-26 18:04 ` Zac Medico
2022-03-09 1:11 ` [gentoo-portage-dev] [PATCH 1/4] portage.dep.Atom: Clean up __new__ parameters Alec Warner
3 siblings, 1 reply; 8+ messages in thread
From: Matt Turner @ 2022-02-24 4:14 UTC (permalink / raw
To: gentoo-portage-dev; +Cc: Wolfgang E. Sanyer, Matt Turner
From: "Wolfgang E. Sanyer" <WolfgangESanyer@gmail.com>
Reviewed-by: Matt Turner <mattst88@gentoo.org>
Signed-off-by: Wolfgang E. Sanyer <WolfgangESanyer@gmail.com>
---
lib/portage/eapi.py | 155 ++++++++++++++++++++------------------------
1 file changed, 72 insertions(+), 83 deletions(-)
diff --git a/lib/portage/eapi.py b/lib/portage/eapi.py
index 56e64620a..efcc6c2a0 100644
--- a/lib/portage/eapi.py
+++ b/lib/portage/eapi.py
@@ -2,12 +2,10 @@
# Distributed under the terms of the GNU General Public License v2
import collections
-import operator
-import types
-
-from portage import eapi_is_supported
+from functools import lru_cache
+@lru_cache(None)
def eapi_has_iuse_defaults(eapi):
if eapi is None:
return True
@@ -15,6 +13,7 @@ def eapi_has_iuse_defaults(eapi):
return eapi != "0"
+@lru_cache(None)
def eapi_has_iuse_effective(eapi):
if eapi is None:
return False
@@ -22,6 +21,7 @@ def eapi_has_iuse_effective(eapi):
return eapi not in ("0", "1", "2", "3", "4", "4-python", "4-slot-abi")
+@lru_cache(None)
def eapi_has_slot_deps(eapi):
if eapi is None:
return True
@@ -29,6 +29,7 @@ def eapi_has_slot_deps(eapi):
return eapi != "0"
+@lru_cache(None)
def eapi_has_slot_operator(eapi):
if eapi is None:
return True
@@ -36,6 +37,7 @@ def eapi_has_slot_operator(eapi):
return eapi not in ("0", "1", "2", "3", "4", "4-python")
+@lru_cache(None)
def eapi_has_src_uri_arrows(eapi):
if eapi is None:
return True
@@ -43,6 +45,7 @@ def eapi_has_src_uri_arrows(eapi):
return eapi not in ("0", "1")
+@lru_cache(None)
def eapi_has_selective_src_uri_restriction(eapi):
if eapi is None:
return True
@@ -62,6 +65,7 @@ def eapi_has_selective_src_uri_restriction(eapi):
)
+@lru_cache(None)
def eapi_has_use_deps(eapi):
if eapi is None:
return True
@@ -69,6 +73,7 @@ def eapi_has_use_deps(eapi):
return eapi not in ("0", "1")
+@lru_cache(None)
def eapi_has_strong_blocks(eapi):
if eapi is None:
return True
@@ -76,10 +81,12 @@ def eapi_has_strong_blocks(eapi):
return eapi not in ("0", "1")
+@lru_cache(None)
def eapi_has_src_prepare_and_src_configure(eapi):
return eapi not in ("0", "1")
+@lru_cache(None)
def eapi_supports_prefix(eapi):
if eapi is None:
return True
@@ -87,6 +94,7 @@ def eapi_supports_prefix(eapi):
return eapi not in ("0", "1", "2")
+@lru_cache(None)
def eapi_exports_AA(eapi):
if eapi is None:
return False
@@ -94,6 +102,7 @@ def eapi_exports_AA(eapi):
return eapi in ("0", "1", "2", "3")
+@lru_cache(None)
def eapi_exports_KV(eapi):
if eapi is None:
return False
@@ -101,6 +110,7 @@ def eapi_exports_KV(eapi):
return eapi in ("0", "1", "2", "3")
+@lru_cache(None)
def eapi_exports_merge_type(eapi):
if eapi is None:
return True
@@ -108,6 +118,7 @@ def eapi_exports_merge_type(eapi):
return eapi not in ("0", "1", "2", "3")
+@lru_cache(None)
def eapi_exports_replace_vars(eapi):
if eapi is None:
return True
@@ -115,6 +126,7 @@ def eapi_exports_replace_vars(eapi):
return eapi not in ("0", "1", "2", "3")
+@lru_cache(None)
def eapi_exports_EBUILD_PHASE_FUNC(eapi):
if eapi is None:
return True
@@ -122,6 +134,7 @@ def eapi_exports_EBUILD_PHASE_FUNC(eapi):
return eapi not in ("0", "1", "2", "3", "4", "4-python", "4-slot-abi")
+@lru_cache(None)
def eapi_exports_PORTDIR(eapi):
if eapi is None:
return True
@@ -140,6 +153,7 @@ def eapi_exports_PORTDIR(eapi):
)
+@lru_cache(None)
def eapi_exports_ECLASSDIR(eapi):
if eapi is None:
return False
@@ -158,22 +172,27 @@ def eapi_exports_ECLASSDIR(eapi):
)
+@lru_cache(None)
def eapi_exports_REPOSITORY(eapi):
return eapi in ("4-python", "5-progress")
+@lru_cache(None)
def eapi_has_pkg_pretend(eapi):
return eapi not in ("0", "1", "2", "3")
+@lru_cache(None)
def eapi_has_implicit_rdepend(eapi):
return eapi in ("0", "1", "2", "3")
+@lru_cache(None)
def eapi_has_dosed_dohard(eapi):
return eapi in ("0", "1", "2", "3")
+@lru_cache(None)
def eapi_has_required_use(eapi):
if eapi is None:
return True
@@ -181,6 +200,7 @@ def eapi_has_required_use(eapi):
return eapi not in ("0", "1", "2", "3")
+@lru_cache(None)
def eapi_has_required_use_at_most_one_of(eapi):
if eapi is None:
return True
@@ -188,6 +208,7 @@ def eapi_has_required_use_at_most_one_of(eapi):
return eapi not in ("0", "1", "2", "3", "4", "4-python", "4-slot-abi")
+@lru_cache(None)
def eapi_has_use_dep_defaults(eapi):
if eapi is None:
return True
@@ -195,6 +216,7 @@ def eapi_has_use_dep_defaults(eapi):
return eapi not in ("0", "1", "2", "3")
+@lru_cache(None)
def eapi_requires_posixish_locale(eapi):
if eapi is None:
return False
@@ -212,6 +234,7 @@ def eapi_requires_posixish_locale(eapi):
)
+@lru_cache(None)
def eapi_has_repo_deps(eapi):
if eapi is None:
return True
@@ -219,6 +242,7 @@ def eapi_has_repo_deps(eapi):
return eapi in ("4-python", "5-progress")
+@lru_cache(None)
def eapi_allows_dots_in_PN(eapi):
if eapi is None:
return True
@@ -226,6 +250,7 @@ def eapi_allows_dots_in_PN(eapi):
return eapi in ("4-python", "5-progress")
+@lru_cache(None)
def eapi_allows_dots_in_use_flags(eapi):
if eapi is None:
return True
@@ -233,22 +258,27 @@ def eapi_allows_dots_in_use_flags(eapi):
return eapi in ("4-python", "5-progress")
+@lru_cache(None)
def eapi_supports_stable_use_forcing_and_masking(eapi):
return eapi not in ("0", "1", "2", "3", "4", "4-python", "4-slot-abi")
+@lru_cache(None)
def eapi_allows_directories_on_profile_level_and_repository_level(eapi):
return eapi not in ("0", "1", "2", "3", "4", "4-slot-abi", "5", "6")
+@lru_cache(None)
def eapi_has_use_aliases(eapi):
return eapi in ("4-python", "5-progress")
+@lru_cache(None)
def eapi_has_automatic_unpack_dependencies(eapi):
return eapi in ("5-progress",)
+@lru_cache(None)
def eapi_allows_package_provided(eapi):
if eapi is None:
return True
@@ -267,6 +297,7 @@ def eapi_allows_package_provided(eapi):
)
+@lru_cache(None)
def eapi_has_bdepend(eapi):
if eapi is None:
return False
@@ -285,6 +316,7 @@ def eapi_has_bdepend(eapi):
)
+@lru_cache(None)
def eapi_has_idepend(eapi):
if eapi is None:
return False
@@ -304,6 +336,7 @@ def eapi_has_idepend(eapi):
)
+@lru_cache(None)
def eapi_empty_groups_always_true(eapi):
if eapi is None:
return False
@@ -322,6 +355,7 @@ def eapi_empty_groups_always_true(eapi):
)
+@lru_cache(None)
def eapi_path_variables_end_with_trailing_slash(eapi):
if eapi is None:
return False
@@ -340,6 +374,7 @@ def eapi_path_variables_end_with_trailing_slash(eapi):
)
+@lru_cache(None)
def eapi_has_broot(eapi):
if eapi is None:
return True
@@ -358,6 +393,7 @@ def eapi_has_broot(eapi):
)
+@lru_cache(None)
def eapi_has_sysroot(eapi):
if eapi is None:
return True
@@ -423,43 +459,7 @@ _eapi_attr_func_prefixes = (
)
-def _eapi_func_decorator(func, attr_getter):
- def wrapper(eapi):
- return attr_getter(_get_eapi_attrs(eapi))
-
- wrapper.func = func
- wrapper.__doc__ = func.__doc__
- return wrapper
-
-
-def _decorate_eapi_funcs():
- """
- Decorate eapi_* functions so that they use _get_eapi_attrs(eapi)
- to cache results.
- """
- decorated = {}
- for k, v in globals().items():
- if not (
- isinstance(v, types.FunctionType) and k.startswith(_eapi_attr_func_prefixes)
- ):
- continue
- for prefix in _eapi_attr_func_prefixes:
- if k.startswith(prefix):
- attr_name = k[len(prefix) :]
- if hasattr(_eapi_attrs, attr_name):
- decorated[k] = _eapi_func_decorator(
- v, operator.attrgetter(attr_name)
- )
- break
- globals().update(decorated)
-
-
-_decorate_eapi_funcs()
-
-
-_eapi_attrs_cache = {}
-
-
+@lru_cache(None)
def _get_eapi_attrs(eapi):
"""
When eapi is None then validation is not as strict, since we want the
@@ -468,49 +468,38 @@ def _get_eapi_attrs(eapi):
be helpful for handling of corrupt EAPI metadata in essential functions
such as pkgsplit.
"""
- eapi_attrs = _eapi_attrs_cache.get(eapi)
- if eapi_attrs is not None:
- return eapi_attrs
-
- orig_eapi = eapi
- if eapi is not None and not eapi_is_supported(eapi):
- eapi = None
-
- eapi_attrs = _eapi_attrs(
- allows_package_provided=eapi_allows_package_provided.func(eapi),
- bdepend=eapi_has_bdepend.func(eapi),
- broot=eapi_has_broot.func(eapi),
- dots_in_PN=eapi_allows_dots_in_PN.func(eapi),
- dots_in_use_flags=eapi_allows_dots_in_use_flags.func(eapi),
- empty_groups_always_true=eapi_empty_groups_always_true.func(eapi),
- exports_AA=eapi_exports_AA.func(eapi),
- exports_EBUILD_PHASE_FUNC=eapi_exports_EBUILD_PHASE_FUNC.func(eapi),
- exports_ECLASSDIR=eapi_exports_ECLASSDIR.func(eapi),
- exports_KV=eapi_exports_KV.func(eapi),
- exports_merge_type=eapi_exports_merge_type.func(eapi),
- exports_PORTDIR=eapi_exports_PORTDIR.func(eapi),
- exports_replace_vars=eapi_exports_replace_vars.func(eapi),
+ return _eapi_attrs(
+ allows_package_provided=eapi_allows_package_provided(eapi),
+ bdepend=eapi_has_bdepend(eapi),
+ broot=eapi_has_broot(eapi),
+ dots_in_PN=eapi_allows_dots_in_PN(eapi),
+ dots_in_use_flags=eapi_allows_dots_in_use_flags(eapi),
+ empty_groups_always_true=eapi_empty_groups_always_true(eapi),
+ exports_AA=eapi_exports_AA(eapi),
+ exports_EBUILD_PHASE_FUNC=eapi_exports_EBUILD_PHASE_FUNC(eapi),
+ exports_ECLASSDIR=eapi_exports_ECLASSDIR(eapi),
+ exports_KV=eapi_exports_KV(eapi),
+ exports_merge_type=eapi_exports_merge_type(eapi),
+ exports_PORTDIR=eapi_exports_PORTDIR(eapi),
+ exports_replace_vars=eapi_exports_replace_vars(eapi),
feature_flag_test=False,
- idepend=eapi_has_idepend.func(eapi),
- iuse_defaults=eapi_has_iuse_defaults.func(eapi),
- iuse_effective=eapi_has_iuse_effective.func(eapi),
- path_variables_end_with_trailing_slash=eapi_path_variables_end_with_trailing_slash.func(
+ idepend=eapi_has_idepend(eapi),
+ iuse_defaults=eapi_has_iuse_defaults(eapi),
+ iuse_effective=eapi_has_iuse_effective(eapi),
+ path_variables_end_with_trailing_slash=eapi_path_variables_end_with_trailing_slash(
eapi
),
- posixish_locale=eapi_requires_posixish_locale.func(eapi),
- prefix=eapi_supports_prefix.func(eapi),
- repo_deps=eapi_has_repo_deps.func(eapi),
- required_use=eapi_has_required_use.func(eapi),
- required_use_at_most_one_of=eapi_has_required_use_at_most_one_of.func(eapi),
- selective_src_uri_restriction=eapi_has_selective_src_uri_restriction.func(eapi),
- slot_deps=eapi_has_slot_deps.func(eapi),
- slot_operator=eapi_has_slot_operator.func(eapi),
- src_uri_arrows=eapi_has_src_uri_arrows.func(eapi),
- strong_blocks=eapi_has_strong_blocks.func(eapi),
- sysroot=eapi_has_sysroot.func(eapi),
- use_deps=eapi_has_use_deps.func(eapi),
- use_dep_defaults=eapi_has_use_dep_defaults.func(eapi),
+ posixish_locale=eapi_requires_posixish_locale(eapi),
+ prefix=eapi_supports_prefix(eapi),
+ repo_deps=eapi_has_repo_deps(eapi),
+ required_use=eapi_has_required_use(eapi),
+ required_use_at_most_one_of=eapi_has_required_use_at_most_one_of(eapi),
+ selective_src_uri_restriction=eapi_has_selective_src_uri_restriction(eapi),
+ slot_deps=eapi_has_slot_deps(eapi),
+ slot_operator=eapi_has_slot_operator(eapi),
+ src_uri_arrows=eapi_has_src_uri_arrows(eapi),
+ strong_blocks=eapi_has_strong_blocks(eapi),
+ sysroot=eapi_has_sysroot(eapi),
+ use_deps=eapi_has_use_deps(eapi),
+ use_dep_defaults=eapi_has_use_dep_defaults(eapi),
)
-
- _eapi_attrs_cache[orig_eapi] = eapi_attrs
- return eapi_attrs
--
2.34.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [gentoo-portage-dev] [PATCH 4/4] portage.eapi: use functools @lru_cache decorator instead of custom implementation
2022-02-24 4:14 ` [gentoo-portage-dev] [PATCH 4/4] portage.eapi: use functools @lru_cache decorator instead of custom implementation Matt Turner
@ 2022-02-26 18:04 ` Zac Medico
2022-02-26 22:26 ` Zac Medico
0 siblings, 1 reply; 8+ messages in thread
From: Zac Medico @ 2022-02-26 18:04 UTC (permalink / raw
To: gentoo-portage-dev, Matt Turner; +Cc: Wolfgang E. Sanyer
[-- Attachment #1.1: Type: text/plain, Size: 1185 bytes --]
On 2/23/22 20:14, Matt Turner wrote:
> From: "Wolfgang E. Sanyer" <WolfgangESanyer@gmail.com>
>
> Reviewed-by: Matt Turner <mattst88@gentoo.org>
> Signed-off-by: Wolfgang E. Sanyer <WolfgangESanyer@gmail.com>
> ---
> lib/portage/eapi.py | 155 ++++++++++++++++++++------------------------
> 1 file changed, 72 insertions(+), 83 deletions(-)
>
> diff --git a/lib/portage/eapi.py b/lib/portage/eapi.py
> index 56e64620a..efcc6c2a0 100644
> --- a/lib/portage/eapi.py
> +++ b/lib/portage/eapi.py
> @@ -2,12 +2,10 @@
> # Distributed under the terms of the GNU General Public License v2
>
> import collections
> -import operator
> -import types
> -
> -from portage import eapi_is_supported
> +from functools import lru_cache
>
>
> +@lru_cache(None)
> def eapi_has_iuse_defaults(eapi):
> if eapi is None:
> return True
> @@ -15,6 +13,7 @@ def eapi_has_iuse_defaults(eapi):
> return eapi != "0"
I think this patch misses the point of the original caching mechanism.
It doesn't make sense to cache results of the individual eapi_*
functions if they no longer contribute to the _eapi_attrs cache.
--
Thanks,
Zac
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 840 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [gentoo-portage-dev] [PATCH 4/4] portage.eapi: use functools @lru_cache decorator instead of custom implementation
2022-02-26 18:04 ` Zac Medico
@ 2022-02-26 22:26 ` Zac Medico
0 siblings, 0 replies; 8+ messages in thread
From: Zac Medico @ 2022-02-26 22:26 UTC (permalink / raw
To: gentoo-portage-dev, Matt Turner; +Cc: Wolfgang E. Sanyer
[-- Attachment #1.1: Type: text/plain, Size: 1551 bytes --]
On 2/26/22 10:04, Zac Medico wrote:
> On 2/23/22 20:14, Matt Turner wrote:
>> From: "Wolfgang E. Sanyer" <WolfgangESanyer@gmail.com>
>>
>> Reviewed-by: Matt Turner <mattst88@gentoo.org>
>> Signed-off-by: Wolfgang E. Sanyer <WolfgangESanyer@gmail.com>
>> ---
>> lib/portage/eapi.py | 155 ++++++++++++++++++++------------------------
>> 1 file changed, 72 insertions(+), 83 deletions(-)
>>
>> diff --git a/lib/portage/eapi.py b/lib/portage/eapi.py
>> index 56e64620a..efcc6c2a0 100644
>> --- a/lib/portage/eapi.py
>> +++ b/lib/portage/eapi.py
>> @@ -2,12 +2,10 @@
>> # Distributed under the terms of the GNU General Public License v2
>> import collections
>> -import operator
>> -import types
>> -
>> -from portage import eapi_is_supported
>> +from functools import lru_cache
>> +@lru_cache(None)
>> def eapi_has_iuse_defaults(eapi):
>> if eapi is None:
>> return True
>> @@ -15,6 +13,7 @@ def eapi_has_iuse_defaults(eapi):
>> return eapi != "0"
>
> I think this patch misses the point of the original caching mechanism.
> It doesn't make sense to cache results of the individual eapi_*
> functions if they no longer contribute to the _eapi_attrs cache.
To clarify, the only reason that the eapi_* functions were cached was so
that they would trigger population of the _eapi_attrs cache. In the
absence of this_eapi_attrs cache population feature, I doubt that it's
very useful to put the lru_cache on the indivdual eapi_* functions.
--
Thanks,
Zac
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 840 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [gentoo-portage-dev] [PATCH 1/4] portage.dep.Atom: Clean up __new__ parameters
2022-02-24 4:14 [gentoo-portage-dev] [PATCH 1/4] portage.dep.Atom: Clean up __new__ parameters Matt Turner
` (2 preceding siblings ...)
2022-02-24 4:14 ` [gentoo-portage-dev] [PATCH 4/4] portage.eapi: use functools @lru_cache decorator instead of custom implementation Matt Turner
@ 2022-03-09 1:11 ` Alec Warner
3 siblings, 0 replies; 8+ messages in thread
From: Alec Warner @ 2022-03-09 1:11 UTC (permalink / raw
To: gentoo-portage-dev; +Cc: Wolfgang E. Sanyer, Matt Turner
maybe *unused_args, **unused_kwargs, unsure on the style guide for
that (normally its _)
But feel free to merge as-is.
-A
On Wed, Feb 23, 2022 at 8:15 PM Matt Turner <mattst88@gentoo.org> wrote:
>
> From: "Wolfgang E. Sanyer" <WolfgangESanyer@gmail.com>
>
> Reviewed-by: Matt Turner <mattst88@gentoo.org>
> Signed-off-by: Wolfgang E. Sanyer <WolfgangESanyer@gmail.com>
> ---
> lib/portage/dep/__init__.py | 12 +-----------
> 1 file changed, 1 insertion(+), 11 deletions(-)
>
> diff --git a/lib/portage/dep/__init__.py b/lib/portage/dep/__init__.py
> index 3b3577025..13c0f4ef7 100644
> --- a/lib/portage/dep/__init__.py
> +++ b/lib/portage/dep/__init__.py
> @@ -1489,17 +1489,7 @@ class Atom(str):
> def __init__(self, forbid_overlap=False):
> self.overlap = self._overlap(forbid=forbid_overlap)
>
> - def __new__(
> - cls,
> - s,
> - unevaluated_atom=None,
> - allow_wildcard=False,
> - allow_repo=None,
> - _use=None,
> - eapi=None,
> - is_valid_flag=None,
> - allow_build_id=None,
> - ):
> + def __new__(cls, s, *args, **kwargs):
> return str.__new__(cls, s)
>
> def __init__(
> --
> 2.34.1
>
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [gentoo-portage-dev] [PATCH 2/4] portage.eapi: use tuple instead of str for namedtuple definition
2022-02-24 4:14 ` [gentoo-portage-dev] [PATCH 2/4] portage.eapi: use tuple instead of str for namedtuple definition Matt Turner
@ 2022-03-09 1:12 ` Alec Warner
0 siblings, 0 replies; 8+ messages in thread
From: Alec Warner @ 2022-03-09 1:12 UTC (permalink / raw
To: gentoo-portage-dev; +Cc: Wolfgang E. Sanyer, Matt Turner
Looks merge-able.
On Wed, Feb 23, 2022 at 8:15 PM Matt Turner <mattst88@gentoo.org> wrote:
>
> From: "Wolfgang E. Sanyer" <WolfgangESanyer@gmail.com>
>
> Reviewed-by: Matt Turner <mattst88@gentoo.org>
> Signed-off-by: Wolfgang E. Sanyer <WolfgangESanyer@gmail.com>
> ---
> lib/portage/eapi.py | 52 ++++++++++++++++++++++++++++-----------------
> 1 file changed, 33 insertions(+), 19 deletions(-)
>
> diff --git a/lib/portage/eapi.py b/lib/portage/eapi.py
> index adee87d00..18069b04b 100644
> --- a/lib/portage/eapi.py
> +++ b/lib/portage/eapi.py
> @@ -288,25 +288,39 @@ def eapi_has_sysroot(eapi):
>
> _eapi_attrs = collections.namedtuple(
> "_eapi_attrs",
> - "allows_package_provided "
> - "bdepend "
> - "broot "
> - "dots_in_PN dots_in_use_flags "
> - "exports_AA "
> - "exports_EBUILD_PHASE_FUNC "
> - "exports_ECLASSDIR "
> - "exports_KV "
> - "exports_merge_type "
> - "exports_PORTDIR "
> - "exports_replace_vars "
> - "feature_flag_test "
> - "idepend iuse_defaults iuse_effective posixish_locale "
> - "path_variables_end_with_trailing_slash "
> - "prefix "
> - "repo_deps required_use required_use_at_most_one_of "
> - "selective_src_uri_restriction slot_operator slot_deps "
> - "src_uri_arrows strong_blocks use_deps use_dep_defaults "
> - "empty_groups_always_true sysroot",
> + (
> + "allows_package_provided",
> + "bdepend",
> + "broot",
> + "dots_in_PN",
> + "dots_in_use_flags",
> + "exports_AA",
> + "exports_EBUILD_PHASE_FUNC",
> + "exports_ECLASSDIR",
> + "exports_KV",
> + "exports_merge_type",
> + "exports_PORTDIR",
> + "exports_replace_vars",
> + "feature_flag_test",
> + "idepend",
> + "iuse_defaults",
> + "iuse_effective",
> + "posixish_locale",
> + "path_variables_end_with_trailing_slash",
> + "prefix",
> + "repo_deps",
> + "required_use",
> + "required_use_at_most_one_of",
> + "selective_src_uri_restriction",
> + "slot_operator",
> + "slot_deps",
> + "src_uri_arrows",
> + "strong_blocks",
> + "use_deps",
> + "use_dep_defaults",
> + "empty_groups_always_true",
> + "sysroot",
> + ),
> )
>
>
> --
> 2.34.1
>
>
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2022-03-09 1:12 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-02-24 4:14 [gentoo-portage-dev] [PATCH 1/4] portage.dep.Atom: Clean up __new__ parameters Matt Turner
2022-02-24 4:14 ` [gentoo-portage-dev] [PATCH 2/4] portage.eapi: use tuple instead of str for namedtuple definition Matt Turner
2022-03-09 1:12 ` Alec Warner
2022-02-24 4:14 ` [gentoo-portage-dev] [PATCH 3/4] portage.eapi: move None check to helper functions Matt Turner
2022-02-24 4:14 ` [gentoo-portage-dev] [PATCH 4/4] portage.eapi: use functools @lru_cache decorator instead of custom implementation Matt Turner
2022-02-26 18:04 ` Zac Medico
2022-02-26 22:26 ` Zac Medico
2022-03-09 1:11 ` [gentoo-portage-dev] [PATCH 1/4] portage.dep.Atom: Clean up __new__ parameters Alec Warner
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox