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

[SCM] Debian package checker branch, master, updated. 2.3.4-34-gc1d25a1



The following commit has been merged in the master branch:
commit c1d25a121e547079d6b09b1e49d3f27c9316ea5a
Author: Russ Allbery <rra@debian.org>
Date:   Thu Mar 25 15:28:35 2010 -0700

    Track local diversions through other diversion checks
    
    * checks/scripts:
      + [RA] Track local diversions like other diversions for the purposes
        of checking for orphans and diversions of unknown files.  Partly
        addresses #575361.

diff --git a/checks/scripts b/checks/scripts
index 62d4742..e82dc31 100644
--- a/checks/scripts
+++ b/checks/scripts
@@ -945,53 +945,51 @@ while (<SCRIPTS>) {
 	if (m,$LEADIN(?:/usr/sbin/)?dpkg-divert\s, && ! /--(?:help|list|truename|version)/) {
 	    if (/--local/ or !/--package/) {
 		tag 'package-uses-local-diversion', "$file:$.";
+	    }
+	    my $mode = /--remove/ ? 'remove' : 'add';
+	    my ($divert) = /dpkg-divert\s*(.*)$/;
+	    $divert =~ s/\s*--(?:add|quiet|remove|rename|test|local|(:?admindir|divert|package)\s+\S+)\s*//g;
+	    # Remove unpaired opening or closing parenthesis
+	    1 while($divert =~ m/\G.*?\(.+?\)/gc);
+	    $divert =~ s/\G(.*?)[()]/$1/;
+	    pos($divert) = undef;
+	    # Remove unpaired opening or closing braces
+	    1 while($divert =~ m/\G.*?{.+?}/gc);
+	    $divert =~ s/\G(.*?)[{}]/$1/;
+	    pos($divert) = undef;
+
+	    # position after the last pair of quotation marks, if any
+	    1 while($divert =~ m/\G.*?(\"|\').+?\1/gc);
+	    # Strip anything matching and after '&&', '||', ';', or '>'
+	    # this is safe only after we are positioned after the last pair
+	    # of quotation marks
+	    $divert =~ s/\G.+?\K(?: && | \|\| | ; | \d*> ).*$//x;
+	    pos($divert) = undef;
+	    # Remove quotation marks, they affect:
+	    # * our var to regex trick
+	    # * stripping the initial slash if the path was quoted
+	    $divert =~ s/[\"\']//g;
+	    # remove the leading / because it's not in the index hash
+	    $divert =~ s,^/,,;
+
+	    # remove any remaining leading or trailing whitespace.
+	    $divert =~ s/^\s+//;
+	    $divert =~ s/\s+$//;
+
+	    $divert = quotemeta($divert);
+
+	    # For now just replace variables, they will later be normalised
+	    $expand_diversions = 1 if $divert =~ s/\\\$\w+/.+/g;
+	    $expand_diversions = 1 if $divert =~ s/\\\$\\{\w+.*?\\}/.+/g;
+	    # handle $() the same way:
+	    $expand_diversions = 1 if $divert =~ s/\\\$\\\(.+?\\\)/.+/g;
+
+	    if ($mode eq 'add') {
+		$added_diversions{$divert} = {'script' => $file, 'line' => $.};
+	    } elsif ($mode eq 'remove') {
+		push @{$removed_diversions{$divert}}, {'script' => $file, 'line' => $.};
 	    } else {
-		my $mode = /--remove/ ? 'remove' : 'add';
-		my ($divert) = /dpkg-divert\s*(.*)$/;
-		$divert =~ s/\s*--(?:add|quiet|remove|rename|test|(:?admindir|divert|package)\s+\S+)\s*//g;
-		# Remove unpaired opening or closing parenthesis
-		1 while($divert =~ m/\G.*?\(.+?\)/gc);
-		$divert =~ s/\G(.*?)[()]/$1/;
-		pos($divert) = undef;
-		# Remove unpaired opening or closing braces
-		1 while($divert =~ m/\G.*?{.+?}/gc);
-		$divert =~ s/\G(.*?)[{}]/$1/;
-		pos($divert) = undef;
-
-		# position after the last pair of quotation marks, if any
-		1 while($divert =~ m/\G.*?(\"|\').+?\1/gc);
-		# Strip anything matching and after '&&', '||', ';', or '>'
-		# this is safe only after we are positioned after the last pair
-		# of quotation marks
-		$divert =~ s/\G.+?\K(?: && | \|\| | ; | \d*> ).*$//x;
-		pos($divert) = undef;
-		# Remove quotation marks, they affect:
-		# * our var to regex trick
-		# * stripping the initial slash if the path was quoted
-		$divert =~ s/[\"\']//g;
-		# remove the leading / because it's not in the index hash
-		$divert =~ s,^/,,;
-
-		# remove any remaining leading or trailing whitespace.
-		$divert =~ s/^\s+//;
-		$divert =~ s/\s+$//;
-
-		$divert = quotemeta($divert);
-
-		# For now just replace variables, they will later be normalised
-		$expand_diversions = 1 if $divert =~ s/\\\$\w+/.+/g;
-		$expand_diversions = 1 if $divert =~ s/\\\$\\{\w+.*?\\}/.+/g;
-		# handle $() the same way:
-		$expand_diversions = 1 if $divert =~ s/\\\$\\\(.+?\\\)/.+/g;
-
-		if ($mode eq 'add') {
-		    $added_diversions{$divert} = {'script' => $file, 'line' => $.};
-		} elsif ($mode eq 'remove') {
-		    push @{$removed_diversions{$divert}}, {'script' => $file, 'line' => $.};
-		} else {
-		    fail "Internal error: \$mode has unknown value: ".
-			"$mode";
-		}
+		fail "Internal error: \$mode has unknown value: $mode";
 	    }
 	}
     }
diff --git a/debian/changelog b/debian/changelog
index f0faa6f..1d4f5b9 100755
--- a/debian/changelog
+++ b/debian/changelog
@@ -18,6 +18,10 @@ lintian (2.3.5) UNRELEASED; urgency=low
     + [RA] Skip leading multi-author changelog lines when looking for
       things like non-maintainer upload notes at the start of the
       changelog entry.  Thanks, Vincent Danjean.  (Closes: #575192)
+  * checks/scripts:
+    + [RA] Track local diversions like other diversions for the purposes
+      of checking for orphans and diversions of unknown files.  Partly
+      addresses #575361.
   * checks/watch-file{,.desc}:
     + [RA] Warn about use of dversionmangle instead of uversionmangle to
       handle tildes for upstream pre-releases.  Patch from Peter
diff --git a/t/tests/scripts-diversions-variables/tags b/t/tests/scripts-diversions-variables/tags
index 3e321b3..ba22c9d 100644
--- a/t/tests/scripts-diversions-variables/tags
+++ b/t/tests/scripts-diversions-variables/tags
@@ -1,5 +1,7 @@
 E: scripts-diversions-variables: diversion-for-unknown-file etc/scripts/* preinst:26
 E: scripts-diversions-variables: diversion-for-unknown-file usr/share/foo/* preinst:30
+E: scripts-diversions-variables: diversion-for-unknown-file usr/share/scripts/other-file preinst:15
+E: scripts-diversions-variables: orphaned-diversion usr/share/scripts/other-file preinst
 E: scripts-diversions-variables: orphaned-diversion usr/share/scripts/t1/* preinst
 E: scripts-diversions-variables: package-uses-local-diversion preinst:15
 E: scripts-diversions-variables: remove-of-unknown-diversion usr/lib/*/old-file postrm:13
diff --git a/t/tests/scripts-diversions/debian/debian/postrm b/t/tests/scripts-diversions/debian/debian/postrm
index 383d0d2..26128e9 100644
--- a/t/tests/scripts-diversions/debian/debian/postrm
+++ b/t/tests/scripts-diversions/debian/debian/postrm
@@ -25,6 +25,10 @@ if [ remove = "$1" ]; then
     dpkg-divert --remove --package scripts-diversions \
         --divert /usr/share/man/man1/foo.real.1.gz \
         /usr/share/man/man1/foo.1.gz
+
+    # Clean up a local diversion.
+    dpkg-divert --local --remove --divert /usr/share/scripts/other-file.real \
+        /usr/share/scripts/other-file
 fi
 
 #DEBHELPER#
diff --git a/t/tests/scripts-diversions/tags b/t/tests/scripts-diversions/tags
index e154dfe..eecabfb 100644
--- a/t/tests/scripts-diversions/tags
+++ b/t/tests/scripts-diversions/tags
@@ -1,5 +1,9 @@
+E: scripts-diversions: diversion-for-unknown-file usr/share/scripts/another-file preinst:16
 E: scripts-diversions: diversion-for-unknown-file usr/share/scripts/no-such-file preinst:32
+E: scripts-diversions: diversion-for-unknown-file usr/share/scripts/other-file preinst:12
+E: scripts-diversions: orphaned-diversion usr/share/scripts/another-file preinst
 E: scripts-diversions: orphaned-diversion usr/share/scripts/orphan preinst
+E: scripts-diversions: package-uses-local-diversion postrm:31
 E: scripts-diversions: package-uses-local-diversion preinst:12
 E: scripts-diversions: package-uses-local-diversion preinst:16
 E: scripts-diversions: remove-of-unknown-diversion usr/share/scripts/old-file postrm:12

-- 
Debian package checker


Reply to: