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

Bug#575064: [checks/watch-file] another check for dversionmangle vs uversionmangle



Package: lintian
Version: 2.3.4
Severity: wishlist
Tags: patch

The watch file business of dversionmangle and uversionmangle can occasionally
be confusing, so I propose another check to help people along.  People might
do something like this

opts=dversionmangle=s/~rc/-rc/

but I finally figured out that one should do

opts=uversionmangle=s/-rc/~rc/

instead so that the final release after the rc is sorted correctly by uscan.

Since there is already another check that addresses a similar but opposite
case, I think this would be a useful addition.

Let me know what you think.
diff --git a/checks/watch-file b/checks/watch-file
index a9f4bfa..aa11b7a 100644
--- a/checks/watch-file
+++ b/checks/watch-file
@@ -47,6 +47,10 @@ my $repack;
 if ($version =~ /(dfsg|debian|ds)/) {
     $repack = $1;
 }
+my $prerelease;
+if ($version =~ /(alpha|beta|rc)/i) {
+    $prerelease = $1;
+}
 
 # Gather information from the watch file and look for problems we can
 # diagnose on the first time through.
@@ -83,15 +87,17 @@ while (<WATCH>) {
         # Version 1 watch files are too broken to try checking them.
         next if ($watchver == 1);
 
-        my ($mangle, $dmangle) = (0, 0);
+        my ($repack_mangle, $repack_dmangle, $prerelease_mangle, $prerelease_umangle) = (0, 0, 0, 0);
         my ($opts, @opts);
         if (s/^opt(?:ion)?s=\"([^\"]+)\"\s+// || s/^opt(?:ion)?s=(\S+)\s+//) {
             $opts = $1;
             @opts = split(',', $opts);
-            if (defined $repack) {
+            if (defined $repack or defined $prerelease) {
                 for (@opts) {
-                    $mangle = 1 if /^[ud]?versionmangle\s*=.*($repack)/;
-                    $dmangle = 1 if /^dversionmangle\s*=.*($repack)/;
+                    $repack_mangle = 1 if defined $repack and /^[ud]?versionmangle\s*=.*($repack)/;
+                    $repack_dmangle = 1 if defined $repack and /^dversionmangle\s*=.*($repack)/;
+                    $prerelease_mangle = 1 if defined $prerelease and /^[ud]?versionmangle\s*=.*($prerelease)/;
+                    $prerelease_umangle = 1 if defined $prerelease and /^uversionmangle\s*=.*($prerelease)/;
                 }
             }
         }
@@ -118,15 +124,20 @@ while (<WATCH>) {
         push @{$dversions{$lastversion}}, $. if (defined($lastversion));
         $lastversion = 'debian' unless (defined($lastversion));
 
-        my $needs_mangling = ($repack and $lastversion eq 'debian');
+        my $needs_repack_mangling = ($repack and $lastversion eq 'debian');
         # If the version of the package contains dfsg, assume that it needs
         # to be mangled to get reasonable matches with upstream.
-        if ($needs_mangling and not $mangle) {
+        if ($needs_repack_mangling and not $repack_mangle) {
             tag 'debian-watch-file-should-mangle-version', "line $.";
         }
-        if ($needs_mangling and $mangle and not $dmangle) {
+        if ($needs_repack_mangling and $repack_mangle and not $repack_dmangle) {
             tag 'debian-watch-file-should-dversionmangle-not-uversionmangle', "line $.";
         }
+
+        my $needs_prerelease_mangling = ($prerelease and $lastversion eq 'debian');
+        if ($needs_prerelease_mangling and $prerelease_mangle and not $prerelease_umangle) {
+            tag 'debian-watch-file-should-uversionmangle-not-dversionmangle', "line $.";
+        }
     }
 }
 close WATCH;
diff --git a/checks/watch-file.desc b/checks/watch-file.desc
index 454dc61..5f8b607 100644
--- a/checks/watch-file.desc
+++ b/checks/watch-file.desc
@@ -73,6 +73,16 @@ Info: The version of this package contains <tt>dfsg</tt>, <tt>ds</tt>,
  remove, instead of adding in uversionmangle, the <tt>dfsg</tt> before
  comparing version numbers.
 
+Tag: debian-watch-file-should-uversionmangle-not-dversionmangle
+Severity: wishlist
+Certainty: certain
+Ref: http://wiki.debian.org/DEHS
+Info: The version of this package contains <tt>alpha</tt>, <tt>beta</tt>,
+ or <tt>rc</tt>, but a misleading Debian version mangling occurs in
+ the <tt>debian/watch</tt> file.  You should use the uversionmangle
+ option instead of dversionmangle so that the prerelease is sorted by
+ uscan before a possible future final release.
+
 Tag: debian-watch-file-in-native-package
 Severity: normal
 Certainty: certain
diff --git a/debian/changelog b/debian/changelog
index 85bd7ba..a42669f 100755
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,4 +1,4 @@
-lintian (2.3.4) UNRELEASED; urgency=low
+lintian (2.3.4~privatetest) UNRELEASED; urgency=low
 
   * Summary of tag changes:
     + Added:
@@ -13,6 +13,7 @@ lintian (2.3.4) UNRELEASED; urgency=low
       - unknown-file-in-debian-source
       - unknown-source-format
       - unknown-locale-code
+      - debian-watch-file-should-uversionmangle-not-dversionmangle
 
   * checks/binaries:
     + [RA] Exclude packages from the klibc source package from the
@@ -108,6 +109,8 @@ lintian (2.3.4) UNRELEASED; urgency=low
     + [RG] Don't warn about timewarp-standards-version when the
       changelog's distribution is "UNRELEASED."  Thanks, Raphaël Hertzog.
       (Closes: #571616)
+  * checks/watch-file:
+    + [PE] New check debian-watch-file-should-uversionmangle-not-dversionmangle
 
   * collection/debfiles:
     + [RA] Simplify the logic since the entire debian directory is always

Reply to: