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

Reply via email to