diff options
author | Raphael Hertzog <hertzog@debian.org> | 2008-04-12 14:21:06 +0200 |
---|---|---|
committer | Raphael Hertzog <hertzog@debian.org> | 2008-04-12 14:21:06 +0200 |
commit | 639d515a217ca2202b50ced736ce16478a7312cc (patch) | |
tree | 6f97687778b5de834cea34ea5212d958e5fbf9d6 /scripts/Dpkg | |
parent | 0e1a21c4d1929ff792549742ebf033ab64fa7dbc (diff) | |
download | dpkg-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.pm | 19 | ||||
-rw-r--r-- | scripts/Dpkg/Source/Package.pm | 2 | ||||
-rw-r--r-- | scripts/Dpkg/Source/Package/V1_0.pm | 1 |
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; |