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

[SCM] Debian package checker branch, master, updated. 2.2.18-33-g3cfd89c



The following commit has been merged in the master branch:
commit 8d291a56625969c58105f93045169ae03d989c7c
Author: Russ Allbery <rra@debian.org>
Date:   Wed Dec 23 17:40:41 2009 -0800

    Fix bugs in the new display level handling
    
    There were some problems with the new display level parsing and error
    reporting.  Clean that up, report errors properly through the frontend,
    and refactor the error reporting code.

diff --git a/frontend/lintian b/frontend/lintian
index 434ba8f..58b8db6 100755
--- a/frontend/lintian
+++ b/frontend/lintian
@@ -317,8 +317,13 @@ sub record_pkgmode {
 # Process -L|--display-level flag
 sub record_display_level {
     my ($option, $level) = @_;
-    my ($op) = ($level =~ s/^([+=-])//);
-    my ($rel) = ($level =~ s/^([<>]=?|=)//);
+    my ($op, $rel);
+    if ($level =~ s/^([+=-])//) {
+	$op = $1;
+    }
+    if ($level =~ s/^([<>]=?|=)//) {
+	$rel = $1;
+    }
     my ($severity, $certainty) = split('/', $level);
     $op = '=' unless defined $op;
     $rel = '=' unless defined $rel;
@@ -647,7 +652,12 @@ $TAGS->suppress(keys %suppress_tags) if %suppress_tags;
 
 # Initialize display level settings.
 for my $level (@display_level) {
-    $TAGS->display(@$level);
+    eval { $TAGS->display(@$level) };
+    if ($@) {
+	my $error = $@;
+	$error =~ s/ at .*//;
+	die $error, "\n";
+    }
 }
 
 use warnings;
diff --git a/lib/Lintian/Tags.pm b/lib/Lintian/Tags.pm
index 4ebadd5..63d250b 100644
--- a/lib/Lintian/Tags.pm
+++ b/lib/Lintian/Tags.pm
@@ -325,9 +325,27 @@ sub _relation_subset {
     }
 }
 
+# Given the operation, relation, severity, and certainty, produce a
+# human-readable representation of the display level string for errors.
+sub _format_level {
+    my ($self, $op, $rel, $severity, $certainty) = @_;
+    if (not defined $severity and not defined $certainty) {
+        return "$op $rel";
+    } elsif (not defined $severity) {
+        return "$op $rel $certainty (certainty)";
+    } elsif (not defined $certainty) {
+        return "$op $rel $severity (severity)";
+    } else {
+        return "$op $rel $severity/$certainty";
+    }
+}
+
 sub display {
     my ($self, $op, $rel, $severity, $certainty) = @_;
-    return unless ($op =~ /^[+=-]\z/ and $rel =~ /^(?:[<>]=?|=)\z/);
+    unless ($op =~ /^[+=-]\z/ and $rel =~ /^(?:[<>]=?|=)\z/) {
+        my $error = $self->_format_level($op, $rel, $severity, $certainty);
+        die "invalid display constraint " . $error;
+    }
     if ($op eq '=') {
         for my $s (@SEVERITIES) {
             for my $c (@CERTAINTIES) {
@@ -348,15 +366,8 @@ sub display {
         @certainties = @CERTAINTIES;
     }
     unless (@severities and @certainties) {
-        if (not defined $severity and not defined $certainty) {
-            die "invalid display constraint $op $rel";
-        } elsif (not defined $severity) {
-            die "invalid display constraint $op $rel $certainty (certainty)";
-        } elsif (not defined $certainty) {
-            die "invalid display constraint $op $rel $severity (severity)";
-        } else {
-            die "invalid display constraint $op $rel $severity/$certainty";
-        }
+        my $error = $self->_format_level($op, $rel, $severity, $certainty);
+        die "invalid display constraint " . $error;
     }
     for my $s (@severities) {
         for my $c (@certainties) {

-- 
Debian package checker


Reply to: