]> err.no Git - dpkg/commitdiff
dpkg-source: handle better symlinks to orig tarball
authorRaphael Hertzog <hertzog@debian.org>
Sat, 12 Apr 2008 12:21:06 +0000 (14:21 +0200)
committerRaphael Hertzog <hertzog@debian.org>
Sat, 12 Apr 2008 12:21:06 +0000 (14:21 +0200)
* scripts/Dpkg/Path.pm (check_files_are_the_same): Add a new
parameter so that we can use stat() instead of lstat() and
compare if pointed files are the same.
* scripts/Dpkg/Source/Package.pm: Resolve symlinks before deciding
if both original tarballs are the same or not. Use the new
parameter of check_files_are_the_same() for this.
* scripts/Dpkg/Source/Package/V1_0.pm: Remove useless import of
check_files_are_the_same.

ChangeLog
debian/changelog
scripts/Dpkg/Path.pm
scripts/Dpkg/Source/Package.pm
scripts/Dpkg/Source/Package/V1_0.pm

index 3b1c0fcc7025f670a78b3e4a2a21b535008d0163..6ea7bff71f543bc9cd0d02f538b59d0f727d4c36 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2008-04-12  Raphael Hertzog  <hertzog@debian.org>
+
+       * scripts/Dpkg/Path.pm (check_files_are_the_same): Add a new
+       parameter so that we can use stat() instead of lstat() and
+       compare if pointed files are the same.
+       * scripts/Dpkg/Source/Package.pm: Resolve symlinks before deciding
+       if both original tarballs are the same or not. Use the new
+       parameter of check_files_are_the_same() for this.
+       * scripts/Dpkg/Source/Package/V1_0.pm: Remove useless import of
+       check_files_are_the_same.
+
 2008-04-12  Sven Joachim  <svenjoac@gmx.de>
 
        * scripts/Dpkg/Source/Package.pm: Add missing import of
index 7acc0cb51b1758d693e9420a718841af637b828b..b1b1b3872948ee3dbae8b981049a8243e6741ac3 100644 (file)
@@ -2,6 +2,8 @@ dpkg (1.14.18.1) UNRELEASED; urgency=low
 
   * Add missing import of subprocerr in Dpkg::Source::Package. Thanks to Sven
     Joachim for the patch.
+  * Handle symlinks better when deciding if dpkg-source has to copy the
+    original tarball in the current extraction directory. Closes: #475668
 
  -- Raphael Hertzog <hertzog@debian.org>  Sat, 12 Apr 2008 13:56:44 +0200
 
index 30c7de96ee9dbbf331fe2414450661bbaf4d5180..2d0429806a21027d0ac1b72e28d05e57a7af2cb7 100644 (file)
@@ -106,17 +106,24 @@ sub guess_pkg_root_dir($) {
     return undef;
 }
 
-=item check_files_are_the_same($file1, $file2)
+=item check_files_are_the_same($file1, $file2, $resolve_symlink)
 
 This function verifies that both files are the same by checking that the device
-numbers and the inode numbers returned by lstat() are the same.
+numbers and the inode numbers returned by stat()/lstat() are the same. If
+$resolve_symlink is true then stat() is used, otherwise lstat() is used.
 
 =cut
-sub check_files_are_the_same($$) {
-    my ($file1, $file2) = @_;
+sub check_files_are_the_same($$;$) {
+    my ($file1, $file2, $resolve_symlink) = @_;
     return 0 if ((! -e $file1) || (! -e $file2));
-    my @stat1 = lstat($file1);
-    my @stat2 = lstat($file2);
+    my (@stat1, @stat2);
+    if ($resolve_symlink) {
+        @stat1 = stat($file1);
+        @stat2 = stat($file2);
+    } else {
+        @stat1 = lstat($file1);
+        @stat2 = lstat($file2);
+    }
     my $result = ($stat1[0] == $stat2[0]) && ($stat1[1] == $stat2[1]);
     return $result;
 }
index bfa00a8d7b16c70137ffe8868f0002b66ab4beab..ed87a66d58c4e3271574d4a6037a68238d1b3e59 100644 (file)
@@ -305,7 +305,7 @@ sub extract {
         {
             my $src = File::Spec->catfile($self->{'basedir'}, $orig);
             my $dst = File::Spec->catfile($destdir, $orig);
-            if (not check_files_are_the_same($src, $dst)) {
+            if (not check_files_are_the_same($src, $dst, 1)) {
                 system('cp', '--', $src, $dst);
                 subprocerr("cp $src to $dst") if $?;
             }
index 470242a430f15db51271c9ad025392cc1880cb08..5ec2c2e1332cf339fe9c1657c1774ca9e6366fef 100644 (file)
@@ -31,7 +31,6 @@ use Dpkg::Version qw(check_version);
 use Dpkg::Exit;
 use Dpkg::Source::Functions qw(erasedir);
 use Dpkg::Source::Package::V3_0::native;
-use Dpkg::Path qw(check_files_are_the_same);
 
 use POSIX;
 use File::Basename;