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

lintian: r447 - in trunk: checks debian testset



Author: djpig
Date: 2005-07-23 13:30:11 +0200 (Sat, 23 Jul 2005)
New Revision: 447

Modified:
   trunk/checks/changelog-file
   trunk/checks/changelog-file.desc
   trunk/debian/changelog
   trunk/debian/control
   trunk/testset/tags.binary
   trunk/testset/tags.filenames
Log:
Use libparse-debianchangelog-perl to parse the changelog
which detects a lot of syntax errors


Modified: trunk/checks/changelog-file
===================================================================
--- trunk/checks/changelog-file	2005-07-23 10:45:33 UTC (rev 446)
+++ trunk/checks/changelog-file	2005-07-23 11:30:11 UTC (rev 447)
@@ -22,6 +22,7 @@
 use strict;
 use Tags;
 use Util;
+use Parse::DebianChangelog;
 
 sub run {
 
@@ -212,6 +213,36 @@
     tag "debian-changelog-file-uses-obsolete-national-encoding", "at line $line"
 }
 
+my $changes = Parse::DebianChangelog->init( { infile => 'changelog',
+					      quiet => 1 } );
+if (my @errors = $changes->get_parse_errors) {
+    foreach (@errors) {
+	tag "syntax-error-in-debian-changelog", "line $_->[1]", "\"$_->[2]\"";
+    }
+}
+
+my @entries = $changes->data;
+if (@entries) {
+    foreach (@entries) {
+	if ($_->Maintainer =~ /<([^>\@]+\@unknown)>/) {
+	    tag "debian-changelog-file-contains-debmake-default-email-address", $1;
+	} elsif ($_->Maintainer =~ /<([^>\@]+\@[^>.]*)>/) {
+	    tag "debian-changelog-file-contains-invalid-email-address", $1;
+	}
+    }
+
+    if (@entries > 1) {
+	my $first_timestamp = ($changes->data)[0]->Timestamp;
+	my $second_timestamp = ($changes->data)[1]->Timestamp;
+
+	if ( $first_timestamp && $second_timestamp ) {
+	    tag "latest-debian-changelog-entry-without-new-date"
+		unless (($first_timestamp - $second_timestamp) > 0);
+	}
+    }
+}
+
+
 # read the changelog itself
 #
 # emacs only looks at the last "local variables:" in a file, and only at
@@ -219,49 +250,21 @@
 # pesky to replicate.  Demanding a match of $prefix and $suffix ought to
 # be enough to avoid false positives.
 open IN, "changelog" or fail("cannot find changelog for $type package $pkg");
-my ($prefix, $suffix, $first_entry_date, $second_entry_date);
+my ($prefix, $suffix);
 while (<IN>) {
-    if (/^ -- .+>  (.+?)$/) {
-	if (!$first_entry_date) {
-	    $first_entry_date = $1;
-	} elsif (!$second_entry_date) {
-	    $second_entry_date = $1;
-	}
-    }
-
     if (/^(.*)Local variables:(.*)$/i) {
 	$prefix = $1;
 	$suffix = $2;
     }
     # emacs allows whitespace between prefix and variable, hence \s*
-    if (defined $prefix && defined $suffix && /^\Q$prefix\E\s*add-log-mailing-address:.*\Q$suffix\E$/) {
+    if (defined $prefix && defined $suffix
+	&& /^\Q$prefix\E\s*add-log-mailing-address:.*\Q$suffix\E$/) {
 	tag "debian-changelog-file-contains-obsolete-user-emacs-settings";
     }
-    if (/^\s*--[^<]*<([^>\@]+\@unknown)>/) {
-       tag "debian-changelog-file-contains-debmake-default-email-address", $1;
-    } elsif (/^\s*--[^<]*<([^>\@]+\@[^>.]*)>/) {
-       tag "debian-changelog-file-contains-invalid-email-address", $1;
-    }
 }
 close IN;
 
-if ($first_entry_date && $second_entry_date) {
-    my ($first_timestamp, $second_timestamp);
-    chomp($first_timestamp = `/bin/date -d "$first_entry_date" +\%s 2>/dev/null`);
-    chomp($second_timestamp = `/bin/date -d "$second_entry_date" +\%s 2>/dev/null`);
-
-    unless ( $first_timestamp && $second_timestamp ) {
-	tag "invalid-date-in-changelog", $first_entry_date 
-	    unless $first_timestamp;
-	
-	tag "invalid-date-in-changelog", $second_entry_date 
-	    unless $second_timestamp;
-    } else {
-	tag "latest-debian-changelog-entry-without-new-date" 
-	    unless (($first_timestamp - $second_timestamp) > 0);
-    }
 }
-}
 
 1;
 

Modified: trunk/checks/changelog-file.desc
===================================================================
--- trunk/checks/changelog-file.desc	2005-07-23 10:45:33 UTC (rev 446)
+++ trunk/checks/changelog-file.desc	2005-07-23 11:30:11 UTC (rev 447)
@@ -107,13 +107,11 @@
   $ iconv -f ISO-8859-1 -t UTF-8 changelog > changelog.new
   $ mv changelog.new changelog
 
-Tag: invalid-date-in-changelog
-Type: warning
-Info: /bin/date couldn't parse the date of one of your changelog
- entries. The date should be in RFC822 format.
-Ref: policy 4.4
-
 Tag: latest-debian-changelog-entry-without-new-date
 Type: warning
 Info: The latest Debian changelog has either the same or even an older date
  as the entry before.
+
+Tag: syntax-error-in-debian-changelog
+Type: warning
+Info: While parsing the Debian changelog, an syntax error was found.

Modified: trunk/debian/changelog
===================================================================
--- trunk/debian/changelog	2005-07-23 10:45:33 UTC (rev 446)
+++ trunk/debian/changelog	2005-07-23 11:30:11 UTC (rev 447)
@@ -1,5 +1,13 @@
 lintian (1.23.11) UNRELEASED; urgency=low
 
+  * debian/control:
+    + [FL] Depend on libparse-debianchangelog-perl, require
+      >= 0.6 since prior versions have bugs regarding parse
+      error handling
+  
+  * checks/changelog-file{,.desc}:
+    + [FL] Use libparse-debianchangelog-perl to parse the changelog,
+      which detects a lot of syntax errors
   * checks/common_data.pm:
     + [FL] Fix typo (hurd-386 -> hurd-i386) from last release
       that lead to spurious warnings about unknown architectures

Modified: trunk/debian/control
===================================================================
--- trunk/debian/control	2005-07-23 10:45:33 UTC (rev 446)
+++ trunk/debian/control	2005-07-23 11:30:11 UTC (rev 447)
@@ -9,7 +9,7 @@
 
 Package: lintian
 Architecture: all
-Depends: perl, libdigest-md5-perl | perl (>> 5.8), file, binutils, diffstat (>= 1.27-1), man-db (>= 2.3.20-1), gettext, intltool-debian
+Depends: perl, libdigest-md5-perl | perl (>> 5.8), file, binutils, diffstat (>= 1.27-1), man-db (>= 2.3.20-1), gettext, intltool-debian, libparse-debianchangelog-perl (>= 0.6)
 Suggests: binutils-multiarch
 Description: Debian package checker
  Lintian dissects Debian packages and reports bugs and policy

Modified: trunk/testset/tags.binary
===================================================================
--- trunk/testset/tags.binary	2005-07-23 10:45:33 UTC (rev 446)
+++ trunk/testset/tags.binary	2005-07-23 11:30:11 UTC (rev 447)
@@ -32,7 +32,6 @@
 W: binary: binary-without-manpage static-hello
 W: binary: executable-not-elf-or-script ./usr/bin/iminusrbin
 W: binary: file-in-unusual-dir usr/bar
-W: binary: invalid-date-in-changelog The, 15 Apr 2004 23:33:51 +0200
 W: binary: menu-command-not-in-package /usr/lib/menu/binary:6 /imnothere
 W: binary: menu-command-not-in-package /usr/share/menu/binary:6 /imnothere
 W: binary: menu-file-in-usr-lib usr/lib/menu/binary
@@ -40,6 +39,7 @@
 W: binary: menu-item-needs-tag-has-unknown-value wm /usr/share/menu/binary:5
 W: binary: package-contains-hardlink usr/bar2 -> usr/share/baz
 W: binary: package-contains-upstream-install-documentation usr/share/doc/binary/INSTALL
+W: binary: syntax-error-in-debian-changelog line 16 "couldn't parse date The, 15 Apr 2004 23:33:51 +0200"
 W: binary: unquoted-string-in-menu-item /usr/lib/menu/binary needs:1
 W: binary: unquoted-string-in-menu-item /usr/lib/menu/binary needs:2
 W: binary: unquoted-string-in-menu-item /usr/share/menu/binary needs:1

Modified: trunk/testset/tags.filenames
===================================================================
--- trunk/testset/tags.filenames	2005-07-23 10:45:33 UTC (rev 446)
+++ trunk/testset/tags.filenames	2005-07-23 11:30:11 UTC (rev 447)
@@ -59,6 +59,7 @@
 W: filenames: symlink-is-self-recursive usr/lib/filenames/symlink5ok+warn ..
 W: filenames: symlink-is-self-recursive usr/lib/filenames/symlink6ok+warn .
 W: filenames: symlink-is-self-recursive usr/lib/filenames/symlink7ok+warn /
+W: filenames: syntax-error-in-debian-changelog line 0 "found eof where expected first heading"
 W: filenames: zero-byte-file-in-doc-directory usr/share/doc/filenames/Changes.gz
 W: filenames: zero-byte-file-in-doc-directory usr/share/doc/filenames/README.macosx
 W: filenames: zero-byte-file-in-doc-directory usr/share/doc/filenames/examples/very_interesting_example



Reply to: