commit: 1b1e0fcf0adf4aab07083edcd3bc82a988732137 Author: Zac Medico <zmedico <AT> gentoo <DOT> org> AuthorDate: Thu Dec 5 22:23:28 2019 +0000 Commit: Zac Medico <zmedico <AT> gentoo <DOT> org> CommitDate: Fri Dec 6 07:20:29 2019 +0000 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=1b1e0fcf
repoman: support profiles/package.deprecated (bug 702100) Bug: https://bugs.gentoo.org/702100 Signed-off-by: Zac Medico <zmedico <AT> gentoo.org> repoman/cnf/qa_data/qa_data.yaml | 1 + repoman/cnf/repository/qa_data.yaml | 1 + repoman/lib/repoman/modules/scan/depend/_depend_checks.py | 14 ++++++++++++++ repoman/lib/repoman/scanner.py | 4 ++++ repoman/man/repoman.1 | 3 +++ 5 files changed, 23 insertions(+) diff --git a/repoman/cnf/qa_data/qa_data.yaml b/repoman/cnf/qa_data/qa_data.yaml index 6aad56b8c..9a807aaf3 100644 --- a/repoman/cnf/qa_data/qa_data.yaml +++ b/repoman/cnf/qa_data/qa_data.yaml @@ -26,6 +26,7 @@ qahelp: badinexp: "User-visible ebuilds with unsatisfied dependencies (matched against *visible* ebuilds) in experimental arch" badmaskedinexp: "Masked ebuilds with unsatisfied dependencies (matched against *all* ebuilds) in experimental arch" badtilde: "Uses the ~ dep operator with a non-zero revision part, which is useless (the revision is ignored)" + deprecated: "Ebuild has a dependency that refers to a deprecated package" equalsversion: "Suspicious =-dependency with a specific version and no rev. Please either use ~ if any revision is acceptable, or append -r0 to silence the warning." missingslot: "RDEPEND matches more than one SLOT but does not specify a slot and/or use the := or :* slot operator" perlcore: "This ebuild directly depends on a package in perl-core; it should use the corresponding virtual instead." diff --git a/repoman/cnf/repository/qa_data.yaml b/repoman/cnf/repository/qa_data.yaml index c96ce46a9..464482056 100644 --- a/repoman/cnf/repository/qa_data.yaml +++ b/repoman/cnf/repository/qa_data.yaml @@ -44,6 +44,7 @@ qawarnings: - dependency.badindev - dependency.badmaskedindev - dependency.badtilde + - dependency.deprecated - dependency.equalsversion - dependency.missingslot - dependency.perlcore diff --git a/repoman/lib/repoman/modules/scan/depend/_depend_checks.py b/repoman/lib/repoman/modules/scan/depend/_depend_checks.py index 690b95aa0..e01024da2 100644 --- a/repoman/lib/repoman/modules/scan/depend/_depend_checks.py +++ b/repoman/lib/repoman/modules/scan/depend/_depend_checks.py @@ -108,6 +108,20 @@ def _depend_checks(ebuild, pkg, portdb, qatracker, repo_metadata, qadata): not atom.cp.startswith("virtual/"): unknown_pkgs.add((mytype, atom.unevaluated_atom)) + if not atom.blocker: + all_deprecated = False + for pkg_match in portdb.xmatch("match-all", atom): + if any(repo_metadata['package.deprecated'].iterAtomsForPackage(pkg_match)): + all_deprecated = True + else: + all_deprecated = False + break + + if all_deprecated: + qatracker.add_error( + 'dependency.deprecated', + ebuild.relative_path + ": '%s'" % atom) + if pkg.category != "virtual": if not is_blocker and \ atom.cp in qadata.suspect_virtual: diff --git a/repoman/lib/repoman/scanner.py b/repoman/lib/repoman/scanner.py index 06234b0ad..5db54bb97 100644 --- a/repoman/lib/repoman/scanner.py +++ b/repoman/lib/repoman/scanner.py @@ -8,6 +8,7 @@ from itertools import chain import portage from portage import normalize_path from portage import os +from portage._sets.base import InternalPackageSet from portage.output import green from portage.util.futures.extendedfutures import ExtendedFuture from repoman.metadata import get_metadata_xsd @@ -93,6 +94,9 @@ class Scanner(object): 'profile_list': profile_list, 'pmaskdict': global_pmaskdict, 'lic_deprecated': liclist_deprecated, + 'package.deprecated': InternalPackageSet(initial_atoms=portage.util.stack_lists( + [portage.util.grabfile_package(os.path.join(path, 'profiles', 'package.deprecated'), recursive=True) + for path in self.portdb.porttrees], incremental=True)) } self.repo_settings.repoman_settings['PORTAGE_ARCHLIST'] = ' '.join(sorted(kwlist)) diff --git a/repoman/man/repoman.1 b/repoman/man/repoman.1 index 7bd440a4c..a6a9937e5 100644 --- a/repoman/man/repoman.1 +++ b/repoman/man/repoman.1 @@ -315,6 +315,9 @@ experimental arch Uses the ~ dep operator with a non-zero revision part, which is useless (the revision is ignored) .TP +.B dependency.deprecated +Ebuild has a dependency that refers to a deprecated package +.TP .B dependency.syntax Syntax error in dependency string (usually an extra/missing space/parenthesis) .TP
