aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/pkgcheck/checks/repo_metadata.py49
-rw-r--r--testdata/data/repos/standalone/RepoManifestHashCheck/DeprecatedRepoHash/expected.json1
-rw-r--r--testdata/repos/standalone/metadata/layout.conf1
3 files changed, 44 insertions, 7 deletions
diff --git a/src/pkgcheck/checks/repo_metadata.py b/src/pkgcheck/checks/repo_metadata.py
index 21df0745..2f28f805 100644
--- a/src/pkgcheck/checks/repo_metadata.py
+++ b/src/pkgcheck/checks/repo_metadata.py
@@ -12,6 +12,9 @@ from .. import addons, base, results, sources
from . import Check, MirrorsCheck, RepoCheck
+DEPRECATED_HASHES = frozenset({"md5", "rmd160", "sha1", "whirlpool"})
+
+
class MultiMovePackageUpdate(results.ProfilesResult, results.Warning):
"""Entry for package moved multiple times in profiles/updates files."""
@@ -174,7 +177,7 @@ class UnusedLicensesCheck(RepoCheck):
"""Check for unused license files."""
_source = sources.RepositoryRepoSource
- known_results = frozenset([UnusedLicenses])
+ known_results = frozenset({UnusedLicenses})
def __init__(self, *args):
super().__init__(*args)
@@ -213,7 +216,7 @@ class UnusedMirrorsCheck(MirrorsCheck, RepoCheck):
"""Check for unused mirrors."""
_source = sources.RepositoryRepoSource
- known_results = frozenset([UnusedMirrors])
+ known_results = frozenset({UnusedMirrors})
def start(self):
master_mirrors = set()
@@ -249,7 +252,7 @@ class UnusedEclassesCheck(RepoCheck):
"""Check for unused eclasses."""
_source = sources.RepositoryRepoSource
- known_results = frozenset([UnusedEclasses])
+ known_results = frozenset({UnusedEclasses})
def __init__(self, *args):
super().__init__(*args)
@@ -291,7 +294,7 @@ class LicenseGroupsCheck(RepoCheck):
"""Scan license groups for unknown licenses."""
_source = (sources.EmptySource, (base.repo_scope,))
- known_results = frozenset([UnknownLicenses])
+ known_results = frozenset({UnknownLicenses})
def __init__(self, *args):
super().__init__(*args)
@@ -682,7 +685,7 @@ class ManifestCollisionCheck(Check):
"""
_source = (sources.RepositoryRepoSource, (), (("source", sources.PackageRepoSource),))
- known_results = frozenset([ConflictingChksums, MatchingChksums])
+ known_results = frozenset({ConflictingChksums, MatchingChksums})
def __init__(self, *args):
super().__init__(*args)
@@ -746,13 +749,45 @@ class ProjectMetadataCheck(RepoCheck):
"""Check projects.xml for issues."""
_source = (sources.EmptySource, (base.repo_scope,))
- known_results = frozenset([EmptyProject])
+ known_results = frozenset({EmptyProject})
def __init__(self, *args):
super().__init__(*args)
self.repo = self.options.target_repo
def finish(self):
- for _key, project in self.repo.projects_xml.projects.items():
+ for project in self.repo.projects_xml.projects.values():
if not project.recursive_members:
yield EmptyProject(project)
+
+
+class DeprecatedRepoHash(results.Warning):
+ """Repositories ``manifest-hashes`` defines deprecated hashes.
+
+ The repository defines deprecated hashes in ``manifest-hashes``.
+ """
+
+ def __init__(self, hashes):
+ super().__init__()
+ self.hashes = tuple(hashes)
+
+ @property
+ def desc(self):
+ s = pluralism(self.hashes)
+ hashes = ", ".join(self.hashes)
+ return f"defines deprecated manifest-hash{s}: [ {hashes} ]"
+
+
+class RepoManifestHashCheck(RepoCheck):
+ """Check ``manifest-hashes`` config for issues."""
+
+ _source = (sources.EmptySource, (base.repo_scope,))
+ known_results = frozenset({DeprecatedRepoHash})
+
+ def __init__(self, *args):
+ super().__init__(*args)
+ self.repo = self.options.target_repo
+
+ def finish(self):
+ if deprecated_hashes := DEPRECATED_HASHES.intersection(self.repo.config.manifests.hashes):
+ yield DeprecatedRepoHash(sorted(deprecated_hashes))
diff --git a/testdata/data/repos/standalone/RepoManifestHashCheck/DeprecatedRepoHash/expected.json b/testdata/data/repos/standalone/RepoManifestHashCheck/DeprecatedRepoHash/expected.json
new file mode 100644
index 00000000..4d753b93
--- /dev/null
+++ b/testdata/data/repos/standalone/RepoManifestHashCheck/DeprecatedRepoHash/expected.json
@@ -0,0 +1 @@
+{"__class__": "DeprecatedRepoHash", "hashes": ["sha1", "whirlpool"]}
diff --git a/testdata/repos/standalone/metadata/layout.conf b/testdata/repos/standalone/metadata/layout.conf
index 46e02cb8..5add29b7 100644
--- a/testdata/repos/standalone/metadata/layout.conf
+++ b/testdata/repos/standalone/metadata/layout.conf
@@ -5,3 +5,4 @@ eapis-banned = 1
eapis-deprecated = 5
properties-allowed = interactive live
restrict-allowed = bindist fetch mirror test
+manifest-hashes = BLAKE2B SHA1 SHA512 WHIRLPOOL