From c5d64a7f9b1db4e98aff95c237342a793e40c6f5 Mon Sep 17 00:00:00 2001 From: joeyh Date: Sun, 8 Jan 2006 04:13:06 +0000 Subject: [PATCH] r1843: * 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 / --- debian/changelog | 5 ++++- dh_link | 10 ++++++++-- t/dh_link | 15 +++++++++++++-- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/debian/changelog b/debian/changelog index 08ad56e..05490a9 100644 --- a/debian/changelog +++ b/debian/changelog @@ -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 Sat, 31 Dec 2005 13:48:08 -0500 + -- Joey Hess Sat, 7 Jan 2006 23:06:43 -0500 debhelper (5.0.12) unstable; urgency=low diff --git a/dh_link b/dh_link index 5dd9da3..a56eefb 100755 --- 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 { diff --git a/t/dh_link b/t/dh_link index 198b522..daeb209 100755 --- 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"); -- 2.39.2