commit:     8b44b6914fe01ed042a7e725f7bf6ad3cfd036a8
Author:     Arthur Zamarin <arthurzam <AT> gentoo <DOT> org>
AuthorDate: Sat Oct  8 12:59:21 2022 +0000
Commit:     Arthur Zamarin <arthurzam <AT> gentoo <DOT> org>
CommitDate: Sat Oct  8 19:06:28 2022 +0000
URL:        
https://gitweb.gentoo.org/proj/pkgcore/pkgcheck.git/commit/?id=8b44b691

PythonWrongUsageCheck: fix for `python_gen_cond_dep`

Classes inheriting python-single-r1 should use python_gen_cond_dep
instead of python_gen_any_dep. This commit fixes the issue. This also
fixes for distutils-r1 with single mode on.

Signed-off-by: Arthur Zamarin <arthurzam <AT> gentoo.org>

 src/pkgcheck/checks/python.py                      | 29 ++++++++++++++--------
 .../expected.json                                  | 10 ++++----
 .../expected.json                                  |  8 +++---
 .../expected.json                                  |  4 +--
 4 files changed, 30 insertions(+), 21 deletions(-)

diff --git a/src/pkgcheck/checks/python.py b/src/pkgcheck/checks/python.py
index d96cb287..9bfa0bad 100644
--- a/src/pkgcheck/checks/python.py
+++ b/src/pkgcheck/checks/python.py
@@ -551,7 +551,7 @@ class 
PythonAnyMismatchedDepHasVersionCheck(results.VersionResult, results.Warni
     @property
     def desc(self):
         use_flags = ', '.join(map(str, self.use_flags))
-        return f'{self.dep_category}: missing check for 
{self.dep_atom}[{use_flags}] in {self.location}'
+        return f'{self.dep_category}: missing check for 
{self.dep_atom}[{use_flags}] in {self.location!r}'
 
 
 class PythonWrongUsageCheck(Check):
@@ -581,6 +581,12 @@ class PythonWrongUsageCheck(Check):
         'python_has_version': 'BDEPEND',
     }
 
+    eclass_any_dep_func = {
+        'python-single-r1': 'python_gen_cond_dep',
+        'python-any-r1': 'python_gen_any_dep',
+        'python-r1': 'python_gen_any_dep',
+    }
+
     @staticmethod
     def _prepare_deps(deps: str):
         try:
@@ -591,26 +597,26 @@ class PythonWrongUsageCheck(Check):
             return ()
 
 
-    def build_python_gen_any_dep_calls(self, pkg):
+    def build_python_gen_any_dep_calls(self, pkg, any_dep_func):
         check_deps = defaultdict(set)
         for var_node in pkg.global_query(bash.var_assign_query):
             name = pkg.node_str(var_node.child_by_field_name('name'))
             if name in {'DEPEND', 'BDEPEND'}:
                 for call_node, _ in bash.cmd_query.captures(var_node):
                     call_name = 
pkg.node_str(call_node.child_by_field_name('name'))
-                    if call_name == "python_gen_any_dep" and 
len(call_node.children) > 1:
+                    if call_name == any_dep_func and len(call_node.children) > 
1:
                         check_deps[name].update(self._prepare_deps(
                             pkg.node_str(call_node.children[1])))
         return {dep: frozenset(atoms) for dep, atoms in check_deps.items()}
 
-    def report_mismatch_check_deps(self, pkg, python_check_deps, 
has_version_checked_deps):
+    def report_mismatch_check_deps(self, pkg, python_check_deps, 
has_version_checked_deps, any_dep_func):
         for dep_type in frozenset(python_check_deps.keys()).union(
                 has_version_checked_deps.keys()):
             extra = has_version_checked_deps[dep_type] - 
python_check_deps.get(dep_type, set())
             missing = python_check_deps.get(dep_type, set()) - 
has_version_checked_deps[dep_type]
             for diff, other, location in (
-                (extra, missing, "python_check_deps"),
-                (missing, extra, "python_gen_any_dep"),
+                (extra, missing, any_dep_func),
+                (missing, extra, "python_check_deps"),
             ):
                 for dep in diff:
                     dep_atom = str(dep.versioned_atom)
@@ -634,7 +640,7 @@ class PythonWrongUsageCheck(Check):
             return 'DEPEND'
         return dep_type
 
-    def check_python_check_deps(self, pkg, func_node, python_check_deps):
+    def check_python_check_deps(self, pkg, func_node, python_check_deps, 
any_dep_func):
         has_version_checked_deps = defaultdict(set)
         has_version_lines = set()
         for node, _ in bash.cmd_query.captures(func_node):
@@ -661,11 +667,14 @@ class PythonWrongUsageCheck(Check):
         if has_version_lines:
             yield PythonHasVersionUsage(lines=sorted(has_version_lines), 
pkg=pkg)
 
-        yield from self.report_mismatch_check_deps(pkg, python_check_deps, 
has_version_checked_deps)
+        yield from self.report_mismatch_check_deps(pkg, python_check_deps, 
has_version_checked_deps, any_dep_func)
 
     def feed(self, pkg):
-        python_check_deps = self.build_python_gen_any_dep_calls(pkg)
+        if (python_eclass := get_python_eclass(pkg)) is None:
+            return
+        any_dep_func = self.eclass_any_dep_func[python_eclass]
+        python_check_deps = self.build_python_gen_any_dep_calls(pkg, 
any_dep_func)
         for func_node, _ in bash.func_query.captures(pkg.tree.root_node):
             func_name = pkg.node_str(func_node.child_by_field_name('name'))
             if func_name == "python_check_deps":
-                yield from self.check_python_check_deps(pkg, func_node, 
python_check_deps)
+                yield from self.check_python_check_deps(pkg, func_node, 
python_check_deps, any_dep_func)

diff --git 
a/testdata/data/repos/python/PythonWrongUsageCheck/PythonAnyMismatchedDepHasVersionCheck/expected.json
 
b/testdata/data/repos/python/PythonWrongUsageCheck/PythonAnyMismatchedDepHasVersionCheck/expected.json
index b23abc43..5bb14866 100644
--- 
a/testdata/data/repos/python/PythonWrongUsageCheck/PythonAnyMismatchedDepHasVersionCheck/expected.json
+++ 
b/testdata/data/repos/python/PythonWrongUsageCheck/PythonAnyMismatchedDepHasVersionCheck/expected.json
@@ -1,6 +1,6 @@
 {"__class__": "PythonHasVersionUsage", "category": "PythonWrongUsageCheck", 
"package": "PythonAnyMismatchedDepHasVersionCheck", "version": "0", "lines": 
[35, 36]}
-{"__class__": "PythonAnyMismatchedDepHasVersionCheck", "category": 
"PythonWrongUsageCheck", "package": "PythonAnyMismatchedDepHasVersionCheck", 
"version": "0", "dep_category": "BDEPEND", "dep_atom": "dev-python/flit_core", 
"use_flags": ["${PYTHON_USEDEP}"], "location": "python_check_deps"}
-{"__class__": "PythonAnyMismatchedDepHasVersionCheck", "category": 
"PythonWrongUsageCheck", "package": "PythonAnyMismatchedDepHasVersionCheck", 
"version": "0", "dep_category": "BDEPEND", "dep_atom": "dev-python/lxml", 
"use_flags": ["${PYTHON_USEDEP}"], "location": "python_gen_any_dep"}
-{"__class__": "PythonAnyMismatchedDepHasVersionCheck", "category": 
"PythonWrongUsageCheck", "package": "PythonAnyMismatchedDepHasVersionCheck", 
"version": "0", "dep_category": "DEPEND", "dep_atom": "dev-python/flit_core", 
"use_flags": ["${PYTHON_USEDEP}"], "location": "python_gen_any_dep"}
-{"__class__": "PythonAnyMismatchedDepHasVersionCheck", "category": 
"PythonWrongUsageCheck", "package": "PythonAnyMismatchedDepHasVersionCheck", 
"version": "0", "dep_category": "DEPEND", "dep_atom": "dev-python/lxml", 
"use_flags": ["${PYTHON_USEDEP}"], "location": "python_check_deps"}
-{"__class__": "PythonAnyMismatchedDepHasVersionCheck", "category": 
"PythonWrongUsageCheck", "package": "PythonAnyMismatchedDepHasVersionCheck", 
"version": "0", "dep_category": "RDEPEND", "dep_atom": "dev-python/lxml", 
"use_flags": ["${PYTHON_USEDEP}"], "location": "python_check_deps"}
+{"__class__": "PythonAnyMismatchedDepHasVersionCheck", "category": 
"PythonWrongUsageCheck", "package": "PythonAnyMismatchedDepHasVersionCheck", 
"version": "0", "dep_category": "BDEPEND", "dep_atom": "dev-python/flit_core", 
"use_flags": ["${PYTHON_USEDEP}"], "location": "python_gen_any_dep"}
+{"__class__": "PythonAnyMismatchedDepHasVersionCheck", "category": 
"PythonWrongUsageCheck", "package": "PythonAnyMismatchedDepHasVersionCheck", 
"version": "0", "dep_category": "BDEPEND", "dep_atom": "dev-python/lxml", 
"use_flags": ["${PYTHON_USEDEP}"], "location": "python_check_deps"}
+{"__class__": "PythonAnyMismatchedDepHasVersionCheck", "category": 
"PythonWrongUsageCheck", "package": "PythonAnyMismatchedDepHasVersionCheck", 
"version": "0", "dep_category": "DEPEND", "dep_atom": "dev-python/flit_core", 
"use_flags": ["${PYTHON_USEDEP}"], "location": "python_check_deps"}
+{"__class__": "PythonAnyMismatchedDepHasVersionCheck", "category": 
"PythonWrongUsageCheck", "package": "PythonAnyMismatchedDepHasVersionCheck", 
"version": "0", "dep_category": "DEPEND", "dep_atom": "dev-python/lxml", 
"use_flags": ["${PYTHON_USEDEP}"], "location": "python_gen_any_dep"}
+{"__class__": "PythonAnyMismatchedDepHasVersionCheck", "category": 
"PythonWrongUsageCheck", "package": "PythonAnyMismatchedDepHasVersionCheck", 
"version": "0", "dep_category": "RDEPEND", "dep_atom": "dev-python/lxml", 
"use_flags": ["${PYTHON_USEDEP}"], "location": "python_gen_any_dep"}

diff --git 
a/testdata/data/repos/python/PythonWrongUsageCheck/PythonAnyMismatchedUseHasVersionCheck/expected.json
 
b/testdata/data/repos/python/PythonWrongUsageCheck/PythonAnyMismatchedUseHasVersionCheck/expected.json
index e718bb83..1bc290bf 100644
--- 
a/testdata/data/repos/python/PythonWrongUsageCheck/PythonAnyMismatchedUseHasVersionCheck/expected.json
+++ 
b/testdata/data/repos/python/PythonWrongUsageCheck/PythonAnyMismatchedUseHasVersionCheck/expected.json
@@ -1,4 +1,4 @@
-{"__class__": "PythonAnyMismatchedUseHasVersionCheck", "category": 
"PythonWrongUsageCheck", "package": "PythonAnyMismatchedUseHasVersionCheck", 
"version": "0", "dep_category": "BDEPEND", "dep_atom": "dev-python/gpep517", 
"use_flags": ["xml"], "location": "python_gen_any_dep"}
-{"__class__": "PythonAnyMismatchedUseHasVersionCheck", "category": 
"PythonWrongUsageCheck", "package": "PythonAnyMismatchedUseHasVersionCheck", 
"version": "0", "dep_category": "BDEPEND", "dep_atom": "dev-python/lxml", 
"use_flags": ["threads"], "location": "python_check_deps"}
-{"__class__": "PythonAnyMismatchedUseHasVersionCheck", "category": 
"PythonWrongUsageCheck", "package": "PythonAnyMismatchedUseHasVersionCheck", 
"version": "1", "dep_category": "BDEPEND", "dep_atom": "dev-python/flit", 
"use_flags": ["threads"], "location": "python_gen_any_dep"}
-{"__class__": "PythonAnyMismatchedUseHasVersionCheck", "category": 
"PythonWrongUsageCheck", "package": "PythonAnyMismatchedUseHasVersionCheck", 
"version": "1", "dep_category": "BDEPEND", "dep_atom": "dev-python/gpep517", 
"use_flags": ["xml"], "location": "python_check_deps"}
+{"__class__": "PythonAnyMismatchedUseHasVersionCheck", "category": 
"PythonWrongUsageCheck", "package": "PythonAnyMismatchedUseHasVersionCheck", 
"version": "0", "dep_category": "BDEPEND", "dep_atom": "dev-python/gpep517", 
"use_flags": ["xml"], "location": "python_check_deps"}
+{"__class__": "PythonAnyMismatchedUseHasVersionCheck", "category": 
"PythonWrongUsageCheck", "package": "PythonAnyMismatchedUseHasVersionCheck", 
"version": "0", "dep_category": "BDEPEND", "dep_atom": "dev-python/lxml", 
"use_flags": ["threads"], "location": "python_gen_any_dep"}
+{"__class__": "PythonAnyMismatchedUseHasVersionCheck", "category": 
"PythonWrongUsageCheck", "package": "PythonAnyMismatchedUseHasVersionCheck", 
"version": "1", "dep_category": "BDEPEND", "dep_atom": "dev-python/flit", 
"use_flags": ["threads"], "location": "python_check_deps"}
+{"__class__": "PythonAnyMismatchedUseHasVersionCheck", "category": 
"PythonWrongUsageCheck", "package": "PythonAnyMismatchedUseHasVersionCheck", 
"version": "1", "dep_category": "BDEPEND", "dep_atom": "dev-python/gpep517", 
"use_flags": ["xml"], "location": "python_gen_any_dep"}

diff --git 
a/testdata/data/repos/python/PythonWrongUsageCheck/PythonHasVersionMissingPythonUseDep/expected.json
 
b/testdata/data/repos/python/PythonWrongUsageCheck/PythonHasVersionMissingPythonUseDep/expected.json
index 130abd04..515ee14b 100644
--- 
a/testdata/data/repos/python/PythonWrongUsageCheck/PythonHasVersionMissingPythonUseDep/expected.json
+++ 
b/testdata/data/repos/python/PythonWrongUsageCheck/PythonHasVersionMissingPythonUseDep/expected.json
@@ -1,5 +1,5 @@
 {"__class__": "PythonHasVersionMissingPythonUseDep", "category": 
"PythonWrongUsageCheck", "package": "PythonHasVersionMissingPythonUseDep", 
"version": "0", "line": "dev-python/lxml", "lineno": 25}
 {"__class__": "PythonHasVersionMissingPythonUseDep", "category": 
"PythonWrongUsageCheck", "package": "PythonHasVersionMissingPythonUseDep", 
"version": "0", "line": "dev-python/gpep517", "lineno": 26}
 {"__class__": "PythonHasVersionUsage", "category": "PythonWrongUsageCheck", 
"package": "PythonHasVersionMissingPythonUseDep", "version": "0", "lines": [25]}
-{"__class__": "PythonAnyMismatchedDepHasVersionCheck", "category": 
"PythonWrongUsageCheck", "package": "PythonHasVersionMissingPythonUseDep", 
"version": "0", "dep_category": "BDEPEND", "dep_atom": "dev-python/gpep517", 
"use_flags": ["${PYTHON_USEDEP}"], "location": "python_gen_any_dep"}
-{"__class__": "PythonAnyMismatchedDepHasVersionCheck", "category": 
"PythonWrongUsageCheck", "package": "PythonHasVersionMissingPythonUseDep", 
"version": "0", "dep_category": "BDEPEND", "dep_atom": "dev-python/lxml", 
"use_flags": ["${PYTHON_USEDEP}"], "location": "python_gen_any_dep"}
+{"__class__": "PythonAnyMismatchedDepHasVersionCheck", "category": 
"PythonWrongUsageCheck", "package": "PythonHasVersionMissingPythonUseDep", 
"version": "0", "dep_category": "BDEPEND", "dep_atom": "dev-python/gpep517", 
"use_flags": ["${PYTHON_USEDEP}"], "location": "python_check_deps"}
+{"__class__": "PythonAnyMismatchedDepHasVersionCheck", "category": 
"PythonWrongUsageCheck", "package": "PythonHasVersionMissingPythonUseDep", 
"version": "0", "dep_category": "BDEPEND", "dep_atom": "dev-python/lxml", 
"use_flags": ["${PYTHON_USEDEP}"], "location": "python_check_deps"}

Reply via email to