commit:     eb6f4edd28d8e25e7ce5aa246f246c51a8bb2211
Author:     Brian Harring <ferringb <AT> gmail <DOT> com>
AuthorDate: Mon Dec 26 00:21:59 2022 +0000
Commit:     Arthur Zamarin <arthurzam <AT> gentoo <DOT> org>
CommitDate: Mon Dec 26 17:27:24 2022 +0000
URL:        
https://gitweb.gentoo.org/proj/pkgcore/pkgcore.git/commit/?id=eb6f4edd

Move valid_use_flag parsing out of atom, rely upon eapi obj.

EAPI objects are responsible for deciding the rules of how to parse
atoms, and this extends to use flags.  Thus just ask the EAPI obj
to tell us "is it valid?".

In moving this out of atom.py it allows us to lace that validation
into other configuration loading aspects of the code.

Signed-off-by: Brian Harring <ferringb <AT> gmail.com>
Signed-off-by: Arthur Zamarin <arthurzam <AT> gentoo.org>

 src/pkgcore/ebuild/atom.py | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/src/pkgcore/ebuild/atom.py b/src/pkgcore/ebuild/atom.py
index 1be4405ac..c24a6d9ef 100644
--- a/src/pkgcore/ebuild/atom.py
+++ b/src/pkgcore/ebuild/atom.py
@@ -11,13 +11,14 @@ import string
 
 from snakeoil import klass
 from snakeoil.compatibility import cmp
-from snakeoil.demandload import demand_compile_regexp
 
 from ..restrictions import boolean, packages, restriction, values
 from ..restrictions.packages import AndRestriction as PkgAndRestriction
 from ..restrictions.packages import Conditional
 from ..restrictions.values import ContainmentMatch
-from . import cpv, errors, restricts
+from . import cpv
+from . import eapi as eapi_mod
+from . import errors, restricts
 
 # namespace compatibility...
 MalformedAtom = errors.MalformedAtom
@@ -34,8 +35,6 @@ valid_repo_chars = frozenset(valid_repo_chars)
 valid_slot_chars = frozenset(valid_slot_chars)
 valid_ops = frozenset(["<", "<=", "=", "~", ">=", ">"])
 
-demand_compile_regexp("valid_use_flag", r"^[A-Za-z0-9][A-Za-z0-9+_@-]*$")
-
 
 class atom(boolean.AndRestriction, metaclass=klass.generic_equality):
     """Currently implements gentoo ebuild atom parsing.
@@ -102,6 +101,9 @@ class atom(boolean.AndRestriction, 
metaclass=klass.generic_equality):
         override_kls = False
         use_start = atom.find("[")
         slot_start = atom.find(":")
+        eapi_obj = eapi_mod.get_eapi(
+            eapi if eapi != "-1" else eapi_mod.LATEST_PMS_EAPI_VER
+        )
 
         if use_start != -1:
             # use dep
@@ -137,7 +139,7 @@ class atom(boolean.AndRestriction, 
metaclass=klass.generic_equality):
 
                     if not x:
                         raise errors.MalformedAtom(orig_atom, "empty use dep 
detected")
-                    if not valid_use_flag.match(x):
+                    if not eapi_obj.is_valid_use_flag(x):
                         raise errors.MalformedAtom(
                             orig_atom, f"invalid USE flag: {x!r}"
                         )

Reply via email to