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

[lintian] 02/04: c/debhelper: Add support for named compat levels



This is an automated email from the git hooks/post-receive script.

nthykier pushed a commit to branch master
in repository lintian.

commit 8ca2b63897c609d389c81db645593e2ff3f06836
Author: Niels Thykier <niels@thykier.net>
Date:   Sun Sep 11 10:15:04 2016 +0000

    c/debhelper: Add support for named compat levels
    
    Signed-off-by: Niels Thykier <niels@thykier.net>
---
 checks/debhelper.pm                                | 40 +++++++++++++++++-----
 data/debhelper/named-compat-levels                 |  5 +++
 debian/changelog                                   |  3 ++
 .../debhelper-compat-named/debian/debian/compat    |  1 +
 .../debian/debian/control.in                       | 15 ++++++++
 t/tests/debhelper-compat-named/desc                |  9 +++++
 t/tests/debhelper-compat-named/tags                |  1 +
 7 files changed, 65 insertions(+), 9 deletions(-)

diff --git a/checks/debhelper.pm b/checks/debhelper.pm
index 6e4bc26..4caa507 100644
--- a/checks/debhelper.pm
+++ b/checks/debhelper.pm
@@ -46,17 +46,18 @@ my $dh_addons_manual
 my $compat_level = Lintian::Data->new('debhelper/compat-level',qr/=/);
 
 my $MISC_DEPENDS = Lintian::Relation->new('${misc:Depends}');
+my $NAMED_COMPAT_LEVELS = Lintian::Data->new('debhelper/named-compat-levels',
+    qr/\s*=>\s*/, \&_named_compat_levels);
 
 sub run {
     my (undef, undef, $info) = @_;
     my $droot = $info->index_resolved_path('debian/');
-    my $drules;
+    my ($drules, $dh_bd_version, $level, $using_named_compat);
 
     my $seencommand = '';
     my $needbuilddepends = '';
     my $needdhexecbuilddepends = '';
     my $needtomodifyscripts = '';
-    my $level;
     my $compat = 0;
     my $seendhcleank = '';
     my %missingbdeps;
@@ -261,18 +262,25 @@ sub run {
         ($compat) = split(/\n/, $compat_file);
         strip($compat);
         if ($compat ne '') {
-            if ($compat !~ m/^\d+$/) {
+            my $compat_value = $compat;
+            if (my $named_compat = $NAMED_COMPAT_LEVELS->value($compat)) {
+                $dh_bd_version = $named_compat->{'introduced-in'};
+                $compat_value = $named_compat->{'compat-level'};
+                $using_named_compat = 1;
+            } elsif ($compat !~ m/^\d+$/) {
                 tag 'debhelper-compat-not-a-number', $compat;
                 $compat =~ s/[^\d]//g;
                 $compatnan = 1;
             }
             if ($level) {
+                my $c = $compat;
+                $c .= " ($compat_value)" if $using_named_compat;
                 tag 'declares-possibly-conflicting-debhelper-compat-versions',
-                  "rules=$level compat=$compat";
+                  "rules=$level compat=${c}";
             } else {
                 # this is not just to fill in the gap, but because debhelper
                 # prefers DH_COMPAT over debian/compat
-                $level = $compat;
+                $level = $compat_value;
             }
         } else {
             tag 'debhelper-compat-file-is-empty';
@@ -415,12 +423,16 @@ sub run {
           unless ($bdepends_noarch->implies($dep));
     }
 
-    unless ($bdepends->implies("debhelper (>= $level~)")){
+    $dh_bd_version = $level if not defined($dh_bd_version);
+    unless ($bdepends->implies("debhelper (>= ${dh_bd_version}~)")){
         my $tagname = 'package-needs-versioned-debhelper-build-depends';
+        my @extra = ($level);
         $tagname = 'package-lacks-versioned-build-depends-on-debhelper'
-          if ($level <= $compat_level->value('pedantic'));
-
-        tag $tagname, $level;
+          if ($dh_bd_version <= $compat_level->value('pedantic'));
+        if ($using_named_compat) {
+            push(@extra, '(for the named compat level)');
+        }
+        tag $tagname, @extra;
     }
 
     if ($seen_dh and not $seen_python_helper) {
@@ -568,6 +580,16 @@ sub _shebang_cmd {
     return $cmd;
 }
 
+sub _named_compat_levels {
+    my ($key, $raw_val, undef) = @_;
+    my $result = {};
+    for my $opt (split(m/\s*,\s*/, $raw_val)) {
+        my ($key, $val) = split(m/\s*=\s*/, $opt, 2);
+        $result->{$key} = $val;
+    }
+    return $result;
+}
+
 1;
 
 # Local Variables:
diff --git a/data/debhelper/named-compat-levels b/data/debhelper/named-compat-levels
new file mode 100644
index 0000000..47c221d
--- /dev/null
+++ b/data/debhelper/named-compat-levels
@@ -0,0 +1,5 @@
+# List of all "named" compat levels and when they were introduced
+#
+
+beta-tester          => introduced-in=10,compat-level=10
+bleeding-edge-tester => introduced-in=10,compat-level=10
diff --git a/debian/changelog b/debian/changelog
index 4d085a9..57381dd 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -12,6 +12,7 @@ lintian (2.5.47) UNRELEASED; urgency=medium
   * checks/debhelper.pm:
     + [NT] Remove logic for CDBS creating a compat file when it is absent
       as debhelper now requires a compat file unconditionally.
+    + [NT] Support the new named compat levels in debhelper.
   * checks/duplicate-files.desc:
     + [JW] Fix typo.
   * checks/fields.{desc,pm}:
@@ -39,6 +40,8 @@ lintian (2.5.47) UNRELEASED; urgency=medium
   * data/debhelper/dh_{addons,commands}-manual:
     + [JW] Add dh-autoreconf, which is now a dependency of debhelper.
       Thanks to Michael Biebl for the bug report.  (Closes: #835449)
+  * data/debhelper/named-compat-levels:
+    + [NT] New file.
   * data/output/manual-references:
     + [JW] Refresh.
   * data/scripts/interpreters:
diff --git a/t/tests/debhelper-compat-named/debian/debian/compat b/t/tests/debhelper-compat-named/debian/debian/compat
new file mode 100644
index 0000000..400f85f
--- /dev/null
+++ b/t/tests/debhelper-compat-named/debian/debian/compat
@@ -0,0 +1 @@
+beta-tester
diff --git a/t/tests/debhelper-compat-named/debian/debian/control.in b/t/tests/debhelper-compat-named/debian/debian/control.in
new file mode 100644
index 0000000..b7294a9
--- /dev/null
+++ b/t/tests/debhelper-compat-named/debian/debian/control.in
@@ -0,0 +1,15 @@
+Source: {$source}
+Priority: extra
+Section: {$section}
+Maintainer: {$author}
+Standards-Version: {$standards_version}
+Build-Depends: debhelper
+
+Package: {$source}
+Architecture: {$architecture}
+Depends: $\{shlibs:Depends\}, $\{misc:Depends\}
+Description: {$description}
+ This is a test package designed to exercise some feature or tag of
+ Lintian.  It is part of the Lintian test suite and may do very odd
+ things.  It should not be installed like a regular package.  It may
+ be an empty package.
diff --git a/t/tests/debhelper-compat-named/desc b/t/tests/debhelper-compat-named/desc
new file mode 100644
index 0000000..209861e
--- /dev/null
+++ b/t/tests/debhelper-compat-named/desc
@@ -0,0 +1,9 @@
+Testname: debhelper-compat-named
+Sequence: 6000
+Version: 1.0
+Description: Test support for named compat levels
+Test-Depends: debhelper (>= 10),
+Test-For:
+ package-needs-versioned-debhelper-build-depends
+Test-Against:
+ debhelper-compat-not-a-number
diff --git a/t/tests/debhelper-compat-named/tags b/t/tests/debhelper-compat-named/tags
new file mode 100644
index 0000000..c96c9ee
--- /dev/null
+++ b/t/tests/debhelper-compat-named/tags
@@ -0,0 +1 @@
+W: debhelper-compat-named source: package-needs-versioned-debhelper-build-depends 10 (for the named compat level)

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/lintian/lintian.git


Reply to: