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

[SCM] Debian package checker branch, master, updated. 2.5.1-214-gd38a152



The following commit has been merged in the master branch:
commit d38a1522a91fd2739a38200bd00909b61a272b6e
Author: Niels Thykier <niels@thykier.net>
Date:   Wed Aug 10 16:03:43 2011 +0200

    use Dpkg::Version in checks/fields to validate and split versions
    
    Dpkg::Version does a better job with validating some versions[1] and
    is already available due to the libdpkg-perl (runtime) dependency.
    The Build-Depends have been updated to include libdpkg-perl,
    previously it was not required since libdpkg-perl was only used as
    a fallback when dpkg-dev (build-essential) was not present.
    
    [1] Cases including invalid epochs (e.g. a:0-1), which the old
    Lintian version checker would "accept" by considering the epoch
    for a part of the upstream version.

diff --git a/checks/fields b/checks/fields
index 8020e2a..4be2dc5 100644
--- a/checks/fields
+++ b/checks/fields
@@ -26,6 +26,8 @@ package Lintian::fields;
 use strict;
 use warnings;
 
+use Dpkg::Version qw(version_check);
+
 use lib "$ENV{'LINTIAN_ROOT'}/checks/";
 
 use Util;
@@ -202,35 +204,36 @@ if (not defined $info->field('version')) {
 	$version = $info->field('version');
 
 	unfold('version', \$version);
+	my $dversion = Dpkg::Version->new($version);
 
-	if (@_ = _valid_version($version)) {
-		my ($epoch, $upstream, $debian) = @_;
+	if ($dversion->is_valid) {
+		my ($upstream, $debian) = ($dversion->version, $dversion->revision);
 		if ($upstream !~ /^\d/i) {
 			tag 'upstream-version-not-numeric', $version;
 		}
-		if (defined $debian) {
-			tag 'debian-revision-should-not-be-zero', $version
-				if $debian eq '-0';
-			my $ubuntu;
-			if($debian =~ /^-(?:[^.]+)(?:\.[^.]+)?(?:\.[^.]+)?(\..*)?$/o){
-			    my $extra = $1;
-			    if (defined $extra
-				&& $debian =~ /^-(?:[^.]+ubuntu[^.]+)(?:\.\d+){1,3}(\..*)?$/o){
-				$ubuntu = 1;
-				$extra = $1;
-			    }
-			    if (defined $extra) {
-				tag 'debian-revision-not-well-formed', $version;
-			    }
-			} else {
-			    tag 'debian-revision-not-well-formed', $version;
-			}
-			if ($debian =~ /^-[^.-]+\.[^.-]+\./ and not $ubuntu) {
-				tag 'binary-nmu-uses-old-version-style', $version
-					if $type eq 'binary';
-				tag 'binary-nmu-debian-revision-in-source', $version
-					if $type eq 'source';
-			}
+		# Dpkg::Version sets the debian revision to 0 if there is no revision.
+		# - so we need to check if the raw version ends with "-0".
+		tag 'debian-revision-should-not-be-zero', $version
+		    if $version =~ m/-0$/o;
+		my $ubuntu;
+		if($debian =~ m/^(?:[^.]+)(?:\.[^.]+)?(?:\.[^.]+)?(\..*)?$/o){
+		    my $extra = $1;
+		    if (defined $extra
+			&& $debian =~ /^(?:[^.]+ubuntu[^.]+)(?:\.\d+){1,3}(\..*)?$/o){
+			$ubuntu = 1;
+			$extra = $1;
+		    }
+		    if (defined $extra) {
+			tag 'debian-revision-not-well-formed', $version;
+		    }
+		} else {
+		    tag 'debian-revision-not-well-formed', $version;
+		}
+		if ($debian =~ /^[^.-]+\.[^.-]+\./o and not $ubuntu) {
+		    tag 'binary-nmu-uses-old-version-style', $version
+			if $type eq 'binary';
+		    tag 'binary-nmu-debian-revision-in-source', $version
+			if $type eq 'source';
 		}
 		if ($version =~ /\+b\d+$/ && $type eq 'source') {
 			tag 'binary-nmu-debian-revision-in-source', $version;
@@ -602,7 +605,7 @@ if (($type eq 'binary') || ($type eq 'udeb')) {
 				    if ($d_version && grep { $d_version->[0] eq $_ } ('<', '>'));
 
 				tag 'bad-version-in-relation', "$field: $part_d_orig"
-				    if ($d_version->[0] && ! defined((_valid_version($d_version->[1]))[1]));
+				    if ($d_version->[0] && ! version_check($d_version->[1]));
 
 				tag 'package-relation-with-self', "$field: $part_d_orig"
 				    if ($pkg eq $d_pkg) && ($field ne 'conflicts');
@@ -989,24 +992,11 @@ sub _split_dep {
 	return ($pkg, $version, $darch, $dep);
 }
 
-sub _valid_version {
-	my $ver = shift;
-
-	# epoch check means nothing here... This check is only useful to detect
-	# weird characters in version (and to get the debian revision)
-	if ($ver =~ m/^(\d+:)?([-\.+:~A-Z0-9]+?)(-[\.+~A-Z0-9]+)?$/i) {
-		return ($1, $2, $3);
-	} else {
-		return ();
-	}
-}
-
 sub perl_core_has_version {
 	my ($package, $op, $version) = @_;
 	my $core_version = $PERL_CORE_PROVIDES->value($package);
 	return 0 if !defined $core_version;
-	my @version = _valid_version($version);
-	return 0 if !@version;
+	return 0 unless version_check($version);
 	return versions_compare($core_version, $op, $version);
 }
 
diff --git a/debian/control b/debian/control
index cbafd62..651c575 100644
--- a/debian/control
+++ b/debian/control
@@ -23,6 +23,7 @@ Build-Depends: binutils,
                javahelper (>= 0.32~),
                libapt-pkg-perl,
                libclass-accessor-perl,
+               libdpkg-perl,
                libdigest-sha-perl,
                libemail-valid-perl,
                libhtml-parser-perl,

-- 
Debian package checker


Reply to: