From 3f439cd25065e13ac487efc68538f56a6b5f8f1e Mon Sep 17 00:00:00 2001 From: dakkar Date: Sun, 6 Sep 2015 15:27:50 +0100 Subject: deps almost working --- lib/WebCoso.pm | 44 ++++++++++++++++++++++++++++---------------- lib/WebCoso/Doc/Base.pm | 23 +++++++++++++++++------ lib/WebCoso/Maker.pm | 42 +++++++++++++++++++++++++++++++++++------- lib/WebCoso/Maker/HTML.pm | 2 +- lib/WebCoso/Maker/RST.pm | 2 +- lib/WebCoso/Maker/TT.pm | 2 +- lib/WebCoso/Maker/XHTML.pm | 2 +- t/tests/maker.t | 2 +- 8 files changed, 85 insertions(+), 34 deletions(-) diff --git a/lib/WebCoso.pm b/lib/WebCoso.pm index 6e3da7e..57818d5 100644 --- a/lib/WebCoso.pm +++ b/lib/WebCoso.pm @@ -10,32 +10,44 @@ class WebCoso { has %!docs; method get-src-files($dir,$basename,$ext) { - return try { - CATCH { when X::IO { } } - ( $dir ?? $.srcdir.child($dir) !! $.srcdir ).dir( - test => /$basename \. .+? \. $ext/, - ); - } // (); + say "WebCoso($.srcdir,$.destdir,$!tmpdir)::get-src-files($dir,$basename,$ext)"; + my @files = gather { + for $.srcdir,$!tmpdir -> $base { + take $_ for try { + CATCH { when X::IO { } } + ( $dir ?? $base.child($dir) !! $base ).dir( + test => /$basename \. .+? \. $ext/, + ) + } // (); + } + } + say "WebCoso($.srcdir,$.destdir,$!tmpdir)::get-src-files($dir,$basename,$ext) files = {@files.perl}"; + return ( + map { + (.basename ~~ /$basename \. (.+?) \. $ext/)[0] + => + $_ + }, @files + ).values; } method get-made-files($dir,$basename,$ext) { + say "WebCoso($.srcdir,$.destdir,$!tmpdir)::get-made-files($dir,$basename,$ext)"; if %!docs{$dir}{$basename} -> $doc { - return $doc.get-files-by-ext($ext) + say "WebCoso($.srcdir,$.destdir,$!tmpdir)::get-made-files($dir,$basename,$ext) at $doc"; + return $doc.make-by-ext($ext) } - return; + return (); } - method get-files($dir,$basename,$ext) { - my @files = self.get-src-files($dir,$basename,$ext) // self.get-made-files($dir,$basename,$ext); - - return map { - (.basename ~~ /$basename \. (.+?) \. $ext/)[0] - => - $_ - }, @files; + method get-files($dir,$basename,$ext,:$make=True) { + say "WebCoso($.srcdir,$.destdir,$!tmpdir)::get-files($dir,$basename,$ext,$make)"; + return self.get-src-files($dir,$basename,$ext) || + ( $make ?? self.get-made-files($dir,$basename,$ext) !! () ); } method put-file($dir,$basename,$lang,$ext,$contents) { + say "WebCoso($.srcdir,$.destdir,$!tmpdir)::put-file($dir,$basename,$lang,$ext)"; my $t = ($dir ?? $!tmpdir.child($dir) !! $!tmpdir); $t.mkdir; my $f = $t.child("{$basename}.{$lang}.{$ext}"); diff --git a/lib/WebCoso/Doc/Base.pm b/lib/WebCoso/Doc/Base.pm index 46afce8..ab99164 100644 --- a/lib/WebCoso/Doc/Base.pm +++ b/lib/WebCoso/Doc/Base.pm @@ -15,15 +15,26 @@ class WebCoso::Doc::Base { method basename() { ... } - submethod BUILD(:$wc,:$dir) { + submethod BUILD(:$!wc,:$!dir) { my $basename = self.basename; - $!tt = WebCoso::Maker::TT.new(:$basename,:$dir,:$wc); - $!rst = WebCoso::Maker::RST.new(:$basename,:$dir,:$wc); - $!xhtml = WebCoso::Maker::XHTML.new(:$basename,:$dir,:$wc); - $!html = WebCoso::Maker::HTML.new(:$basename,:$dir,:$wc); + $!tt = WebCoso::Maker::TT.new(:$basename,:$!dir,:$!wc); + $!rst = WebCoso::Maker::RST.new(:$basename,:$!dir,:$!wc); + $!xhtml = WebCoso::Maker::XHTML.new(:$basename,:$!dir,:$!wc); + $!html = WebCoso::Maker::HTML.new(:$basename,:$!dir,:$!wc); + } + + method make-by-ext($ext) { + say "Doc::Base($.dir/$.basename)::make-by-ext($ext)"; + given $ext { + when 'rest.txt' { return $.tt.make() } + when 'du.xml' { return $.rst.make() } + when 'xhtml' { return $.xhtml.make() } + when 'html' { return $.html.make() } + } } method make() { - $.html.get-files(); + say "Doc::Base($.dir/$.basename)::make"; + $.make-by-ext('html'); } } diff --git a/lib/WebCoso/Maker.pm b/lib/WebCoso/Maker.pm index 5aae4f8..d5436df 100644 --- a/lib/WebCoso/Maker.pm +++ b/lib/WebCoso/Maker.pm @@ -4,16 +4,44 @@ role WebCoso::Maker[$from,$to] { has $.basename; has $.dir; - method process-contents($from-contents) { ... } + method process-contents(:$src,:@deps) { ... } + + method dest-files() { + say "Maker[$from,$to]($.dir/$.basename)::dest-files"; + return $.wc.get-files($.dir,$.basename,$to,:!make); + } + + method src-files() { + say "Maker[$from,$to]($.dir/$.basename)::src-files"; + return $.wc.get-files($.dir,$.basename,$from); + } + + method dep-files() { + return Hash; + } + + method make() { + say "Maker[$from,$to]($.dir/$.basename)::make"; + my %srcs = $.src-files(); + my %dsts = $.dest-files(); + my %deps = $.dep-files(); + + say "Maker[$from,$to]($.dir/$.basename)::make from {%srcs.perl} and {%deps.perl} to {%dsts.perl}"; - method get-files() { - my %srcs = $.wc.get-files($.dir,$.basename,$from); - my %dsts = $.wc.get-files($.dir,$.basename,$to); for %srcs.keys -> $lang { my $src = %srcs{$lang}; - next if %dsts{$lang} and - %dsts{$lang}.modified after $src.modified; - my $processed-contents = self.process-contents($src.slurp); + my $dst = %dsts{$lang}; + my @deps = %deps{$lang} // (); + say "Maker[$from,$to]($.dir/$.basename)::make lang $lang"; + next if $dst and $dst.modified after + all($src.modified,@depsĀ».modified.flat); + + say "Maker[$from,$to]($.dir/$.basename)::make processing $lang"; + my $processed-contents = self.process-contents( + src => $src.slurp, + deps => @depsĀ».slurp, + ); + %dsts{$lang} = $.wc.put-file($.dir,$.basename,$lang,$to, $processed-contents) } diff --git a/lib/WebCoso/Maker/HTML.pm b/lib/WebCoso/Maker/HTML.pm index 1003cbc..414fe2b 100644 --- a/lib/WebCoso/Maker/HTML.pm +++ b/lib/WebCoso/Maker/HTML.pm @@ -1,7 +1,7 @@ # -*- mode: perl6 -*- use WebCoso::Maker; class WebCoso::Maker::HTML does WebCoso::Maker['xhtml','html'] { - method process-contents($xhtml) { + method process-contents(:src($xhtml),:@deps) { return "{$xhtml} decorated"; } } diff --git a/lib/WebCoso/Maker/RST.pm b/lib/WebCoso/Maker/RST.pm index bf75ab1..76bc127 100644 --- a/lib/WebCoso/Maker/RST.pm +++ b/lib/WebCoso/Maker/RST.pm @@ -1,7 +1,7 @@ # -*- mode: perl6 -*- use WebCoso::Maker; class WebCoso::Maker::RST does WebCoso::Maker['rest.txt','du.xml'] { - method process-contents($rst) { + method process-contents(:src($rst),:@deps) { return "{$rst} parsed"; } } diff --git a/lib/WebCoso/Maker/TT.pm b/lib/WebCoso/Maker/TT.pm index eb5e390..256cf54 100644 --- a/lib/WebCoso/Maker/TT.pm +++ b/lib/WebCoso/Maker/TT.pm @@ -1,7 +1,7 @@ # -*- mode: perl6 -*- use WebCoso::Maker; class WebCoso::Maker::TT does WebCoso::Maker['tt','rest.txt'] { - method process-contents($tt) { + method process-contents(:src($tt),:@deps) { return "{$tt} expanded"; } } diff --git a/lib/WebCoso/Maker/XHTML.pm b/lib/WebCoso/Maker/XHTML.pm index d33c447..c2b1d9e 100644 --- a/lib/WebCoso/Maker/XHTML.pm +++ b/lib/WebCoso/Maker/XHTML.pm @@ -1,7 +1,7 @@ # -*- mode: perl6 -*- use WebCoso::Maker; class WebCoso::Maker::XHTML does WebCoso::Maker['du.xml','xhtml'] { - method process-contents($du) { + method process-contents(:src($du),:@deps) { return "{$du} converted"; } } diff --git a/t/tests/maker.t b/t/tests/maker.t index 25823a6..a09ec19 100644 --- a/t/tests/maker.t +++ b/t/tests/maker.t @@ -20,7 +20,7 @@ my $wc = WebCoso.new(:$srcdir,:$destdir); my $m = WebCoso::Maker::TT.new(basename=>'document',dir=>'',:$wc); -my %output = $m.get-files(); +my %output = $m.make(); cmp-files( %output, -- cgit v1.2.3