[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#516706: lintian: commas in several fields



tags 516706 patch
thanks

-=| gregor herrmann, Tue, May 26, 2009 at 07:11:38PM +0200 |=-
> If someone finds the time to write such a test it should probably
> include all fields that can have comma separated lists.

Here's a patch implementing this. Being bitten by the missing coomma 
problem was stimulating :)

The new check detects cases like

    Depends: foo, bar
     baz

and gives false positives for

    Depends: foo, bar, baz
     (>= 2)

and

    Depends: foo, bar, baz (>=
     2)

Given that the later two cases are not very likely to happen with 
people that carry about easy reading of lists as to wrap them, I think 
the check is good enough.

Thanks for considering,

-- 
dam
diff --git a/checks/control-file b/checks/control-file
index fb62cdd..56cbf48 100644
--- a/checks/control-file
+++ b/checks/control-file
@@ -105,6 +105,33 @@ for my $binary_control (@binary_controls) {
 	}
 }
 
+# Check if comma-separated values that span on multiple lines don't ommit
+# commas as in the following case:
+#   Depends: foo, bar
+#    baz
+for my $control ( $header, @binary_controls ) {
+	for my $field ( qw(Build-Depends Build-Conflicts Build-Depends-Indep
+			Build-Conflicts-Indep Pre-Depends Depends Recommends Suggests
+			Breaks Conflicts Provides Replaces Enhances) ) {
+		next unless $control->{lc($field)};
+		if ( $control->{lc($field)} =~ /
+				([^,]+)		# previous entry
+				\s*\n\s+	# new line + space
+				([^,]+)		# next entry
+				/x ) {
+			my $stanza = ( $control->{source}
+				? 'source stanza'
+				: 'Package: ' . $control->{package}
+			);
+			my ( $prev, $next ) = ( $1, $2 );
+			for ( $prev, $next ) {
+				s/^\s+//; s/\s+$//;
+			}
+			tag 'missing-comma-between-items', "in $field field between '$prev' and '$next', $stanza" ;
+		}
+	}
+}
+
 # Make sure that a stronger dependency field doesn't imply any of the elements
 # of a weaker dependency field.  dpkg-gencontrol will fix this up for us, but
 # we want to check the source package since dpkg-gencontrol may silently "fix"
diff --git a/checks/control-file.desc b/checks/control-file.desc
index efd4144..cf917d2 100644
--- a/checks/control-file.desc
+++ b/checks/control-file.desc
@@ -142,6 +142,14 @@ Info: The given field in the <tt>debian/control</tt> file has a substvar
  the control file will have a syntax error.  You probably meant to put a
  comma after the substvar expansion.
 
+Tag: missing-comma-between-items
+Severity: important
+Certainty: possible
+Info: The given field in the <tt>debian/control</tt> file contains a list
+ of items separated by commas. It seems that when wrapping the list on
+ multiple lines, a comma is missing at the end of some line. This can lead
+ to bogus or incomplete dependencies, conflicts etc.
+
 Tag: package-depends-on-hardcoded-libc
 Severity: normal
 Certainty: certain

Attachment: signature.asc
Description: Digital signature


Reply to: