ok, specifying files should be safe now
This commit is contained in:
parent
5c90dfb045
commit
ca5438d012
1 changed files with 25 additions and 0 deletions
|
|
@ -29,12 +29,17 @@ if (@pattern) {
|
||||||
|
|
||||||
&run_checks;
|
&run_checks;
|
||||||
|
|
||||||
|
if ($paranoia) { # extra checks for a specified list of files
|
||||||
|
¶noia(\@source, \@target);
|
||||||
|
}
|
||||||
|
|
||||||
# if it's unsafe to move files directly, move the unsafe ones to a
|
# if it's unsafe to move files directly, move the unsafe ones to a
|
||||||
# temporary file first
|
# temporary file first
|
||||||
if (@unsafe = &check_safety(\@source, \@target)) {
|
if (@unsafe = &check_safety(\@source, \@target)) {
|
||||||
&safety_belt(\@unsafe, \@source);
|
&safety_belt(\@unsafe, \@source);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
&move_files(\@source, \@target);
|
&move_files(\@source, \@target);
|
||||||
if ( -e ".mv_wrap" ) { unlink (".mv_wrap"); }
|
if ( -e ".mv_wrap" ) { unlink (".mv_wrap"); }
|
||||||
|
|
||||||
|
|
@ -191,6 +196,22 @@ sub safety_belt {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Extra safety checks when one's useing a specified list of files
|
||||||
|
# Must be called like:
|
||||||
|
# paranoia(\@unsafe, \@source)
|
||||||
|
sub paranoia {
|
||||||
|
my ($source, $target) =@_;
|
||||||
|
my $safe;
|
||||||
|
foreach $ctarget (@$target) {
|
||||||
|
$safe = 0;
|
||||||
|
foreach $csource (@$source) {
|
||||||
|
if ($ctarget eq $csource) { $safe = 1; }
|
||||||
|
}
|
||||||
|
chomp $ctarget;
|
||||||
|
if (! $safe && -e $ctarget) { die "That would overwrite files\n"; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
sub lock {
|
sub lock {
|
||||||
if ( -e ".mv_wrap") {
|
if ( -e ".mv_wrap") {
|
||||||
die "Another mv_wrap process is active in this direcory\n"
|
die "Another mv_wrap process is active in this direcory\n"
|
||||||
|
|
@ -217,6 +238,7 @@ sub cmdline {
|
||||||
foreach (@ARGV) {
|
foreach (@ARGV) {
|
||||||
push @source, "$_\n";
|
push @source, "$_\n";
|
||||||
}
|
}
|
||||||
|
$paranoia = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -237,6 +259,9 @@ At the moment it takes the following options:
|
||||||
-p <pattern> use a pattern to edit; ignored if -f is given
|
-p <pattern> use a pattern to edit; ignored if -f is given
|
||||||
-f <file> use a pattern file to edit
|
-f <file> use a pattern file to edit
|
||||||
|
|
||||||
|
Specifying fiels on the command line is still unsafe! There are no checks
|
||||||
|
to prevent overwriting non-specified files!
|
||||||
|
|
||||||
EOT
|
EOT
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue