Bug #255358 - Add new RDEPEND.implicit warning to detect the caes where DEPEND
is set and RDEPEND is unset in the ebuild, since this triggers implicit
RDEPEND=$DEPEND assignment.

svn path=/main/trunk/; revision=12529
diff --git a/bin/repoman b/bin/repoman
index 05d6d99..0a8166c 100755
--- a/bin/repoman
+++ b/bin/repoman
@@ -305,6 +305,7 @@
 	"IUSE.undefined":"This ebuild does not define IUSE (style guideline says to define IUSE even when empty)",
 	"LICENSE.invalid":"This ebuild is listing a license that doesnt exist in portages license/ dir.",
 	"KEYWORDS.invalid":"This ebuild contains KEYWORDS that are not listed in profiles/arch.list or for which no valid profile was found",
+	"RDEPEND.implicit":"RDEPEND is unset in the ebuild which triggers implicit RDEPEND=$DEPEND assignment",
 	"RDEPEND.suspect":"RDEPEND contains a package that usually only belongs in DEPEND.",
 	"RESTRICT.invalid":"This ebuild contains invalid RESTRICT values.",
 	"digestentry.unused":"Some files listed in the Manifest aren't referenced in SRC_URI",
@@ -343,6 +344,7 @@
 "KEYWORDS.stupid",
 "KEYWORDS.missing",
 "IUSE.undefined",
+"RDEPEND.implicit",
 "RDEPEND.suspect",
 "RESTRICT.invalid",
 "SRC_URI.mirror",
diff --git a/man/repoman.1 b/man/repoman.1
index 7542140..5b5aec6 100644
--- a/man/repoman.1
+++ b/man/repoman.1
@@ -168,6 +168,10 @@
 .B RDEPEND.badmaskedindev
 Masked ebuilds with RDEPEND settings (matched against *all* ebuilds) in developing arch
 .TP
+.B RDEPEND.implicit
+RDEPEND is unset in the ebuild which triggers implicit RDEPEND=$DEPEND
+assignment
+.TP
 .B RDEPEND.suspect
 RDEPEND contains a package that usually only belongs in DEPEND
 .TP
diff --git a/pym/repoman/checks.py b/pym/repoman/checks.py
index 7565039..c9ef91c 100644
--- a/pym/repoman/checks.py
+++ b/pym/repoman/checks.py
@@ -230,6 +230,33 @@
 		if match:
 			return "Quoted \"${A}\" on line: %d"
 
+class ImplicitRuntimeDeps(LineCheck):
+	"""
+	Detect the case where DEPEND is set and RDEPEND is unset in the ebuild,
+	since this triggers implicit RDEPEND=$DEPEND assignment.
+	"""
+
+	repoman_check_name = 'RDEPEND.implicit'
+	_assignment_re = re.compile(r'^\s*(R?DEPEND)=')
+
+	def new(self, pkg):
+		self._rdepend = False
+		self._depend = False
+
+	def check(self, num, line):
+		if not self._rdepend:
+			m = self._assignment_re.match(line)
+			if m is None:
+				pass
+			elif m.group(1) == "RDEPEND":
+				self._rdepend = True
+			elif m.group(1) == "DEPEND":
+				self._depend = True
+
+	def end(self):
+		if self._depend and not self._rdepend:
+			yield 'RDEPEND is not explicitly assigned'
+
 class InheritAutotools(LineCheck):
 	"""
 	Make sure appropriate functions are called in
@@ -306,7 +333,7 @@
 	EbuildAssignment, EbuildUselessDodoc,
 	EbuildUselessCdS, EbuildNestedDie,
 	EbuildPatches, EbuildQuotedA,
-	IUseUndefined, InheritAutotools,
+	IUseUndefined, ImplicitRuntimeDeps, InheritAutotools,
 	EMakeParallelDisabled, DeprecatedBindnowFlags)))
 
 def run_checks(contents, pkg):