summaryrefslogtreecommitdiff
path: root/lib/Katana/Walk/Dir.rakumod
blob: 77370eb81fb5e7de9919621acffb88e2db8b58f8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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 };
}