summaryrefslogtreecommitdiff
path: root/scripts/Dpkg
diff options
context:
space:
mode:
authorRaphael Hertzog <hertzog@debian.org>2008-04-12 14:21:06 +0200
committerRaphael Hertzog <hertzog@debian.org>2008-04-12 14:21:06 +0200
commit639d515a217ca2202b50ced736ce16478a7312cc (patch)
tree6f97687778b5de834cea34ea5212d958e5fbf9d6 /scripts/Dpkg
parent0e1a21c4d1929ff792549742ebf033ab64fa7dbc (diff)
downloaddpkg-639d515a217ca2202b50ced736ce16478a7312cc.tar.gz
dpkg-source: handle better symlinks to orig tarball
* 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.
Diffstat (limited to 'scripts/Dpkg')
-rw-r--r--scripts/Dpkg/Path.pm19
-rw-r--r--scripts/Dpkg/Source/Package.pm2
-rw-r--r--scripts/Dpkg/Source/Package/V1_0.pm1
3 files changed, 14 insertions, 8 deletions
diff --git a/scripts/Dpkg/Path.pm b/scripts/Dpkg/Path.pm
index 30c7de96e..2d0429806 100644
--- a/scripts/Dpkg/Path.pm
+++ b/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;
}
diff --git a/scripts/Dpkg/Source/Package.pm b/scripts/Dpkg/Source/Package.pm
index bfa00a8d7..ed87a66d5 100644
--- a/scripts/Dpkg/Source/Package.pm
+++ b/scripts/Dpkg/Source/Package.pm
@@ -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 $?;
}
diff --git a/scripts/Dpkg/Source/Package/V1_0.pm b/scripts/Dpkg/Source/Package/V1_0.pm
index 470242a43..5ec2c2e13 100644
--- a/scripts/Dpkg/Source/Package/V1_0.pm
+++ b/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;