repoman: support profiles/package.deprecated (bug 702100)

Bug: https://bugs.gentoo.org/702100
Signed-off-by: Zac Medico <zmedico@gentoo.org>
diff --git a/repoman/cnf/qa_data/qa_data.yaml b/repoman/cnf/qa_data/qa_data.yaml
index 6aad56b..9a807aa 100644
--- a/repoman/cnf/qa_data/qa_data.yaml
+++ b/repoman/cnf/qa_data/qa_data.yaml
@@ -26,6 +26,7 @@
         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 c96ce46..4644820 100644
--- a/repoman/cnf/repository/qa_data.yaml
+++ b/repoman/cnf/repository/qa_data.yaml
@@ -44,6 +44,7 @@
     - 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 690b95a..e01024d 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 @@
 					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 06234b0..5db54bb 100644
--- a/repoman/lib/repoman/scanner.py
+++ b/repoman/lib/repoman/scanner.py
@@ -8,6 +8,7 @@
 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 @@
 			'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 7bd440a..a6a9937 100644
--- a/repoman/man/repoman.1
+++ b/repoman/man/repoman.1
@@ -315,6 +315,9 @@
 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