commit e9a4386e8fe18457c0d154d655ff6159ecae1ab9
parent f60d1fa300a9def9bed31e38e9c0025676705efd
Author: lumidify <nobody@lumidify.org>
Date: Mon, 23 Mar 2020 11:53:09 +0100
Fix several errors
Diffstat:
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