Skip to content

Commit 88c2e6a

Browse files
committed
StabilizationGroupsCheck: add checks for invalid and non-existing groups
Signed-off-by: Arthur Zamarin <arthurzam@gentoo.org>
1 parent d0e04d6 commit 88c2e6a

5 files changed

Lines changed: 56 additions & 0 deletions

File tree

src/pkgcheck/checks/repo_metadata.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -814,3 +814,50 @@ def __init__(self, *args):
814814
def finish(self):
815815
if deprecated_hashes := DEPRECATED_HASHES.intersection(self.repo.config.manifests.hashes):
816816
yield DeprecatedRepoHash(sorted(deprecated_hashes))
817+
818+
819+
class StabilizationGroupSourcingError(results.LogError):
820+
"""Misformed stabilization group file."""
821+
822+
823+
class UnknownStabilizationGroupPackage(results.Error):
824+
"""Packages listed in stabilization group that doesn't exist."""
825+
826+
def __init__(self, group: str, packages: list[str]):
827+
super().__init__()
828+
self.group = group
829+
self.packages = tuple(packages)
830+
831+
@property
832+
def desc(self):
833+
s = pluralism(self.packages)
834+
packages = ", ".join(self.packages)
835+
return f"stabilization group {self.group!r} has unknown package{s}: [ {packages} ]"
836+
837+
838+
class StabilizationGroupsCheck(RepoCheck):
839+
"""Check stabilization groups"""
840+
841+
_source = (sources.EmptySource, (base.repo_scope,))
842+
known_results = frozenset({StabilizationGroupSourcingError, UnknownStabilizationGroupPackage})
843+
844+
def __init__(self, *args):
845+
super().__init__(*args)
846+
self.repo = self.options.target_repo
847+
848+
def finish(self):
849+
_logmap = (
850+
base.LogMap("pkgcore.log.logger.warning", StabilizationGroupSourcingError),
851+
base.LogMap("pkgcore.log.logger.error", StabilizationGroupSourcingError),
852+
)
853+
with base.LogReports(*_logmap) as log_reports:
854+
groups = self.repo.stabilization_groups
855+
yield from log_reports
856+
857+
for group, packages in groups.items():
858+
unknown_packages = set()
859+
for pkg in packages:
860+
if not self.repo.match(pkg):
861+
unknown_packages.add(pkg.key)
862+
if unknown_packages:
863+
yield UnknownStabilizationGroupPackage(group, sorted(unknown_packages))
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"__class__": "StabilizationGroupSourcingError", "msg": "/metadata/stabilization-groups/invalid.group, line 3: parsing error: invalid package atom: 'cat-cat'"}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"__class__": "UnknownStabilizationGroupPackage", "group": "non-existing", "packages": ["dev-lang/doesnot-exist"]}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# cat/pkg
2+
# cat-cat
3+
cat-cat
4+
<=dev-lang/rust-5.0
5+
dev-lang/rust
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
dev-lang/rust
2+
dev-lang/doesnot-exist

0 commit comments

Comments
 (0)