Skip to content

Commit a4fdd4b

Browse files
committed
RepoManifestHashCheck: check for deprecated repo manifest-hashes
Resolves: #508 Signed-off-by: Arthur Zamarin <arthurzam@gentoo.org>
1 parent 123abbc commit a4fdd4b

3 files changed

Lines changed: 44 additions & 7 deletions

File tree

src/pkgcheck/checks/repo_metadata.py

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
from . import Check, MirrorsCheck, RepoCheck
1313

1414

15+
DEPRECATED_HASHES = frozenset({"md5", "rmd160", "sha1", "whirlpool"})
16+
17+
1518
class MultiMovePackageUpdate(results.ProfilesResult, results.Warning):
1619
"""Entry for package moved multiple times in profiles/updates files."""
1720

@@ -174,7 +177,7 @@ class UnusedLicensesCheck(RepoCheck):
174177
"""Check for unused license files."""
175178

176179
_source = sources.RepositoryRepoSource
177-
known_results = frozenset([UnusedLicenses])
180+
known_results = frozenset({UnusedLicenses})
178181

179182
def __init__(self, *args):
180183
super().__init__(*args)
@@ -213,7 +216,7 @@ class UnusedMirrorsCheck(MirrorsCheck, RepoCheck):
213216
"""Check for unused mirrors."""
214217

215218
_source = sources.RepositoryRepoSource
216-
known_results = frozenset([UnusedMirrors])
219+
known_results = frozenset({UnusedMirrors})
217220

218221
def start(self):
219222
master_mirrors = set()
@@ -249,7 +252,7 @@ class UnusedEclassesCheck(RepoCheck):
249252
"""Check for unused eclasses."""
250253

251254
_source = sources.RepositoryRepoSource
252-
known_results = frozenset([UnusedEclasses])
255+
known_results = frozenset({UnusedEclasses})
253256

254257
def __init__(self, *args):
255258
super().__init__(*args)
@@ -291,7 +294,7 @@ class LicenseGroupsCheck(RepoCheck):
291294
"""Scan license groups for unknown licenses."""
292295

293296
_source = (sources.EmptySource, (base.repo_scope,))
294-
known_results = frozenset([UnknownLicenses])
297+
known_results = frozenset({UnknownLicenses})
295298

296299
def __init__(self, *args):
297300
super().__init__(*args)
@@ -682,7 +685,7 @@ class ManifestCollisionCheck(Check):
682685
"""
683686

684687
_source = (sources.RepositoryRepoSource, (), (("source", sources.PackageRepoSource),))
685-
known_results = frozenset([ConflictingChksums, MatchingChksums])
688+
known_results = frozenset({ConflictingChksums, MatchingChksums})
686689

687690
def __init__(self, *args):
688691
super().__init__(*args)
@@ -746,13 +749,45 @@ class ProjectMetadataCheck(RepoCheck):
746749
"""Check projects.xml for issues."""
747750

748751
_source = (sources.EmptySource, (base.repo_scope,))
749-
known_results = frozenset([EmptyProject])
752+
known_results = frozenset({EmptyProject})
750753

751754
def __init__(self, *args):
752755
super().__init__(*args)
753756
self.repo = self.options.target_repo
754757

755758
def finish(self):
756-
for _key, project in self.repo.projects_xml.projects.items():
759+
for project in self.repo.projects_xml.projects.values():
757760
if not project.recursive_members:
758761
yield EmptyProject(project)
762+
763+
764+
class DeprecatedRepoHash(results.Warning):
765+
"""Repositories ``manifest-hashes`` defines deprecated hashes.
766+
767+
The repository defines deprecated hashes in ``manifest-hashes``.
768+
"""
769+
770+
def __init__(self, hashes):
771+
super().__init__()
772+
self.hashes = tuple(hashes)
773+
774+
@property
775+
def desc(self):
776+
s = pluralism(self.hashes)
777+
hashes = ", ".join(self.hashes)
778+
return f"defines deprecated manifest-hash{s}: [ {hashes} ]"
779+
780+
781+
class RepoManifestHashCheck(RepoCheck):
782+
"""Check ``manifest-hashes`` config for issues."""
783+
784+
_source = (sources.EmptySource, (base.repo_scope,))
785+
known_results = frozenset({DeprecatedRepoHash})
786+
787+
def __init__(self, *args):
788+
super().__init__(*args)
789+
self.repo = self.options.target_repo
790+
791+
def finish(self):
792+
if deprecated_hashes := DEPRECATED_HASHES.intersection(self.repo.config.manifests.hashes):
793+
yield DeprecatedRepoHash(sorted(deprecated_hashes))
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"__class__": "DeprecatedRepoHash", "hashes": ["sha1", "whirlpool"]}

testdata/repos/standalone/metadata/layout.conf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@ eapis-banned = 1
55
eapis-deprecated = 5
66
properties-allowed = interactive live
77
restrict-allowed = bindist fetch mirror test
8+
manifest-hashes = BLAKE2B SHA1 SHA512 WHIRLPOOL

0 commit comments

Comments
 (0)