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
foreach $entry (@respath) {
$result .= '/' . $entry;
}
+ if (! defined $result) {
+ $result="/"; # special case
+ }
return $result;
}
# 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) {
for ($x .. $#src_dirs) {
$src.=$src_dirs[$_]."/";
}
+ if ($x > $#src_dirs && ! length $src) {
+ $src.="."; # special case
+ }
$src=~s:/$::;
}
else {
#!/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
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");