From 6b0d4ee051f650b46af7ec50acf1122d44088fb5 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Wed, 20 Apr 2022 10:12:14 +0100 Subject: modularize more --- lib/Katana/Walk/Dir.rakumod | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 lib/Katana/Walk/Dir.rakumod (limited to 'lib/Katana/Walk/Dir.rakumod') diff --git a/lib/Katana/Walk/Dir.rakumod b/lib/Katana/Walk/Dir.rakumod new file mode 100644 index 0000000..77370eb --- /dev/null +++ b/lib/Katana/Walk/Dir.rakumod @@ -0,0 +1,36 @@ +use v6.d; +use Katana::Image::Elem; +unit module Katana::Walk::Dir:api<1>; + +sub dist-dirs(Str \dist-dir --> List) { dist-dir <<~>> } + +sub dir-ensure(Str \dist-dir) is export { + mkdir dist-dir unless dist-dir.IO.d; + mkdir $_ unless .IO.d for dist-dirs dist-dir; +} + +sub dir-walk(Str \dir, :&onFile, :&onDir = sub (\dir) {} ) is export { + return unless dir.IO.d; + for dir(dir) -> $fh { + given $fh { + when .d { dir-walk $fh.path, :&onFile, :&onDir } + default { &onFile($fh.path) } + } + } + &onDir(dir); +} + +sub dir-cleanup-nonexistent (Str \dist-dir, @images) is export { + my $basenames = set @images.map:{ $_.basename }; + dir-walk dist-dir, + onFile => sub (\file) { + unlink file if file.IO.basename ∉ $basenames + }; +} + +sub dir-make-mr-proper(Str \dist-dir) is export { + dir-walk dist-dir, + onFile => sub (\file) { unlink file }, + onDir => sub (\dir) { rmdir dir }; +} + -- cgit v1.2.3