Skip to content

Commit 2b9b8e7

Browse files
committed
DeprecatedManifestHash: check for deprecated checksums in Manifest files
Resolves: #508 Signed-off-by: Arthur Zamarin <arthurzam@gentoo.org>
1 parent a4fdd4b commit 2b9b8e7

2 files changed

Lines changed: 26 additions & 3 deletions

File tree

src/pkgcheck/checks/repo_metadata.py

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -564,6 +564,23 @@ class InvalidManifest(results.MetadataError, results.PackageResult):
564564
attr = "manifest"
565565

566566

567+
class DeprecatedManifestHash(results.PackageResult, results.Warning):
568+
"""Manifest uses deprecated hashes.
569+
570+
The package uses deprecated hash types in its Manifest file.
571+
"""
572+
573+
def __init__(self, hashes, **kwargs):
574+
super().__init__(**kwargs)
575+
self.hashes = tuple(hashes)
576+
577+
@property
578+
def desc(self):
579+
s = pluralism(self.hashes)
580+
hashes = ", ".join(self.hashes)
581+
return f"defines deprecated manifest hash types{s}: [ {hashes} ]"
582+
583+
567584
class ManifestCheck(Check):
568585
"""Manifest related checks.
569586
@@ -581,6 +598,7 @@ class ManifestCheck(Check):
581598
UnnecessaryManifest,
582599
DeprecatedChksum,
583600
InvalidManifest,
601+
DeprecatedManifestHash,
584602
}
585603
)
586604

@@ -623,9 +641,9 @@ def feed(self, pkgset):
623641
yield MissingChksum(
624642
f_inst.filename, sorted(missing), sorted(f_inst.chksums), pkg=pkg
625643
)
626-
elif f_inst.chksums and self.preferred_checksums != frozenset(f_inst.chksums):
627-
deprecated = set(f_inst.chksums).difference(self.preferred_checksums)
628-
yield DeprecatedChksum(f_inst.filename, sorted(deprecated), pkg=pkg)
644+
elif f_inst.chksums:
645+
if deprecated := frozenset(f_inst.chksums).difference(self.preferred_checksums):
646+
yield DeprecatedChksum(f_inst.filename, sorted(deprecated), pkg=pkg)
629647
seen.add(f_inst.filename)
630648

631649
if pkg_manifest.thin:
@@ -638,6 +656,10 @@ def feed(self, pkgset):
638656
if unknown_manifests := manifest_distfiles.difference(seen):
639657
yield UnknownManifest(sorted(unknown_manifests), pkg=pkgset[0])
640658

659+
used_hashes = frozenset().union(*pkg_manifest.distfiles.values())
660+
if deprecated_hashes := DEPRECATED_HASHES.intersection(used_hashes):
661+
yield DeprecatedManifestHash(sorted(deprecated_hashes), pkg=pkgset[0])
662+
641663

642664
class ConflictingChksums(results.VersionResult, results.Error):
643665
"""Checksum conflict detected between two files."""
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"__class__": "DeprecatedManifestHash", "category": "ManifestCheck", "package": "MissingChksum", "hashes": ["rmd160", "sha1"]}

0 commit comments

Comments
 (0)