lumia

Archive checksum manager
git clone git://lumidify.org/git/lumia.git
Log | Files | Refs

commit 1299a04fa3eef185926a04ce7b434c56d504c515
parent aa3fbdeec22eabf826a6bf730f61d8df3d6f383e
Author: lumidify <nobody@lumidify.org>
Date:   Mon, 23 Mar 2020 17:24:54 +0100

Check for special files before copying, etc.

Diffstat:
Mlumia.pl | 12++++++++++++
Mtest/.lumidify_archive_cksums | 4++--
Mtest/.lumidify_archive_cksums.cksum | 2+-
3 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/lumia.pl b/lumia.pl @@ -557,6 +557,10 @@ sub copy_files { my $src_path = "$src_dir/$src_file"; my $dst_path = $diff_name ? $dst : "$dst_dir/$src_file"; + if (exists $SPECIAL_FILES{$src_file} || exists $SPECIAL_FILES{basename $dst_path}) { + warn "ERROR: Not copying special file\n"; + next; + } next if prompt_overwrite($dst_path); next if system("cp", "-av", $src_path, $dst); @@ -584,6 +588,10 @@ sub copy_files { # automatically appends the basename of $src to $dst if $dst is a directory sub move_file { my ($src, $dst) = @_; + if (exists $SPECIAL_FILES{basename $src} || exists $SPECIAL_FILES{basename $dst}) { + warn "ERROR: Not moving special file\n"; + return 1; + } if (-d $dst) { $dst .= "/" . basename($src); } @@ -733,6 +741,10 @@ sub remove_from_same_dir { my $dirs_touched = 0; my $files_touched = 0; foreach my $file (@files) { + if (exists $SPECIAL_FILES{$file}) { + warn "ERROR: not removing special file $file\n"; + next; + } my $fullpath = "$dir/$file"; if (!-e $fullpath) { warn "\"$fullpath\": No such file or directory.\n"; diff --git a/test/.lumidify_archive_cksums b/test/.lumidify_archive_cksums @@ -1,4 +1,4 @@ -2454254050 2 "fred2" -2418082923 2 "bob1" 2454254050 2 "bob3" +2418082923 2 "bob1" +2454254050 2 "fred2" 4294967295 0 "bob2" diff --git a/test/.lumidify_archive_cksums.cksum b/test/.lumidify_archive_cksums.cksum @@ -1,2 +1,2 @@ -650526090 81 ".lumidify_archive_cksums" +2943189886 81 ".lumidify_archive_cksums" 3971863640 21 ".lumidify_archive_dirs"