From 2f31b7e41025b29938a80160a1194ffdd0afb175 Mon Sep 17 00:00:00 2001 From: Pascal Rigaux Date: Mon, 1 Oct 2007 14:06:54 +0000 Subject: with cp_with_progress_() with a cleaner prototype + the ability to pass options. (nb: option keep_special is not the default) --- perl-install/install/any.pm | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/perl-install/install/any.pm b/perl-install/install/any.pm index 9b9f3cb16..7586932e2 100644 --- a/perl-install/install/any.pm +++ b/perl-install/install/any.pm @@ -462,22 +462,32 @@ sub cp_with_progress { my $current = shift; my $total = shift; my $dest = pop @_; - @_ or return; - @_ == 1 || -d $dest or die "cp: copying multiple files, but last argument ($dest) is not a directory\n"; + cp_with_progress_({ keep_special => 1 }, $wait_message, $total, \@_, $dest); +} +sub cp_with_progress_ { + my ($options, $wait_message, $total, $list, $dest) = @_; + @$list or return; + @$list == 1 || -d $dest or die "cp: copying multiple files, but last argument ($dest) is not a directory\n"; + + -d $dest or $dest = dirname($dest); + _cp_with_progress($options, $wait_message, 0, $total, $list, $dest); +} +sub _cp_with_progress { + my ($options, $wait_message, $current, $total, $list, $dest) = @_; - foreach my $src (@_) { + foreach my $src (@$list) { my $dest = $dest; -d $dest and $dest .= '/' . basename($src); unlink $dest; - if (-l $src) { + if (-l $src && $options->{keep_special}) { unless (symlink(readlink($src) || die("readlink failed: $!"), $dest)) { warn "symlink: can't create symlink $dest: $!\n"; } } elsif (-d $src) { -d $dest or mkdir $dest, (stat($src))[2] or die "mkdir: can't create directory $dest: $!\n"; - cp_with_progress($wait_message, $current, $total, glob_($src), $dest); + _cp_with_progress($options, $wait_message, $current, $total, [ glob_($src) ], $dest); } else { open(my $F, $src) or die "can't open $src for reading: $!\n"; open(my $G, ">", $dest) or die "can't cp to file $dest: $!\n"; -- cgit v1.2.1