goto &Carp::croak;
}
+sub carp {
+ require Carp;
+ goto &Carp::carp;
+}
+
my $macfiles;
if ($^O eq 'MacOS') {
$macfiles = eval { require Mac::MoreFiles };
: (ref(\$to) eq 'GLOB'));
if ($from eq $to) { # works for references, too
- croak("'$from' and '$to' are identical (not copied)");
+ carp("'$from' and '$to' are identical (not copied)");
+ # The "copy" was a success as the source and destination contain
+ # the same data.
+ return 1;
}
if ((($Config{d_symlink} && $Config{d_readlink}) || $Config{d_link}) &&
if (@fs) {
my @ts = stat($to);
if (@ts && $fs[0] == $ts[0] && $fs[1] == $ts[1]) {
- croak("'$from' and '$to' are identical (not copied)");
+ carp("'$from' and '$to' are identical (not copied)");
+ return 0;
}
}
}
}
sub move {
+ croak("Usage: move(FROM, TO) ") unless @_ == 2;
+
my($from,$to) = @_;
+
my($fromsz,$tosz1,$tomt1,$tosz2,$tomt2,$sts,$ossts);
if (-d $to && ! -d $from) {
{
local $@;
eval {
+ local $SIG{__DIE__};
copy($from,$to) or die;
my($atime, $mtime) = (stat($from))[8,9];
utime($atime, $mtime, $to);
my $TB = Test::More->builder;
-plan tests => 48;
+plan tests => 60;
# We're going to override rename() later on but Perl has to see an override
# at compile time to honor it.
use File::Copy;
use Config;
+
+foreach my $code ("copy()", "copy('arg')", "copy('arg', 'arg', 'arg', 'arg')",
+ "move()", "move('arg')", "move('arg', 'arg', 'arg')"
+ )
+{
+ eval $code;
+ like $@, qr/^Usage: /;
+}
+
+
for my $cross_partition_test (0..1) {
{
# Simulate a cross-partition copy/move by forcing rename to
# The destination file will reflect the same difficulties.
my $mtime = (stat("copy-$$"))[9];
- ok move "copy-$$", "file-$$", 'move';
+ ok move("copy-$$", "file-$$"), 'move';
ok -e "file-$$", ' destination exists';
ok !-e "copy-$$", ' source does not';
open(R, "file-$$") or die; $foo = <R>; close(R);
is $foo, "ok\n";
unlink "lib/file-$$" or die "unlink: $!";
- eval { copy("file-$$", "file-$$") };
- like $@, qr/are identical/;
- ok -s "file-$$";
+ {
+ my $warnings = '';
+ local $SIG{__WARN__} = sub { $warnings .= join '', @_ };
+ ok copy("file-$$", "file-$$");
+
+ like $warnings, qr/are identical/;
+ ok -s "file-$$";
+ }
move "file-$$", "lib";
open(R, "lib/file-$$") or die "open lib/file-$$: $!"; $foo = <R>; close(R);
unlink "lib/file-$$" or die "unlink: $!";
SKIP: {
- skip "Testing symlinks", 2 unless $Config{d_symlink};
+ skip "Testing symlinks", 3 unless $Config{d_symlink};
open(F, ">file-$$") or die $!;
print F "dummy content\n";
close F;
symlink("file-$$", "symlink-$$") or die $!;
- eval { copy("file-$$", "symlink-$$") };
- like $@, qr/are identical/;
+
+ my $warnings = '';
+ local $SIG{__WARN__} = sub { $warnings .= join '', @_ };
+ ok !copy("file-$$", "symlink-$$");
+
+ like $warnings, qr/are identical/;
ok !-z "file-$$",
'rt.perl.org 5196: copying to itself would truncate the file';
}
SKIP: {
- skip "Testing hard links", 2 if !$Config{d_link} or $^O eq 'MSWin32';
+ skip "Testing hard links", 3 if !$Config{d_link} or $^O eq 'MSWin32';
open(F, ">file-$$") or die $!;
print F "dummy content\n";
close F;
link("file-$$", "hardlink-$$") or die $!;
- eval { copy("file-$$", "hardlink-$$") };
- like $@, qr/are identical/;
+
+ my $warnings = '';
+ local $SIG{__WARN__} = sub { $warnings .= join '', @_ };
+ ok !copy("file-$$", "hardlink-$$");
+
+ like $warnings, qr/are identical/;
ok ! -z "file-$$",
'rt.perl.org 5196: copying to itself would truncate the file';