@@ -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+
567584class 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
642664class ConflictingChksums (results .VersionResult , results .Error ):
643665 """Checksum conflict detected between two files."""
0 commit comments