+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
* 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
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;
}
{
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 $?;
}
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;