]> git.donarmstrong.com Git - debhelper.git/commitdiff
r1843: * dh_link: add special case handling for paths to a directory containing the
authorjoeyh <joeyh>
Sun, 8 Jan 2006 04:13:06 +0000 (04:13 +0000)
committerjoeyh <joeyh>
Sun, 8 Jan 2006 04:13:06 +0000 (04:13 +0000)
  link. Closes: #346405
* dh_link: add special case handling for link to /

debian/changelog
dh_link
t/dh_link

index 08ad56e070577e5c1e222c7d73981241484f0882..05490a9f9081b5496b5d53a9d64e628b47689c51 100644 (file)
@@ -1,8 +1,11 @@
 debhelper (5.0.13) UNRELEASED; urgency=low
 
   * debhelper(7): document previous dh_install v5 change re wildcarding.
+  * dh_link: add special case handling for paths to a directory containing the
+    link. Closes: #346405
+  * dh_link: add special case handling for link to /
 
- -- Joey Hess <joeyh@debian.org>  Sat, 31 Dec 2005 13:48:08 -0500
+ -- Joey Hess <joeyh@debian.org>  Sat,  7 Jan 2006 23:06:43 -0500
 
 debhelper (5.0.12) unstable; urgency=low
 
diff --git a/dh_link b/dh_link
index 5dd9da3d96843062dd271e3020c073659d76539c..a56eefbdce6a527c962a7901621c5414e1553c81 100755 (executable)
--- a/dh_link
+++ b/dh_link
@@ -105,6 +105,9 @@ sub expand_path {
        foreach $entry (@respath) {
                $result .= '/' . $entry;
        }
+       if (! defined $result) {
+               $result="/"; # special case
+       }
        return $result;
 }
 
@@ -175,11 +178,11 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
                # top level directories, leave it absolute.
                my @src_dirs=split(m:/+:,$src);
                my @dest_dirs=split(m:/+:,$dest);
-               if ($src_dirs[0] eq $dest_dirs[0]) {
+               if (@src_dirs > 0 && $src_dirs[0] eq $dest_dirs[0]) {
                        # Figure out how much of a path $src and $dest
                        # share in common.
                        my $x;
-                       for ($x=0; $x<$#src_dirs && $src_dirs[$x] eq $dest_dirs[$x]; $x++) {}
+                       for ($x=0; $x<@src_dirs && $src_dirs[$x] eq $dest_dirs[$x]; $x++) {}
                        # Build up the new src.
                        $src="";
                        for (1..$#dest_dirs - $x) {
@@ -188,6 +191,9 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
                        for ($x .. $#src_dirs) {
                                $src.=$src_dirs[$_]."/";
                        }
+                       if ($x > $#src_dirs && ! length $src) {
+                               $src.="."; # special case
+                       }
                        $src=~s:/$::;
                }
                else {
index 198b522c01d8e0d2689adcf450f4afd7299a09fc..daeb209b9b3ad9a3d315e3f983b95db80ee7292d 100755 (executable)
--- a/t/dh_link
+++ b/t/dh_link
@@ -1,6 +1,6 @@
 #!/usr/bin/perl
 use Test;
-plan(tests => 8);
+plan(tests => 12);
 
 # It used to not make absolute links in this situation, and it should.
 # #37774
@@ -17,12 +17,23 @@ ok(readlink("debian/debhelper/sbin/bar"), "foo");
 system("./dh_link","usr/lib/1","usr/bin/2");
 ok(readlink("debian/debhelper/usr/bin/2"),"../lib/1");
 
-# Check conversion of realitive symlink to different top-level directory
+# Check conversion of relative symlink to different top-level directory
 # into absolute symlink. (#244157)
 system("mkdir -p debian/debhelper/usr/lib; mkdir -p debian/debhelper/lib; touch debian/debhelper/lib/libm.so; cd debian/debhelper/usr/lib; ln -sf ../../lib/libm.so");
 system("./dh_link");
 ok(readlink("debian/debhelper/usr/lib/libm.so"), "/lib/libm.so");
 
+# Check links to the current directory and below, they used to be
+# unnecessarily long (#346405).
+system("./dh_link","usr/lib/geant4","usr/lib/geant4/a");
+ok(readlink("debian/debhelper/usr/lib/geant4/a"), ".");
+system("./dh_link","usr/lib","usr/lib/geant4/b");
+ok(readlink("debian/debhelper/usr/lib/geant4/b"), "..");
+system("./dh_link","usr","usr/lib/geant4/c");
+ok(readlink("debian/debhelper/usr/lib/geant4/c"), "../..");
+system("./dh_link","/","usr/lib/geant4/d");
+ok(readlink("debian/debhelper/usr/lib/geant4/d"), "/");
+
 # Make sure the link conversion didn't change any of the previously made
 # links.
 ok(readlink("debian/debhelper/usr/lib/bar"), "/etc/foo");