commit: 33a0fe9e379839667e84cb8a92207012be2783c1 Author: Arthur Zamarin <arthurzam <AT> gentoo <DOT> org> AuthorDate: Fri Jan 20 13:17:49 2023 +0000 Commit: Arthur Zamarin <arthurzam <AT> gentoo <DOT> org> CommitDate: Fri Jan 20 13:17:49 2023 +0000 URL: https://gitweb.gentoo.org/proj/pkgcore/pkgcheck.git/commit/?id=33a0fe9e
MissingManifest: fix behavior under thick repos Resolves: https://github.com/pkgcore/pkgcheck/issues/530 Signed-off-by: Arthur Zamarin <arthurzam <AT> gentoo.org> src/pkgcheck/checks/repo_metadata.py | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/pkgcheck/checks/repo_metadata.py b/src/pkgcheck/checks/repo_metadata.py index 003ff891..21df0745 100644 --- a/src/pkgcheck/checks/repo_metadata.py +++ b/src/pkgcheck/checks/repo_metadata.py @@ -4,6 +4,7 @@ from difflib import SequenceMatcher from itertools import chain from pkgcore import fetch +from pkgcore.ebuild.digest import Manifest from snakeoil.sequences import iflatten_instance from snakeoil.strings import pluralism @@ -80,14 +81,14 @@ class PackageUpdatesCheck(RepoCheck): _source = (sources.EmptySource, (base.profiles_scope,)) known_results = frozenset( - [ + { MultiMovePackageUpdate, OldMultiMovePackageUpdate, OldPackageUpdate, MovedPackageUpdate, BadPackageUpdate, RedundantPackageUpdate, - ] + } ) def __init__(self, *args): @@ -377,17 +378,16 @@ class GlobalUseCheck(RepoCheck): """Check global USE and USE_EXPAND flags for various issues.""" _source = (sources.RepositoryRepoSource, (), (("source", sources.PackageRepoSource),)) - required_addons = (addons.UseAddon,) known_results = frozenset( - [ + { PotentialLocalUse, PotentialGlobalUse, UnusedGlobalUse, UnusedGlobalUseExpand, - ] + } ) - def __init__(self, *args, use_addon): + def __init__(self, *args): super().__init__(*args) self.global_flag_usage = defaultdict(set) self.repo = self.options.target_repo @@ -405,8 +405,8 @@ class GlobalUseCheck(RepoCheck): """Yield groups of packages with similar local USE flag descriptions.""" # calculate USE flag description difference ratios diffs = {} - for i, (i_pkg, i_desc) in enumerate(pkgs): - for j, (j_pkg, j_desc) in enumerate(pkgs[i + 1 :]): + for i, (_i_pkg, i_desc) in enumerate(pkgs): + for j, (_j_pkg, j_desc) in enumerate(pkgs[i + 1 :]): diffs[(i, i + j + 1)] = SequenceMatcher(None, i_desc, j_desc).ratio() # create an adjacency list using all closely matching flags pairs @@ -571,17 +571,17 @@ class ManifestCheck(Check): required_addons = (addons.UseAddon,) _source = sources.PackageRepoSource known_results = frozenset( - [ + { MissingChksum, MissingManifest, UnknownManifest, UnnecessaryManifest, DeprecatedChksum, InvalidManifest, - ] + } ) - def __init__(self, *args, use_addon): + def __init__(self, *args, use_addon: addons.UseAddon): super().__init__(*args) repo = self.options.target_repo self.preferred_checksums = frozenset( @@ -593,7 +593,8 @@ class ManifestCheck(Check): self.iuse_filter = use_addon.get_filter("fetchables") def feed(self, pkgset): - pkg_manifest = pkgset[0].manifest + pkg_manifest: Manifest = pkgset[0].manifest + pkg_manifest.allow_missing = True manifest_distfiles = set(pkg_manifest.distfiles.keys()) seen = set() for pkg in pkgset: @@ -625,14 +626,13 @@ class ManifestCheck(Check): seen.add(f_inst.filename) if pkg_manifest.thin: - unnecessary_manifests = [] + unnecessary_manifests = set() for attr in ("aux_files", "ebuilds", "misc"): - unnecessary_manifests.extend(getattr(pkg_manifest, attr, [])) + unnecessary_manifests.update(getattr(pkg_manifest, attr, ())) if unnecessary_manifests: yield UnnecessaryManifest(sorted(unnecessary_manifests), pkg=pkgset[0]) - unknown_manifests = manifest_distfiles.difference(seen) - if unknown_manifests: + if unknown_manifests := manifest_distfiles.difference(seen): yield UnknownManifest(sorted(unknown_manifests), pkg=pkgset[0]) @@ -753,6 +753,6 @@ class ProjectMetadataCheck(RepoCheck): self.repo = self.options.target_repo def finish(self): - for key, project in self.repo.projects_xml.projects.items(): + for _key, project in self.repo.projects_xml.projects.items(): if not project.recursive_members: yield EmptyProject(project)