commit: 8b0c541f4f0d62c4eeac440b3fdfcde1848ac829 Author: Michał Górny <mgorny <AT> gentoo <DOT> org> AuthorDate: Wed Jul 9 07:39:55 2025 +0000 Commit: Arthur Zamarin <arthurzam <AT> gentoo <DOT> org> CommitDate: Fri Jul 11 19:26:02 2025 +0000 URL: https://gitweb.gentoo.org/proj/pkgcore/pkgcheck.git/commit/?id=8b0c541f
DependencyCheck: extend missing revision checks to `<=` and `>` Extend missing package revision in dependency check to `<=` and `>` operators. They are similar to `=` in that it only match specific revision, while people often expect them to match the whole version. While at it, extend tests to checking blockers too. Signed-off-by: Michał Górny <mgorny <AT> gentoo.org> Part-of: https://github.com/pkgcore/pkgcheck/pull/743 Signed-off-by: Arthur Zamarin <arthurzam <AT> gentoo.org> src/pkgcheck/checks/metadata.py | 27 +++++----- .../MissingPackageRevision/expected.json | 7 ++- .../MissingPackageRevision/fix.patch | 57 +++++++++++++++++++--- ...0.ebuild => MissingPackageRevision-0-r1.ebuild} | 3 +- .../MissingPackageRevision-0.ebuild | 3 +- ...0.ebuild => MissingPackageRevision-1-r1.ebuild} | 3 +- ...on-0.ebuild => MissingPackageRevision-1.ebuild} | 3 +- ...0.ebuild => MissingPackageRevision-2-r1.ebuild} | 3 +- ...on-0.ebuild => MissingPackageRevision-2.ebuild} | 3 +- .../repos/standalone/stub/stub5/stub5-1.ebuild | 4 ++ 10 files changed, 89 insertions(+), 24 deletions(-) diff --git a/src/pkgcheck/checks/metadata.py b/src/pkgcheck/checks/metadata.py index f20d20e2..429c774f 100644 --- a/src/pkgcheck/checks/metadata.py +++ b/src/pkgcheck/checks/metadata.py @@ -745,23 +745,26 @@ class MissingSlotDepCheck(Check): class MissingPackageRevision(results.VersionResult, results.Warning): """Missing package revision in =cat/pkg dependencies. - The dependency string uses the ``=`` operator without specifying a revision. - This means that only ``-r0`` of the dependency will be matched, and newer - revisions of the same ebuild will not be accepted. - - If any revision of the package is acceptable, the ``~`` operator should be - used instead of ``=``. If only the initial revision of the dependency is - allowed, ``-r0`` should be appended in order to make the intent explicit. + The dependency string uses the ``=``, ``<=`` or ``>`` operator without + specifying a revision. These operators are frequently misused, + with assumptions they apply to all revisions of the given version, + while they do only apply to ``-r0``. + + If applying the operator to ``-r0`` only is intentional, then ``-r0`` + should be appended to make it explicit. Otheriwse, ``~`` can be used + instead of ``=``, and ``-r9999`` or next version can be used for other + operators. """ - def __init__(self, dep, atom, **kwargs): + def __init__(self, dep, op, atom, **kwargs): super().__init__(**kwargs) self.dep = dep.upper() + self.op = op self.atom = atom @property def desc(self): - return f'"=" operator used without package revision: {self.dep}="{self.atom}"' + return f'"{self.op}" operator used without package revision: {self.dep}="{self.atom}"' class MissingUseDepDefault(results.VersionResult, results.Warning): @@ -954,8 +957,10 @@ class DependencyCheck(Check): pkgs = (x.cpvstr for x in sorted(atoms)) yield MissingUseDepDefault(attr, str(atom), use, pkgs, pkg=pkg) - if atom.op == "=" and not atom.revision: - yield MissingPackageRevision(attr, str(atom), pkg=pkg) + # these operators are most likely to mean "the whole version" rather than r0 + # blockers also matched intentionally + if atom.op in ("=", "<=", ">") and not atom.revision: + yield MissingPackageRevision(attr, atom.op, str(atom), pkg=pkg) if isinstance(atom, transitive_use_atom) and atom.use is not None: for useflag in atom.use: diff --git a/testdata/data/repos/standalone/DependencyCheck/MissingPackageRevision/expected.json b/testdata/data/repos/standalone/DependencyCheck/MissingPackageRevision/expected.json index 12d3f28c..96124dea 100644 --- a/testdata/data/repos/standalone/DependencyCheck/MissingPackageRevision/expected.json +++ b/testdata/data/repos/standalone/DependencyCheck/MissingPackageRevision/expected.json @@ -1 +1,6 @@ -{"__class__": "MissingPackageRevision", "category": "DependencyCheck", "package": "MissingPackageRevision", "version": "0", "dep": "RDEPEND", "atom": "=stub/stub1-0"} +{"__class__": "MissingPackageRevision", "category": "DependencyCheck", "package": "MissingPackageRevision", "version": "0", "dep": "RDEPEND", "op": "=", "atom": "=stub/stub5-1"} +{"__class__": "MissingPackageRevision", "category": "DependencyCheck", "package": "MissingPackageRevision", "version": "1", "dep": "DEPEND", "op": "<=", "atom": "<=stub/stub5-1"} +{"__class__": "MissingPackageRevision", "category": "DependencyCheck", "package": "MissingPackageRevision", "version": "2", "dep": "BDEPEND", "op": ">", "atom": ">stub/stub5-0"} +{"__class__": "MissingPackageRevision", "category": "DependencyCheck", "package": "MissingPackageRevision", "version": "0-r1", "dep": "RDEPEND", "op": "=", "atom": "!=stub/stub5-0"} +{"__class__": "MissingPackageRevision", "category": "DependencyCheck", "package": "MissingPackageRevision", "version": "1-r1", "dep": "RDEPEND", "op": "<=", "atom": "!<=stub/stub5-0"} +{"__class__": "MissingPackageRevision", "category": "DependencyCheck", "package": "MissingPackageRevision", "version": "2-r1", "dep": "RDEPEND", "op": ">", "atom": "!>stub/stub5-2"} diff --git a/testdata/data/repos/standalone/DependencyCheck/MissingPackageRevision/fix.patch b/testdata/data/repos/standalone/DependencyCheck/MissingPackageRevision/fix.patch index 2a745c6b..fbc0bc8f 100644 --- a/testdata/data/repos/standalone/DependencyCheck/MissingPackageRevision/fix.patch +++ b/testdata/data/repos/standalone/DependencyCheck/MissingPackageRevision/fix.patch @@ -1,9 +1,54 @@ -diff -Naur standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-0.ebuild fixed/DependencyCheck/MissingPackageRevision/MissingPackageRevision-0.ebuild ---- standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-0.ebuild 2019-09-17 11:01:07.112319931 -0600 -+++ fixed/DependencyCheck/MissingPackageRevision/MissingPackageRevision-0.ebuild 2019-09-17 11:01:44.129474002 -0600 -@@ -2,4 +2,4 @@ +diff '--color=auto' -Naur standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-0.ebuild fixed/DependencyCheck/MissingPackageRevision/MissingPackageRevision-0.ebuild +--- standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-0.ebuild 2025-07-11 20:33:18.115300871 +0200 ++++ fixed/DependencyCheck/MissingPackageRevision/MissingPackageRevision-0.ebuild 2025-07-11 20:36:42.713486151 +0200 +@@ -3,4 +3,4 @@ HOMEPAGE="https://github.com/pkgcore/pkgcheck" LICENSE="BSD" SLOT="0" --RDEPEND="=stub/stub1-0" -+RDEPEND="=stub/stub1-0-r0" +-RDEPEND="=stub/stub5-1" ++RDEPEND="=stub/stub5-1*" +diff '--color=auto' -Naur standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-0-r1.ebuild fixed/DependencyCheck/MissingPackageRevision/MissingPackageRevision-0-r1.ebuild +--- standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-0-r1.ebuild 2025-07-11 20:33:18.118506850 +0200 ++++ fixed/DependencyCheck/MissingPackageRevision/MissingPackageRevision-0-r1.ebuild 2025-07-11 20:36:47.024571459 +0200 +@@ -3,4 +3,4 @@ + HOMEPAGE="https://github.com/pkgcore/pkgcheck" + LICENSE="BSD" + SLOT="0" +-RDEPEND="!=stub/stub5-0" ++RDEPEND="!=stub/stub5-0-r0" +diff '--color=auto' -Naur standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-1.ebuild fixed/DependencyCheck/MissingPackageRevision/MissingPackageRevision-1.ebuild +--- standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-1.ebuild 2025-07-11 20:33:18.118620876 +0200 ++++ fixed/DependencyCheck/MissingPackageRevision/MissingPackageRevision-1.ebuild 2025-07-11 20:36:47.028861737 +0200 +@@ -3,4 +3,4 @@ + HOMEPAGE="https://github.com/pkgcore/pkgcheck" + LICENSE="BSD" + SLOT="0" +-DEPEND="<=stub/stub5-1" ++DEPEND="<=stub/stub5-1-r0" +diff '--color=auto' -Naur standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-1-r1.ebuild fixed/DependencyCheck/MissingPackageRevision/MissingPackageRevision-1-r1.ebuild +--- standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-1-r1.ebuild 2025-07-11 20:33:18.118761613 +0200 ++++ fixed/DependencyCheck/MissingPackageRevision/MissingPackageRevision-1-r1.ebuild 2025-07-11 20:36:47.032675190 +0200 +@@ -3,4 +3,4 @@ + HOMEPAGE="https://github.com/pkgcore/pkgcheck" + LICENSE="BSD" + SLOT="0" +-RDEPEND="!<=stub/stub5-0" ++RDEPEND="!<=stub/stub5-0-r0" +diff '--color=auto' -Naur standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-2.ebuild fixed/DependencyCheck/MissingPackageRevision/MissingPackageRevision-2.ebuild +--- standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-2.ebuild 2025-07-11 20:33:18.118865451 +0200 ++++ fixed/DependencyCheck/MissingPackageRevision/MissingPackageRevision-2.ebuild 2025-07-11 20:36:47.036494443 +0200 +@@ -3,4 +3,4 @@ + HOMEPAGE="https://github.com/pkgcore/pkgcheck" + LICENSE="BSD" + SLOT="0" +-BDEPEND=">stub/stub5-0" ++BDEPEND=">stub/stub5-0-r0" +diff '--color=auto' -Naur standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-2-r1.ebuild fixed/DependencyCheck/MissingPackageRevision/MissingPackageRevision-2-r1.ebuild +--- standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-2-r1.ebuild 2025-07-11 20:33:18.118974788 +0200 ++++ fixed/DependencyCheck/MissingPackageRevision/MissingPackageRevision-2-r1.ebuild 2025-07-11 20:34:29.433665350 +0200 +@@ -3,4 +3,4 @@ + HOMEPAGE="https://github.com/pkgcore/pkgcheck" + LICENSE="BSD" + SLOT="0" +-RDEPEND="!>stub/stub5-2" ++RDEPEND="!>stub/stub5-2-r0" diff --git a/testdata/repos/standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-0.ebuild b/testdata/repos/standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-0-r1.ebuild similarity index 80% copy from testdata/repos/standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-0.ebuild copy to testdata/repos/standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-0-r1.ebuild index ae4a12bd..499ab859 100644 --- a/testdata/repos/standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-0.ebuild +++ b/testdata/repos/standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-0-r1.ebuild @@ -1,5 +1,6 @@ +EAPI=8 DESCRIPTION="Ebuild with missing package revision in dependency" HOMEPAGE="https://github.com/pkgcore/pkgcheck" LICENSE="BSD" SLOT="0" -RDEPEND="=stub/stub1-0" +RDEPEND="!=stub/stub5-0" diff --git a/testdata/repos/standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-0.ebuild b/testdata/repos/standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-0.ebuild index ae4a12bd..5354db8d 100644 --- a/testdata/repos/standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-0.ebuild +++ b/testdata/repos/standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-0.ebuild @@ -1,5 +1,6 @@ +EAPI=8 DESCRIPTION="Ebuild with missing package revision in dependency" HOMEPAGE="https://github.com/pkgcore/pkgcheck" LICENSE="BSD" SLOT="0" -RDEPEND="=stub/stub1-0" +RDEPEND="=stub/stub5-1" diff --git a/testdata/repos/standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-0.ebuild b/testdata/repos/standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-1-r1.ebuild similarity index 80% copy from testdata/repos/standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-0.ebuild copy to testdata/repos/standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-1-r1.ebuild index ae4a12bd..fe8d65c7 100644 --- a/testdata/repos/standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-0.ebuild +++ b/testdata/repos/standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-1-r1.ebuild @@ -1,5 +1,6 @@ +EAPI=8 DESCRIPTION="Ebuild with missing package revision in dependency" HOMEPAGE="https://github.com/pkgcore/pkgcheck" LICENSE="BSD" SLOT="0" -RDEPEND="=stub/stub1-0" +RDEPEND="!<=stub/stub5-0" diff --git a/testdata/repos/standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-0.ebuild b/testdata/repos/standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-1.ebuild similarity index 81% copy from testdata/repos/standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-0.ebuild copy to testdata/repos/standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-1.ebuild index ae4a12bd..203b4879 100644 --- a/testdata/repos/standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-0.ebuild +++ b/testdata/repos/standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-1.ebuild @@ -1,5 +1,6 @@ +EAPI=8 DESCRIPTION="Ebuild with missing package revision in dependency" HOMEPAGE="https://github.com/pkgcore/pkgcheck" LICENSE="BSD" SLOT="0" -RDEPEND="=stub/stub1-0" +DEPEND="<=stub/stub5-1" diff --git a/testdata/repos/standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-0.ebuild b/testdata/repos/standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-2-r1.ebuild similarity index 80% copy from testdata/repos/standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-0.ebuild copy to testdata/repos/standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-2-r1.ebuild index ae4a12bd..9de8ae58 100644 --- a/testdata/repos/standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-0.ebuild +++ b/testdata/repos/standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-2-r1.ebuild @@ -1,5 +1,6 @@ +EAPI=8 DESCRIPTION="Ebuild with missing package revision in dependency" HOMEPAGE="https://github.com/pkgcore/pkgcheck" LICENSE="BSD" SLOT="0" -RDEPEND="=stub/stub1-0" +RDEPEND="!>stub/stub5-2" diff --git a/testdata/repos/standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-0.ebuild b/testdata/repos/standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-2.ebuild similarity index 81% copy from testdata/repos/standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-0.ebuild copy to testdata/repos/standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-2.ebuild index ae4a12bd..14f5d5c1 100644 --- a/testdata/repos/standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-0.ebuild +++ b/testdata/repos/standalone/DependencyCheck/MissingPackageRevision/MissingPackageRevision-2.ebuild @@ -1,5 +1,6 @@ +EAPI=8 DESCRIPTION="Ebuild with missing package revision in dependency" HOMEPAGE="https://github.com/pkgcore/pkgcheck" LICENSE="BSD" SLOT="0" -RDEPEND="=stub/stub1-0" +BDEPEND=">stub/stub5-0" diff --git a/testdata/repos/standalone/stub/stub5/stub5-1.ebuild b/testdata/repos/standalone/stub/stub5/stub5-1.ebuild new file mode 100644 index 00000000..54922dd1 --- /dev/null +++ b/testdata/repos/standalone/stub/stub5/stub5-1.ebuild @@ -0,0 +1,4 @@ +DESCRIPTION="Stub ebuild used to suppress other repo-level keyword output" +HOMEPAGE="https://github.com/pkgcore/pkgcheck" +LICENSE="BSD" +SLOT="0"
