commit:     5b36a2b34988a4277ffa60da037a0fb8bce00d58
Author:     Jannik Glückert <jannik.glueckert <AT> gmail <DOT> com>
AuthorDate: Sat Jun 14 18:35:19 2025 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Mon Oct 20 17:31:52 2025 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=5b36a2b3

portage.dep.Atom: make regexes more readable

Signed-off-by: Jannik Glückert <jannik.glueckert <AT> gmail.com>
Part-of: https://github.com/gentoo/portage/pull/1445
Signed-off-by: Sam James <sam <AT> gentoo.org>

 lib/portage/dep/__init__.py | 100 ++++++++++++++++++++++++--------------------
 1 file changed, 55 insertions(+), 45 deletions(-)

diff --git a/lib/portage/dep/__init__.py b/lib/portage/dep/__init__.py
index 98999609b4..aedc2606a2 100644
--- a/lib/portage/dep/__init__.py
+++ b/lib/portage/dep/__init__.py
@@ -125,25 +125,24 @@ def _get_atom_re(eapi_attrs: portage.eapi._eapi_attrs) -> 
re.Pattern:
     cpv_re = _cpv
 
     _atom_re = re.compile(
-        "^(?P<without_use>(?:"
-        + "(?P<op>"
-        + _op
-        + cpv_re
-        + ")|"
-        + "(?P<star>="
-        + cpv_re
-        + r"\*)|"
-        + "(?P<simple>"
-        + cp_re
-        + "))"
-        + "("
-        + _slot_separator
-        + _slot_loose
-        + ")?"
-        + _repo
-        + ")("
-        + _use
-        + ")?\\Z",
+        rf"""
+        ^
+        (?P<without_use>
+            (?:
+                (?P<op>{_op}{cpv_re})
+                |
+                (?P<star>={cpv_re}\*)
+                |
+                (?P<simple>{cp_re})
+            )
+            (?:
+                {_slot_separator}{_slot_loose}
+            )?
+            {_repo}
+        )
+        (?P<usedeps>{_use})?
+        \Z
+        """,
         re.VERBOSE | re.ASCII,
     )
     return _atom_re
@@ -160,26 +159,37 @@ def _get_atom_wildcard_re(eapi_attrs):
     pkg_re = r"[\w+*][\w+*-]*?"
 
     _atom_wildcard_re = re.compile(
-        r"((?P<simple>("
-        + _extended_cat
-        + r")/("
-        + pkg_re
-        + r"(-"
-        + _vr
-        + ")?))"
-        + "|(?P<star>=(("
-        + _extended_cat
-        + r")/("
-        + pkg_re
-        + r"))-(?P<version>\*\w+\*)))"
-        + "(:(?P<slot>"
-        + _slot_loose
-        + r"))?("
-        + _repo_separator
-        + r"(?P<repo>"
-        + _repo_name
-        + r"))?\Z",
-        re.ASCII,
+        rf"""
+        ^
+        (?:
+            (?P<simple>
+                {_extended_cat}
+                /
+                {pkg_re}
+                (?:
+                    -{_vr}
+                )?
+            )
+            |
+            (?P<star>=
+                {_extended_cat}
+                /
+                {pkg_re}
+                -
+                (?P<version>\*\w+\*)
+            )
+        )
+        (?:
+            :
+            (?P<slot>{_slot_loose})
+        )?
+        (?:
+            {_repo_separator}
+            (?P<repo>{_repo_name})
+        )?
+        \Z
+        """,
+        re.VERBOSE | re.ASCII,
     )
     return _atom_wildcard_re
 
@@ -1530,10 +1540,10 @@ class Atom(str):
                 m_group = m.group
                 if m_group("star") is not None:
                     op = "=*"
-                    base = atom_re.groupindex["star"]
-                    cp = m_group(base + 1)
                     cpv = m_group("star")[1:]
-                    extended_version = m_group(base + 4)
+                    extended_version = m_group("version")
+                    # Drop trailing "-{version}" from the cpv to get cp.
+                    cp = cpv[: -(len(extended_version) + 1)]
                 else:
                     op = None
                     cpv = cp = m_group("simple")
@@ -1555,7 +1565,7 @@ class Atom(str):
             cp = m_group(base + 3)
             slot = m_group(atom_re.groups - 2)
             repo = m_group(atom_re.groups - 1)
-            use_str = m_group(atom_re.groups)
+            use_str = m_group("usedeps")
             version = m_group(base + 4)
             if version is not None:
                 if allow_build_id:
@@ -1580,7 +1590,7 @@ class Atom(str):
             cp = m_group(base + 2)
             slot = m_group(atom_re.groups - 2)
             repo = m_group(atom_re.groups - 1)
-            use_str = m_group(atom_re.groups)
+            use_str = m_group("usedeps")
             if m_group(base + 3) is not None:
                 raise InvalidAtom(self)
         elif m.group("simple") is not None:
@@ -1589,7 +1599,7 @@ class Atom(str):
             cpv = cp = m_group(atom_re.groupindex["simple"] + 1)
             slot = m_group(atom_re.groups - 2)
             repo = m_group(atom_re.groups - 1)
-            use_str = m_group(atom_re.groups)
+            use_str = m_group("usedeps")
             if m_group(atom_re.groupindex["simple"] + 2) is not None:
                 raise InvalidAtom(self)
 

Reply via email to