* [gentoo-commits] proj/pkgcore/pkgcheck:master commit in: testdata/data/repos/profiledir/RedundantVersionCheck/RedundantVersion/, ...
@ 2022-10-12 17:48 Arthur Zamarin
0 siblings, 0 replies; only message in thread
From: Arthur Zamarin @ 2022-10-12 17:48 UTC (permalink / raw
To: gentoo-commits
commit: 6b162965a4df53510babbff48c5e59226e77cee5
Author: Arthur Zamarin <arthurzam <AT> gentoo <DOT> org>
AuthorDate: Tue Oct 11 20:04:45 2022 +0000
Commit: Arthur Zamarin <arthurzam <AT> gentoo <DOT> org>
CommitDate: Wed Oct 12 17:40:27 2022 +0000
URL: https://gitweb.gentoo.org/proj/pkgcore/pkgcheck.git/commit/?id=6b162965
RedundantVersionCheck: consider profile masks during check
When checking for redundant version, also check that on a profile
doesn't exist where the package is visible, but all later versions
aren't, which means that this package isn't redundant on that profile.
Resolves: https://github.com/pkgcore/pkgcheck/issues/465
Signed-off-by: Arthur Zamarin <arthurzam <AT> gentoo.org>
src/pkgcheck/addons/profiles.py | 4 +++
src/pkgcheck/checks/cleanup.py | 37 ++++++++++++++++++++--
.../RedundantVersion/expected.json | 3 ++
.../RedundantVersion/RedundantVersion-1.ebuild | 5 +++
.../RedundantVersion/RedundantVersion-2.ebuild | 5 +++
.../RedundantVersion/RedundantVersion-3.ebuild | 5 +++
.../RedundantVersion/RedundantVersion-4.ebuild | 5 +++
.../RedundantVersion/RedundantVersion-5.ebuild | 5 +++
.../RedundantVersion/RedundantVersion-6.ebuild | 5 +++
testdata/repos/profiledir/profiles/arch.list | 1 +
testdata/repos/profiledir/profiles/profiles.desc | 4 +++
.../repos/profiledir/profiles/redundant/amd64/eapi | 1 +
.../profiledir/profiles/redundant/amd64/musl/eapi | 1 +
.../profiles/redundant/amd64/musl/package.mask | 2 ++
.../profiles/redundant/amd64/musl/parent | 1 +
.../profiles/redundant/amd64/package.mask | 3 ++
.../profiledir/profiles/redundant/amd64/parent | 1 +
testdata/repos/profiledir/profiles/redundant/eapi | 1 +
.../profiledir/profiles/redundant/package.mask | 1 +
.../repos/profiledir/profiles/redundant/x86/eapi | 1 +
.../profiledir/profiles/redundant/x86/package.mask | 2 ++
.../repos/profiledir/profiles/redundant/x86/parent | 1 +
tests/checks/test_cleanup.py | 4 +--
23 files changed, 93 insertions(+), 5 deletions(-)
diff --git a/src/pkgcheck/addons/profiles.py b/src/pkgcheck/addons/profiles.py
index 4e3fc3e1..02b31eda 100644
--- a/src/pkgcheck/addons/profiles.py
+++ b/src/pkgcheck/addons/profiles.py
@@ -396,6 +396,10 @@ class ProfileAddon(caches.CachedAddon):
except KeyError:
return default
+ def items(self):
+ """Iterate over all keywords and profiles."""
+ return self.profile_filters.items()
+
def __iter__(self):
"""Iterate over all profile data objects."""
return chain.from_iterable(self.profile_filters.values())
diff --git a/src/pkgcheck/checks/cleanup.py b/src/pkgcheck/checks/cleanup.py
index 8d02db7d..076d56be 100644
--- a/src/pkgcheck/checks/cleanup.py
+++ b/src/pkgcheck/checks/cleanup.py
@@ -1,6 +1,9 @@
+from operator import attrgetter
+
+from snakeoil.mappings import defaultdictkey
from snakeoil.strings import pluralism
-from .. import results, sources
+from .. import addons, results, sources
from . import Check
@@ -31,6 +34,7 @@ class RedundantVersionCheck(Check):
"""
_source = sources.PackageRepoSource
+ required_addons = (addons.profiles.ProfileAddon,)
known_results = frozenset([RedundantVersion])
@staticmethod
@@ -44,6 +48,31 @@ class RedundantVersionCheck(Check):
successful stabilization.
""")
+ def __init__(self, *args, profile_addon):
+ super().__init__(*args)
+ self.keywords_profiles = {
+ keyword: sorted(profiles, key=attrgetter('name'))
+ for keyword, profiles in profile_addon.items()}
+
+ def filter_later_profiles_masks(self, visible_cache, pkg, later_versions):
+ # check both stable/unstable profiles for stable KEYWORDS and only
+ # unstable profiles for unstable KEYWORDS
+ keywords = []
+ for keyword in pkg.sorted_keywords:
+ if keyword[0] != '~':
+ keywords.append('~' + keyword)
+ keywords.append(keyword)
+
+ # if a profile exists, where the package is visible, but the later aren't
+ # then it isn't redundant
+ visible_profiles = tuple(profile
+ for keyword in keywords
+ for profile in self.keywords_profiles.get(keyword, ())
+ if visible_cache[(profile, pkg)])
+ return tuple(
+ later for later in later_versions
+ if all(visible_cache[(profile, later)] for profile in visible_profiles))
+
def feed(self, pkgset):
if len(pkgset) == 1:
return
@@ -77,8 +106,10 @@ class RedundantVersionCheck(Check):
if matches:
bad.append((pkg, matches))
+ visible_cache = defaultdictkey(lambda profile_pkg: profile_pkg[0].visible(profile_pkg[1]))
for pkg, matches in reversed(bad):
- later_versions = (x.fullver for x in sorted(matches))
if self.options.stable_only and all(key.startswith('~') for x in matches for key in x.keywords):
continue
- yield RedundantVersion(pkg.slot, later_versions, pkg=pkg)
+ if matches := self.filter_later_profiles_masks(visible_cache, pkg, matches):
+ later_versions = (x.fullver for x in sorted(matches))
+ yield RedundantVersion(pkg.slot, later_versions, pkg=pkg)
diff --git a/testdata/data/repos/profiledir/RedundantVersionCheck/RedundantVersion/expected.json b/testdata/data/repos/profiledir/RedundantVersionCheck/RedundantVersion/expected.json
new file mode 100644
index 00000000..cb467108
--- /dev/null
+++ b/testdata/data/repos/profiledir/RedundantVersionCheck/RedundantVersion/expected.json
@@ -0,0 +1,3 @@
+{"__class__": "RedundantVersion", "category": "RedundantVersionCheck", "package": "RedundantVersion", "version": "3", "slot": "0", "later_versions": ["6"]}
+{"__class__": "RedundantVersion", "category": "RedundantVersionCheck", "package": "RedundantVersion", "version": "4", "slot": "0", "later_versions": ["6"]}
+{"__class__": "RedundantVersion", "category": "RedundantVersionCheck", "package": "RedundantVersion", "version": "5", "slot": "0", "later_versions": ["6"]}
diff --git a/testdata/repos/profiledir/RedundantVersionCheck/RedundantVersion/RedundantVersion-1.ebuild b/testdata/repos/profiledir/RedundantVersionCheck/RedundantVersion/RedundantVersion-1.ebuild
new file mode 100644
index 00000000..2e970b4a
--- /dev/null
+++ b/testdata/repos/profiledir/RedundantVersionCheck/RedundantVersion/RedundantVersion-1.ebuild
@@ -0,0 +1,5 @@
+DESCRIPTION="Stub ebuild used for RedundantVersion checks"
+HOMEPAGE="https://github.com/pkgcore/pkgcheck"
+SLOT="0"
+LICENSE="BSD"
+KEYWORDS="amd64 x86"
diff --git a/testdata/repos/profiledir/RedundantVersionCheck/RedundantVersion/RedundantVersion-2.ebuild b/testdata/repos/profiledir/RedundantVersionCheck/RedundantVersion/RedundantVersion-2.ebuild
new file mode 100644
index 00000000..2e970b4a
--- /dev/null
+++ b/testdata/repos/profiledir/RedundantVersionCheck/RedundantVersion/RedundantVersion-2.ebuild
@@ -0,0 +1,5 @@
+DESCRIPTION="Stub ebuild used for RedundantVersion checks"
+HOMEPAGE="https://github.com/pkgcore/pkgcheck"
+SLOT="0"
+LICENSE="BSD"
+KEYWORDS="amd64 x86"
diff --git a/testdata/repos/profiledir/RedundantVersionCheck/RedundantVersion/RedundantVersion-3.ebuild b/testdata/repos/profiledir/RedundantVersionCheck/RedundantVersion/RedundantVersion-3.ebuild
new file mode 100644
index 00000000..407949a6
--- /dev/null
+++ b/testdata/repos/profiledir/RedundantVersionCheck/RedundantVersion/RedundantVersion-3.ebuild
@@ -0,0 +1,5 @@
+DESCRIPTION="Stub ebuild used for RedundantVersion checks"
+HOMEPAGE="https://github.com/pkgcore/pkgcheck"
+SLOT="0"
+LICENSE="BSD"
+KEYWORDS="~amd64 ~x86"
diff --git a/testdata/repos/profiledir/RedundantVersionCheck/RedundantVersion/RedundantVersion-4.ebuild b/testdata/repos/profiledir/RedundantVersionCheck/RedundantVersion/RedundantVersion-4.ebuild
new file mode 100644
index 00000000..407949a6
--- /dev/null
+++ b/testdata/repos/profiledir/RedundantVersionCheck/RedundantVersion/RedundantVersion-4.ebuild
@@ -0,0 +1,5 @@
+DESCRIPTION="Stub ebuild used for RedundantVersion checks"
+HOMEPAGE="https://github.com/pkgcore/pkgcheck"
+SLOT="0"
+LICENSE="BSD"
+KEYWORDS="~amd64 ~x86"
diff --git a/testdata/repos/profiledir/RedundantVersionCheck/RedundantVersion/RedundantVersion-5.ebuild b/testdata/repos/profiledir/RedundantVersionCheck/RedundantVersion/RedundantVersion-5.ebuild
new file mode 100644
index 00000000..407949a6
--- /dev/null
+++ b/testdata/repos/profiledir/RedundantVersionCheck/RedundantVersion/RedundantVersion-5.ebuild
@@ -0,0 +1,5 @@
+DESCRIPTION="Stub ebuild used for RedundantVersion checks"
+HOMEPAGE="https://github.com/pkgcore/pkgcheck"
+SLOT="0"
+LICENSE="BSD"
+KEYWORDS="~amd64 ~x86"
diff --git a/testdata/repos/profiledir/RedundantVersionCheck/RedundantVersion/RedundantVersion-6.ebuild b/testdata/repos/profiledir/RedundantVersionCheck/RedundantVersion/RedundantVersion-6.ebuild
new file mode 100644
index 00000000..407949a6
--- /dev/null
+++ b/testdata/repos/profiledir/RedundantVersionCheck/RedundantVersion/RedundantVersion-6.ebuild
@@ -0,0 +1,5 @@
+DESCRIPTION="Stub ebuild used for RedundantVersion checks"
+HOMEPAGE="https://github.com/pkgcore/pkgcheck"
+SLOT="0"
+LICENSE="BSD"
+KEYWORDS="~amd64 ~x86"
diff --git a/testdata/repos/profiledir/profiles/arch.list b/testdata/repos/profiledir/profiles/arch.list
index 0d9b169f..fe8e46db 100644
--- a/testdata/repos/profiledir/profiles/arch.list
+++ b/testdata/repos/profiledir/profiles/arch.list
@@ -1,2 +1,3 @@
amd64
unknown_arch
+x86
diff --git a/testdata/repos/profiledir/profiles/profiles.desc b/testdata/repos/profiledir/profiles/profiles.desc
index ea649fd9..53c9769b 100644
--- a/testdata/repos/profiledir/profiles/profiles.desc
+++ b/testdata/repos/profiledir/profiles/profiles.desc
@@ -15,3 +15,7 @@ amd64 deprecated/nonexistent exp
amd64 banned-eapi dev
amd64 deprecated-eapi stable
+
+amd64 redundant/amd64 stable
+amd64 redundant/amd64/musl dev
+x86 redundant/x86 stable
diff --git a/testdata/repos/profiledir/profiles/redundant/amd64/eapi b/testdata/repos/profiledir/profiles/redundant/amd64/eapi
new file mode 100644
index 00000000..7f8f011e
--- /dev/null
+++ b/testdata/repos/profiledir/profiles/redundant/amd64/eapi
@@ -0,0 +1 @@
+7
diff --git a/testdata/repos/profiledir/profiles/redundant/amd64/musl/eapi b/testdata/repos/profiledir/profiles/redundant/amd64/musl/eapi
new file mode 100644
index 00000000..7f8f011e
--- /dev/null
+++ b/testdata/repos/profiledir/profiles/redundant/amd64/musl/eapi
@@ -0,0 +1 @@
+7
diff --git a/testdata/repos/profiledir/profiles/redundant/amd64/musl/package.mask b/testdata/repos/profiledir/profiles/redundant/amd64/musl/package.mask
new file mode 100644
index 00000000..3fb5e793
--- /dev/null
+++ b/testdata/repos/profiledir/profiles/redundant/amd64/musl/package.mask
@@ -0,0 +1,2 @@
+-=RedundantVersionCheck/RedundantVersion-4
+=RedundantVersionCheck/RedundantVersion-5
diff --git a/testdata/repos/profiledir/profiles/redundant/amd64/musl/parent b/testdata/repos/profiledir/profiles/redundant/amd64/musl/parent
new file mode 100644
index 00000000..f3229c5b
--- /dev/null
+++ b/testdata/repos/profiledir/profiles/redundant/amd64/musl/parent
@@ -0,0 +1 @@
+..
diff --git a/testdata/repos/profiledir/profiles/redundant/amd64/package.mask b/testdata/repos/profiledir/profiles/redundant/amd64/package.mask
new file mode 100644
index 00000000..67f4343e
--- /dev/null
+++ b/testdata/repos/profiledir/profiles/redundant/amd64/package.mask
@@ -0,0 +1,3 @@
+=RedundantVersionCheck/RedundantVersion-2
+=RedundantVersionCheck/RedundantVersion-4
+-=RedundantVersionCheck/RedundantVersion-6
diff --git a/testdata/repos/profiledir/profiles/redundant/amd64/parent b/testdata/repos/profiledir/profiles/redundant/amd64/parent
new file mode 100644
index 00000000..f3229c5b
--- /dev/null
+++ b/testdata/repos/profiledir/profiles/redundant/amd64/parent
@@ -0,0 +1 @@
+..
diff --git a/testdata/repos/profiledir/profiles/redundant/eapi b/testdata/repos/profiledir/profiles/redundant/eapi
new file mode 100644
index 00000000..7f8f011e
--- /dev/null
+++ b/testdata/repos/profiledir/profiles/redundant/eapi
@@ -0,0 +1 @@
+7
diff --git a/testdata/repos/profiledir/profiles/redundant/package.mask b/testdata/repos/profiledir/profiles/redundant/package.mask
new file mode 100644
index 00000000..f0d7d751
--- /dev/null
+++ b/testdata/repos/profiledir/profiles/redundant/package.mask
@@ -0,0 +1 @@
+=RedundantVersionCheck/RedundantVersion-6
diff --git a/testdata/repos/profiledir/profiles/redundant/x86/eapi b/testdata/repos/profiledir/profiles/redundant/x86/eapi
new file mode 100644
index 00000000..7f8f011e
--- /dev/null
+++ b/testdata/repos/profiledir/profiles/redundant/x86/eapi
@@ -0,0 +1 @@
+7
diff --git a/testdata/repos/profiledir/profiles/redundant/x86/package.mask b/testdata/repos/profiledir/profiles/redundant/x86/package.mask
new file mode 100644
index 00000000..724f1a6a
--- /dev/null
+++ b/testdata/repos/profiledir/profiles/redundant/x86/package.mask
@@ -0,0 +1,2 @@
+=RedundantVersionCheck/RedundantVersion-2
+-=RedundantVersionCheck/RedundantVersion-6
diff --git a/testdata/repos/profiledir/profiles/redundant/x86/parent b/testdata/repos/profiledir/profiles/redundant/x86/parent
new file mode 100644
index 00000000..f3229c5b
--- /dev/null
+++ b/testdata/repos/profiledir/profiles/redundant/x86/parent
@@ -0,0 +1 @@
+..
diff --git a/tests/checks/test_cleanup.py b/tests/checks/test_cleanup.py
index 15da8a87..4e1aa2b3 100644
--- a/tests/checks/test_cleanup.py
+++ b/tests/checks/test_cleanup.py
@@ -11,7 +11,7 @@ def mk_pkg(ver, keywords=("x86", "amd64"), slot="0", **kwds):
class TestRedundantVersion(misc.ReportTestCase):
check_kls = cleanup.RedundantVersionCheck
- check = cleanup.RedundantVersionCheck(arghparse.Namespace(stable_only=None))
+ check = check_kls(arghparse.Namespace(stable_only=True), profile_addon={})
def test_single_version(self):
self.assertNoReport(self.check, [mk_pkg("0.7.1")])
@@ -68,7 +68,7 @@ class TestRedundantVersion(misc.ReportTestCase):
class TestRedundantVersionByStable(misc.ReportTestCase):
check_kls = cleanup.RedundantVersionCheck
- check = cleanup.RedundantVersionCheck(arghparse.Namespace(stable_only=True))
+ check = cleanup.RedundantVersionCheck(arghparse.Namespace(stable_only=True), profile_addon={})
def test_only_unstable(self):
l = [mk_pkg("0.1", keywords=("~x86", "~amd64")),
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2022-10-12 17:48 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-10-12 17:48 [gentoo-commits] proj/pkgcore/pkgcheck:master commit in: testdata/data/repos/profiledir/RedundantVersionCheck/RedundantVersion/, Arthur Zamarin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox