lumia

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

commit e9a4386e8fe18457c0d154d655ff6159ecae1ab9
parent f60d1fa300a9def9bed31e38e9c0025676705efd
Author: lumidify <nobody@lumidify.org>
Date:   Mon, 23 Mar 2020 11:53:09 +0100

Fix several errors

Diffstat:
Mlumia.pl | 263++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------
Atest/.lumidify_archive_cksums | 3+++
Atest/.lumidify_archive_cksums.cksum | 2++
Atest/.lumidify_archive_dirs | 4++++
Atest/bob | 0
Atest/dir/.lumidify_archive_cksums | 1+
Atest/dir/.lumidify_archive_cksums.cksum | 2++
Atest/dir/.lumidify_archive_dirs | 0
Atest/dir/meh | 0
Atest/dir1/.lumidify_archive_cksums | 1+
Atest/dir1/.lumidify_archive_cksums.cksum | 2++
Atest/dir1/.lumidify_archive_dirs | 1+
Atest/dir1/bob | 0
Atest/dir1/dir/.lumidify_archive_cksums | 1+
Atest/dir1/dir/.lumidify_archive_cksums.cksum | 2++
Atest/dir1/dir/.lumidify_archive_dirs | 0
Atest/dir1/dir/bob | 0
Atest/dir2/.lumidify_archive_cksums | 0
Atest/dir2/.lumidify_archive_cksums.cksum | 2++
Atest/dir2/.lumidify_archive_dirs | 0
Atest/dir3/.lumidify_archive_cksums | 1+
Atest/dir3/.lumidify_archive_cksums.cksum | 2++
Atest/dir3/.lumidify_archive_dirs | 0
Atest/dir3/meh | 0
Atest/fred | 0
Atest/fred2 | 0
26 files changed, 184 insertions(+), 103 deletions(-)

diff --git a/lumia.pl b/lumia.pl @@ -78,13 +78,13 @@ sub make_lumia_iter { make_file_iter sub {1}, sub { my $path = "$_[0]/.lumidify_archive_dirs"; return [] if !-f $path; - my $dirs = read_file($path); + my $dirs = read_file($path, {}); return if !defined $dirs; my @new_dirs; foreach my $dir (keys %$dirs) { my $dir_path = "$_[0]/$dir"; if (!-d $dir_path) { - warn "ERROR: Directory \"$dir_path\" does not exist or is not directory.\n"); + warn "ERROR: Directory \"$dir_path\" mentioned in \"$path\" does not exist or is not directory.\n"; } else { push @new_dirs, $dir_path; } @@ -117,12 +117,11 @@ sub clean_files { } sub read_file { - my ($file, $is_cksums_file) = @_; - my %cksums; + my ($file, $cksums, $handle_cksum_func) = @_; my $fh; - if (!open($fh, "<", $file)) { + if (!open $fh, "<", $file) { warn "ERROR: unable to open file \"$file\": $!\n"; - return undef; + return; } my $in_fn = 0; my $cur_cksum; @@ -130,14 +129,9 @@ sub read_file { my $cur_fn = ""; foreach (<$fh>) { next if (!$in_fn && /^$/); - if ($is_cksums_file && !$in_fn) { - my @fields = split(/ /, $_, 3); - if ($#fields != 2) { - warn "ERROR: Malformed line \"$_\" in file \"$file\"\n"); - next; - } - $cur_cksum = join(" ", @fields[0,1]); - $cur_str = $fields[2]; + if ($handle_cksum_func && !$in_fn) { + ($cur_cksum, $cur_str) = $handle_cksum_func->($_); + return undef if !defined $cur_cksum; } else { $cur_str = $_; } @@ -152,7 +146,7 @@ sub read_file { } elsif ($ch eq "\"") { if ($in_fn) { $in_fn = 0; - $cksums{$cur_fn} = $cur_cksum; + $cksums->{$cur_fn} = $cur_cksum; $cur_fn = ""; last; } @@ -162,26 +156,42 @@ sub read_file { } } } + close $fh; if ($in_fn) { - warn "ERROR: Unterminated filename in file \"$path\"\n"; + warn "ERROR: Unterminated filename in file \"$file\"\n"; return undef; } - return \%cksums; + return $cksums; +} + +sub read_cksum_file { + my ($file, $cksums) = @_; + return read_file $file, $cksums, sub { + my $line = shift; + my @fields = split(/ /, $line, 3); + if ($#fields != 2) { + warn "WARNING: Malformed line \"$line\" in file \"$file\"\n"; + return; + } + my $cur_cksum = join(" ", @fields[0,1]); + my $cur_str = $fields[2]; + return ($cur_cksum, $cur_str); + }; } sub read_cksums { my $dir = shift; - my $file_cksums = read_file "$dir/.lumidify_archive_cksums", 1; - my $dir_list = read_file "$dir/.lumidify_archive_dirs"; - return undef if !defined $file_cksums || !defined $dir_list; - my %cksums = (%$file_cksums, %$dir_list); - return \%cksums; + my $cksums = read_cksum_file("$dir/.lumidify_archive_cksums", {}); + return undef if !defined $cksums; + $cksums = read_file("$dir/.lumidify_archive_dirs", $cksums); + return undef if !defined $cksums; + return $cksums; } sub get_cksum { my $path = shift; my $path_esc = shell_quote $path; - $cksum_output = `$CKSUM_CMD -- $path_esc 2>&1`; + my $cksum_output = `$CKSUM_CMD -- $path_esc 2>&1`; if ($?) { warn "ERROR getting cksum for file \"$path\":\n$cksum_output\n"; return undef; @@ -190,23 +200,28 @@ sub get_cksum { return $cksum_output; } -# This would be much cleaner with cksums's -c option, but that -# doesn't seem to work with files beginning with whitespace sub check_cksums { - my ($dir, $cksum_file) = @_; - my $cksums = read_file "$dir/$cksum_file", 1; - return if !defined $cksums; + my ($dir, $cksum_file, $quiet) = @_; + my $cksums = read_cksum_file("$dir/$cksum_file", {}); + return 0 if !defined $cksums; + my $failed = 1; foreach my $file (keys %$cksums) { - my $path = catfile($dir, $file); + my $path = "$dir/$file"; my $output = get_cksum $path; next if !defined $output; - print(($output eq $cksums->{$file} ? "OK" : "FAILED") . " $path\n"); + if ($output eq $cksums->{$file}) { + print "OK $path\n" if !$quiet; + } else { + print "FAILED $path\n"; + $failed = 0; + } } + return $failed; } sub check_files { my $top_dir = shift; - my $iter = make_lumia_iter $dir; + my $iter = make_lumia_iter $top_dir; while (my $dir = $iter->()) { check_cksums $dir, ".lumidify_archive_cksums.cksum"; check_cksums $dir, ".lumidify_archive_cksums"; @@ -216,9 +231,13 @@ sub check_files { sub write_special_cksums { my ($dir, @files) = @_; my $cksum_file = "$dir/.lumidify_archive_cksums.cksum"; - my $cksums = read_file $cksum_file, 1; + my $cksums = {}; + if (-f $cksum_file) { + $cksums = read_cksum_file $cksum_file, {}; + } + return if !defined $cksums; foreach my $file (@files) { - my $cksum_output = get_cksum "$dir/$file"; + my $cksum_output = get_cksum("$dir/$file"); next if (!defined $cksum_output); $cksums->{$file} = $cksum_output; } @@ -228,35 +247,46 @@ sub write_special_cksums { sub check_new_files { my ($dir, $file_func, $before_dir_func, $after_dir_func) = @_; my $iter = make_file_iter sub {-d $_[0]}, sub { + my $dir = shift; my $dh; - if (!opendir $dh, $_[0]) { - warn "ERROR: Unable to open directory \"$_[0]\"!"; + if (!opendir $dh, $dir) { + warn "ERROR: Unable to open directory \"$dir\"!"; return undef; } - my $ignore = read_file "$_[0]/.lumidify_archive_ignore" // {}; - my $lumia_dirs = read_file "$_[0]/.lumidify_archive_dirs" // {}; - my $lumia_files = read_file "$_[0]/.lumidify_archive_cksums", 1 // {}; + my $read_file_noerror = sub { + if (-f $_[0]) { + return $_[1]->($_[0], {}) // {}; + } + return {}; + }; + my $ignore = $read_file_noerror->("$dir/.lumidify_archive_ignore", \&read_file); + my $lumia_dirs = $read_file_noerror->("$dir/.lumidify_archive_dirs", \&read_file); + my $lumia_files = $read_file_noerror->("$dir/.lumidify_archive_cksums", \&read_cksum_file); my @dirs; my $found = 0; while (my $file = readdir $dh) { next if $file eq "." || $file eq ".."; next if exists $ignore->{$file} || exists $SPECIAL_FILES{$file}; if (!exists $lumia_dirs->{$file} && !exists $lumia_files->{$file}) { - if (!found && defined $before_dir_func) { - $before_dir_func->($_[0]); + if (!$found && defined $before_dir_func) { + last if !$before_dir_func->($dir); } if (defined $file_func) { - $file_func->($_[0], $file); + $file_func->($dir, $file); } else { - print "$_[0]/$file"; + print "$dir/$file\n"; } $found = 1; } - push @dirs, "$_[0]/$file" if -d "$_[0]/$file"; + push @dirs, "$dir/$file" if -d "$dir/$file"; + } + closedir $dh; + # also call $before_dir_func if the directory has not been initialized yet + if (!$found && !-f "$dir/.lumidify_archive_cksums.cksum" && defined $before_dir_func) { + $before_dir_func->($dir); } - closedir $fh; - if (found && defined $after_dir_func) { - $after_dir_func->($_[0]); + if ($found && defined $after_dir_func) { + $after_dir_func->($dir); } return \@dirs; }, $dir; @@ -278,7 +308,7 @@ sub check_add_new_files { warn "ERROR: Unable to append to file \"$dir_file\"!"; return; } - print $fh, "\"" . escape_filename $file . "\"\n"; + print $fh '"' . escape_filename($file) . '"' . "\n"; close $fh; $changed_dirs = 1; } else { @@ -290,16 +320,29 @@ sub check_add_new_files { warn "ERROR: Unable to append to file \"$cksum_file\"!"; return; } - print $fh, $cksum_output . " \"" . escape_filename $file . "\"\n"; + print $fh $cksum_output . ' "' . escape_filename($file) . '"' . "\n"; close $fh; $changed_files = 1; } - }, sub {check_cksums $_[0], ".lumidify_archive_cksums.cksum";}, sub { + print "Added \"$fullpath\"\n"; + }, sub { + if (-f "$_[0]/.lumidify_archive_cksums.cksum") { + if (!check_cksums $_[0], ".lumidify_archive_cksums.cksum", 1) { + warn "Checksum files corrupt in \"$_[0]\", not adding new checksums!\n"; + return 0; + } + } else { + write_cksums($_[0], {}, 1, 1); + } + return 1; + }, sub { if ($changed_dirs) { write_special_cksums $_[0], ".lumidify_archive_dirs"; + $changed_dirs = 0; } if ($changed_files) { - write_special_cksums $_[0], ".lumidify_archive_files"; + write_special_cksums $_[0], ".lumidify_archive_cksums"; + $changed_files = 0; } }; } @@ -325,22 +368,27 @@ sub write_file { if ($is_cksum_file) { print $fh "$contents->{$filename} "; } - print $fh "\"" . escape_filename $filename . "\"\n"; + print $fh '"' . escape_filename($filename) . '"' . "\n"; } close $fh; } +sub write_cksum_file { + my ($path, $contents) = @_; + write_file $path, $contents, 1; +} + sub write_cksums { my ($dir, $contents, $files_modified, $dirs_modified) = @_; # No, this isn't efficient... if ($files_modified) { - my %file_cksums = map {$_ => $contents->{$_}}, grep {defined $contents->{$_}}, keys %$contents; - write_file "$dir/.lumidify_archive_cksums", \%file_cksums, 1; - write_special_cksums $dir, ".lumidify_archive_files"; + my %file_cksums = map {$_ => $contents->{$_}} grep({defined $contents->{$_}} keys %$contents); + write_cksum_file("$dir/.lumidify_archive_cksums", \%file_cksums); + write_special_cksums $dir, ".lumidify_archive_cksums"; } if ($dirs_modified) { - my %dir_cksums = map {$_ => undef}, grep {!defined $contents->{$_}}, keys %$contents; - write_file "$dir/.lumidify_archive_dirs", \%file_cksums; + my %dir_cksums = map {$_ => undef} grep({!defined $contents->{$_}} keys %$contents); + write_file "$dir/.lumidify_archive_dirs", \%dir_cksums; write_special_cksums $dir, ".lumidify_archive_dirs"; } } @@ -352,18 +400,18 @@ sub remove_old_files { if (!-e $file) { my $dir = dirname $file; my $filename = basename $file; - my $lumia_dirs = read_file "$dir/.lumidify_archive_dirs"; + my $lumia_dirs = read_file "$dir/.lumidify_archive_dirs", {}; if (defined $lumia_dirs && exists $lumia_dirs->{$filename}) { delete $lumia_dirs->{$filename}; write_file $dir, $lumia_dirs; print "Removed \"$file\" from \"$dir/.lumidify_archive_dirs\"\n"; write_special_cksums $dir, ".lumidify_archive_dirs"; } else { - my $lumia_files = read_file "$dir/.lumidify_archive_cksums", 1; + my $lumia_files = read_cksum_file "$dir/.lumidify_archive_cksums", {}; next if !defined $lumia_files; delete $lumia_files->{$filename}; - write_file $dir, $lumia_files, 1; - print "Removed \"$file\" from \"$dir/.lumidify_archive_files\"\n"; + write_cksum_file $dir, $lumia_files; + print "Removed \"$file\" from \"$dir/.lumidify_archive_cksums\"\n"; write_special_cksums $dir, ".lumidify_archive_cksums"; } } @@ -401,12 +449,12 @@ sub copy_files { if (!-e $dst && -d $src->[0]) { $diff_name = 1; } + my $dst_cksums = read_cksums $dst_dir; + return if !defined $dst_cksums; if (system("cp", "-aiv", @$src, $dst)) { die "ERROR while copying files\n"; } - my $src_sorted = sort_by_dir @$src; - my $dst_cksums = read_cksums $dst_dir; - return if !defined $dst_cksums; + my $src_sorted = sort_by_dir(@$src); my $files_touched = 0; my $dirs_touched = 0; foreach my $src_dir (keys %$src_sorted) { @@ -415,9 +463,9 @@ sub copy_files { foreach my $src_file (@{$src_sorted->{$src_dir}}) { my $src_path = "$src_dir/$src_file"; if (-d $src_path) { - my $dirs_touched = 1; + $dirs_touched = 1; } else { - my $files_touched = 1; + $files_touched = 1; } if (exists $src_cksums->{$src_file}) { if ($diff_name) { @@ -433,6 +481,14 @@ sub copy_files { write_cksums $dst_dir, $dst_cksums, $files_touched, $dirs_touched; } +sub cmp_path { + my ($src, $dst) = @_; + # remove trailing slash so compare works + $src =~ s/\/$//; + $dst =~ s/\/$//; + return $src eq $dst; +} + sub move_file { my ($src, $dst) = @_; if (-d $dst) { @@ -472,7 +528,7 @@ sub move_from_same_dir { $files_touched = 1; } if (exists $src_cksums->{$src_file}) { - $dst_cksums->{$src_file} = $src_cksums{$src_file}; + $dst_cksums->{$src_file} = $src_cksums->{$src_file}; delete $src_cksums->{$src_file}; } else { warn "WARNING: \"$src_dir/$src_file\" not in cksum or directory list.\n"; @@ -525,14 +581,6 @@ sub move_rename { } } -sub cmp_path { - my ($src, $dst) = @_; - # remove trailing slash so compare works - $src =~ s/\/$//; - $dst =~ s/\/$//; - return $src eq $dst; -} - # $src: list of source paths # $dst: destination directory or file (in latter case only one src is allowed) sub move_files { @@ -557,13 +605,13 @@ sub move_files { die "move: can't move directory to file\n"; } # Separate files by current dir so the cksum and dir files only need to be opened once - my $src_files = sort_by_dir @$src; + my $src_files = sort_by_dir(@$src); my $dst_cksums = read_cksums $dst; return if !defined $dst_cksums; my $files_touched = 0; my $dirs_touched = 0; foreach my $src_dir (keys %$src_files) { - my ($tmp_files_touched, $tmp_dirs_touched) = move_from_same_dir $src_dir, $src_files{$src_dir}, $dst_cksums, $dst; + my ($tmp_files_touched, $tmp_dirs_touched) = move_from_same_dir $src_dir, $src_files->{$src_dir}, $dst_cksums, $dst; $files_touched ||= $tmp_files_touched; $dirs_touched ||= $tmp_dirs_touched; } @@ -610,9 +658,9 @@ sub remove_from_same_dir { } sub remove_files { - my $sorted_files = sort_by_dir @_; + my $sorted_files = sort_by_dir(@_); foreach my $dir (keys %$sorted_files) { - remove_from_same_dir($dir, @{$sorted_files{$dir}}); + remove_from_same_dir($dir, @{$sorted_files->{$dir}}); } } @@ -628,9 +676,7 @@ sub make_dirs { # Separate files by current dir so the cksum and dir files only need to be opened once my %dirs; foreach my $dir (@created_dirs) { - system("touch", "$dir/.lumidify_archive_cksums"); - system("touch", "$dir/.lumidify_archive_dirs"); - write_special_cksums $dir, ".lumidify_archive_cksums", ".lumidify_archive_dirs"; + write_cksums $dir, {}, 1, 1; my $parent = dirname($dir); if (!exists($dirs{$parent})) { $dirs{$parent} = []; @@ -638,17 +684,38 @@ sub make_dirs { push(@{$dirs{$parent}}, basename($dir)); } foreach my $parent (keys %dirs) { - my $parent_dirs = read_file "$parent/.lumidify_archive_dirs"; + my $parent_dirs = read_file "$parent/.lumidify_archive_dirs", {}; next if !defined $parent_dirs; foreach my $dir (@{$dirs{$parent}}) { $parent_dirs->{$dir} = ""; } write_file "$parent/.lumidify_archive_dirs", $parent_dirs; + write_special_cksums $parent, ".lumidify_archive_dirs"; + } +} + +sub extract { + my ($src_dir, $dst_dir) = @_; + # clean trailing slashes so removing the prefix later works + $src_dir =~ s/\/*$//; + # after cleaning the slashes, $src_dir is at the beginning of all + # dirs returned by the iterator, but we also need to remove the + # slash that comes right after the prefix + my $prefix_length = length $src_dir; + my $iter = make_lumia_iter $src_dir; + while (my $dir = $iter->()) { + # just returns "" for the original dir itself + my $final_dir = substr($dir, $prefix_length); + foreach my $file (keys %SPECIAL_FILES) { + my $fulldir = "$dst_dir/$final_dir"; + system("mkdir", "-p", $fulldir); + system("cp", "-aiv", "$dir/$file", "$fulldir/$file"); + } } } if ($#ARGV < 0) { - die("USAGE: test.pl {init|check|clean|cknew|addnew|cp|mv|rm|mkdir}\n"); + die("USAGE: test.pl {init|check|clean|checknew|addnew|cp|mv|rm|mkdir}\n"); } if ($ARGV[0] eq "mv") { if ($#ARGV < 2) { @@ -660,39 +727,31 @@ if ($ARGV[0] eq "mv") { if ($#ARGV < 1) { die "rm requires at least one argument\n"; } - my @files = @ARGV[1..$#ARGV]; - remove_files(\@files); + remove_files(@ARGV[1..$#ARGV]); } elsif ($ARGV[0] eq "addnew") { my $dir = "."; if ($#ARGV > 0) { $dir = $ARGV[1]; } - check_add_new_files($dir); -} elsif ($ARGV[0] eq "cknew") { + check_add_new_files $dir; +} elsif ($ARGV[0] eq "checknew") { my $dir = "."; if ($#ARGV > 0) { $dir = $ARGV[1]; } - check_new_files($dir); + check_new_files $dir; } elsif ($ARGV[0] eq "check") { my $dir = "."; if ($#ARGV > 0) { $dir = $ARGV[1]; - if (!-d $dir) { - die "ERROR: Directory \"$dir\" does not exist.\n"; - } - chdir($dir); } - check_files($dir); + check_files $dir; } elsif ($ARGV[0] eq "clean") { my $dir = "."; if ($#ARGV > 0) { $dir = $ARGV[1]; - if (!-d $dir) { - die "ERROR: Directory \"$dir\" does not exist.\n"; - } } - clean_files($dir); + clean_files $dir; } elsif ($ARGV[0] eq "extract") { my $src_dir = "."; my $dst_dir; @@ -702,17 +761,15 @@ if ($ARGV[0] eq "mv") { } elsif ($#ARGV == 1) { $dst_dir = $ARGV[1]; } else { - die("ERROR: `extract` requires at least a destination directory.\n"); + die "ERROR: `extract` requires at least a destination directory.\n"; } if (!-d $src_dir) { - die("ERROR: Directory \"$src_dir\" does not exist.\n"); + die "ERROR: Directory \"$src_dir\" does not exist.\n"; } if (!-d $dst_dir) { - die("ERROR: Directory \"$dst_dir\" does not exist.\n"); + die "ERROR: Directory \"$dst_dir\" does not exist.\n"; } - # FIXME: check .lumidify_archive_cksums.cksum when initializing - my $cksums = init_cksums($src_dir); - write_cksums($dst_dir, $cksums, 1, 1); + extract $src_dir, $dst_dir; } elsif ($ARGV[0] eq "cp") { if ($#ARGV < 2) { die "cp requires at least two arguments\n"; diff --git a/test/.lumidify_archive_cksums b/test/.lumidify_archive_cksums @@ -0,0 +1,3 @@ +4294967295 0 "bob" +4294967295 0 "fred2" +4294967295 0 "fred" diff --git a/test/.lumidify_archive_cksums.cksum b/test/.lumidify_archive_cksums.cksum @@ -0,0 +1,2 @@ +2175384240 27 ".lumidify_archive_dirs" +2227479197 60 ".lumidify_archive_cksums" diff --git a/test/.lumidify_archive_dirs b/test/.lumidify_archive_dirs @@ -0,0 +1,4 @@ +"dir3" +"dir2" +"dir1" +"dir" diff --git a/test/bob b/test/bob diff --git a/test/dir/.lumidify_archive_cksums b/test/dir/.lumidify_archive_cksums @@ -0,0 +1 @@ +4294967295 0 "meh" diff --git a/test/dir/.lumidify_archive_cksums.cksum b/test/dir/.lumidify_archive_cksums.cksum @@ -0,0 +1,2 @@ +43109071 19 ".lumidify_archive_cksums" +4294967295 0 ".lumidify_archive_dirs" diff --git a/test/dir/.lumidify_archive_dirs b/test/dir/.lumidify_archive_dirs diff --git a/test/dir/meh b/test/dir/meh diff --git a/test/dir1/.lumidify_archive_cksums b/test/dir1/.lumidify_archive_cksums @@ -0,0 +1 @@ +4294967295 0 "bob" diff --git a/test/dir1/.lumidify_archive_cksums.cksum b/test/dir1/.lumidify_archive_cksums.cksum @@ -0,0 +1,2 @@ +202046376 19 ".lumidify_archive_cksums" +137730780 6 ".lumidify_archive_dirs" diff --git a/test/dir1/.lumidify_archive_dirs b/test/dir1/.lumidify_archive_dirs @@ -0,0 +1 @@ +"dir" diff --git a/test/dir1/bob b/test/dir1/bob diff --git a/test/dir1/dir/.lumidify_archive_cksums b/test/dir1/dir/.lumidify_archive_cksums @@ -0,0 +1 @@ +4294967295 0 "bob" diff --git a/test/dir1/dir/.lumidify_archive_cksums.cksum b/test/dir1/dir/.lumidify_archive_cksums.cksum @@ -0,0 +1,2 @@ +202046376 19 ".lumidify_archive_cksums" +4294967295 0 ".lumidify_archive_dirs" diff --git a/test/dir1/dir/.lumidify_archive_dirs b/test/dir1/dir/.lumidify_archive_dirs diff --git a/test/dir1/dir/bob b/test/dir1/dir/bob diff --git a/test/dir2/.lumidify_archive_cksums b/test/dir2/.lumidify_archive_cksums diff --git a/test/dir2/.lumidify_archive_cksums.cksum b/test/dir2/.lumidify_archive_cksums.cksum @@ -0,0 +1,2 @@ +4294967295 0 ".lumidify_archive_cksums" +4294967295 0 ".lumidify_archive_dirs" diff --git a/test/dir2/.lumidify_archive_dirs b/test/dir2/.lumidify_archive_dirs diff --git a/test/dir3/.lumidify_archive_cksums b/test/dir3/.lumidify_archive_cksums @@ -0,0 +1 @@ +4294967295 0 "meh" diff --git a/test/dir3/.lumidify_archive_cksums.cksum b/test/dir3/.lumidify_archive_cksums.cksum @@ -0,0 +1,2 @@ +4294967295 0 ".lumidify_archive_dirs" +43109071 19 ".lumidify_archive_cksums" diff --git a/test/dir3/.lumidify_archive_dirs b/test/dir3/.lumidify_archive_dirs diff --git a/test/dir3/meh b/test/dir3/meh diff --git a/test/fred b/test/fred diff --git a/test/fred2 b/test/fred2