summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2015-09-06 15:27:50 +0100
committerdakkar <dakkar@thenautilus.net>2015-09-06 15:27:50 +0100
commit3f439cd25065e13ac487efc68538f56a6b5f8f1e (patch)
tree860f8152d7476e0bdd4c8393b817c920ae6504cc
parentrandom flailing for deps (diff)
downloadWebCoso-p6-3f439cd25065e13ac487efc68538f56a6b5f8f1e.tar.gz
WebCoso-p6-3f439cd25065e13ac487efc68538f56a6b5f8f1e.tar.bz2
WebCoso-p6-3f439cd25065e13ac487efc68538f56a6b5f8f1e.zip
deps almost working
-rw-r--r--lib/WebCoso.pm44
-rw-r--r--lib/WebCoso/Doc/Base.pm23
-rw-r--r--lib/WebCoso/Maker.pm42
-rw-r--r--lib/WebCoso/Maker/HTML.pm2
-rw-r--r--lib/WebCoso/Maker/RST.pm2
-rw-r--r--lib/WebCoso/Maker/TT.pm2
-rw-r--r--lib/WebCoso/Maker/XHTML.pm2
-rw-r--r--t/tests/maker.t2
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,