Skip to content

Commit

Permalink
DeprecatedManifestHash: check for deprecated checksums in Manifest files
Browse files Browse the repository at this point in the history
Resolves: pkgcore#508
Signed-off-by: Arthur Zamarin <arthurzam@gentoo.org>
  • Loading branch information
arthurzam committed Jul 14, 2023
1 parent a4fdd4b commit 2b9b8e7
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 3 deletions.
28 changes: 25 additions & 3 deletions src/pkgcheck/checks/repo_metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -564,6 +564,23 @@ class InvalidManifest(results.MetadataError, results.PackageResult):
attr = "manifest"


class DeprecatedManifestHash(results.PackageResult, results.Warning):
"""Manifest uses deprecated hashes.
The package uses deprecated hash types in its Manifest file.
"""

def __init__(self, hashes, **kwargs):
super().__init__(**kwargs)
self.hashes = tuple(hashes)

@property
def desc(self):
s = pluralism(self.hashes)
hashes = ", ".join(self.hashes)
return f"defines deprecated manifest hash types{s}: [ {hashes} ]"


class ManifestCheck(Check):
"""Manifest related checks.
Expand All @@ -581,6 +598,7 @@ class ManifestCheck(Check):
UnnecessaryManifest,
DeprecatedChksum,
InvalidManifest,
DeprecatedManifestHash,
}
)

Expand Down Expand Up @@ -623,9 +641,9 @@ def feed(self, pkgset):
yield MissingChksum(
f_inst.filename, sorted(missing), sorted(f_inst.chksums), pkg=pkg
)
elif f_inst.chksums and self.preferred_checksums != frozenset(f_inst.chksums):
deprecated = set(f_inst.chksums).difference(self.preferred_checksums)
yield DeprecatedChksum(f_inst.filename, sorted(deprecated), pkg=pkg)
elif f_inst.chksums:
if deprecated := frozenset(f_inst.chksums).difference(self.preferred_checksums):
yield DeprecatedChksum(f_inst.filename, sorted(deprecated), pkg=pkg)
seen.add(f_inst.filename)

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

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


class ConflictingChksums(results.VersionResult, results.Error):
"""Checksum conflict detected between two files."""
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"__class__": "DeprecatedManifestHash", "category": "ManifestCheck", "package": "MissingChksum", "hashes": ["rmd160", "sha1"]}

0 comments on commit 2b9b8e7

Please sign in to comment.