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"}