summaryrefslogtreecommitdiff
path: root/lib/Katana/Walk/Dir.rakumod
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Katana/Walk/Dir.rakumod')
-rw-r--r--lib/Katana/Walk/Dir.rakumod36
1 files changed, 36 insertions, 0 deletions
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 <<~>> </large /blur /thumb> }
+
+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 };
+}
+