Explorar el Código

Merge branch 'stable'

Drop changelog entry for the unreleased version 1.14.18.1.

Conflicts:

	ChangeLog
	debian/changelog
Raphael Hertzog hace 18 años
padre
commit
aa07e33e6f
Se han modificado 5 ficheros con 37 adiciones y 9 borrados
  1. 16 0
      ChangeLog
  2. 6 0
      debian/changelog
  3. 13 6
      scripts/Dpkg/Path.pm
  4. 2 2
      scripts/Dpkg/Source/Package.pm
  5. 0 1
      scripts/Dpkg/Source/Package/V1_0.pm

+ 16 - 0
ChangeLog

@@ -1,3 +1,19 @@
+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
+	subprocerr.
+
 2008-04-12  Russell Coker <russell@coker.com.au>,
             Guillem Jover  <guillem@debian.org>
 

+ 6 - 0
debian/changelog

@@ -4,6 +4,12 @@ dpkg (1.14.19) UNRELEASED; urgency=low
   * Fix a double-free by setting scontext to NULL after calling freecon.
     Based on a patch by Russell Coker. Closes: #474339
 
+  [ Raphael Hertzog ]
+  * 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
+
   [ Updated dpkg translations ]
   * Galician (Jacobo Tarrio).
   * German (Sven Joachim).

+ 13 - 6
scripts/Dpkg/Path.pm

@@ -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;
 }

+ 2 - 2
scripts/Dpkg/Source/Package.pm

@@ -20,7 +20,7 @@ use strict;
 use warnings;
 
 use Dpkg::Gettext;
-use Dpkg::ErrorHandling qw(error syserr warning internerr);
+use Dpkg::ErrorHandling qw(error syserr warning internerr subprocerr);
 use Dpkg::Fields;
 use Dpkg::Cdata;
 use Dpkg::Checksums;
@@ -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 $?;
             }

+ 0 - 1
scripts/Dpkg/Source/Package/V1_0.pm

@@ -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;