X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/e47be9748bd7e74a9c71e58003e32e3ccee196ad..091c7fd25bcc39069df9dd81941c5329f26b8988:/doc/todo/missingparents.pm.mdwn?ds=sidebyside diff --git a/doc/todo/missingparents.pm.mdwn b/doc/todo/missingparents.pm.mdwn index 152c82402..c5f2ab535 100644 --- a/doc/todo/missingparents.pm.mdwn +++ b/doc/todo/missingparents.pm.mdwn @@ -4,9 +4,9 @@ has a child). Basically, you give it a page called missingparents.mdwn, something like this:
-[[missingparents pages="posts/* and !posts/*/*" generate="""[[template id=year text="$page"]]"""]] -[[missingparents pages="posts/*/* and !posts/*/*/*" generate="""[[template id=month text="$page"]]"""]] -[[missingparents pages="posts/*/*/* and !posts/*/*/*/*" generate="""[[template id=day text="$page"]]"""]] +[[!missingparents pages="posts/* and !posts/*/*" generate="""[[!template id=year text="$page"]]"""]] +[[!missingparents pages="posts/*/* and !posts/*/*/*" generate="""[[!template id=month text="$page"]]"""]] +[[!missingparents pages="posts/*/*/* and !posts/*/*/*/*" generate="""[[!template id=day text="$page"]]"""]]And it scans the whole wiki for pages that match the pagespecs but are missing @@ -69,7 +69,7 @@ Index: IkiWiki/Plugin/missingparents.pm =================================================================== --- IkiWiki/Plugin/missingparents.pm (revision 0) +++ IkiWiki/Plugin/missingparents.pm (revision 0) -@@ -0,0 +1,136 @@ +@@ -0,0 +1,142 @@ +#!/usr/bin/perl +# missingparents plugin: detect missing parents of pages and create them +package IkiWiki::Plugin::missingparents; @@ -82,15 +82,15 @@ Index: IkiWiki/Plugin/missingparents.pm +my %ownfiles; +my @pagespecs; + -+sub import { #{{{ ++sub import { + hook(type => "checkconfig", id => "missingparents", call => \&checkconfig); + hook(type => "needsdelete", id => "missingparents", call => \&needsdelete); + hook(type => "needsbuild", id => "missingparents", call => \&needsbuild); + hook(type => "savestate", id => "missingparents", call => \&savestate); + hook(type => "preprocess", id => "missingparents", call => \&preprocess_missingparents); -+} # }}} ++} + -+sub checkconfig () { #{{{ ++sub checkconfig () { + IkiWiki::preprocess("missingparents", "missingparents", + readfile(srcfile("missingparents.mdwn"))); + loadstate(); @@ -99,13 +99,13 @@ Index: IkiWiki/Plugin/missingparents.pm + unlink $config{srcdir}.'/'.$file; + } + } -+} #}}} ++} + -+sub preprocess_missingparents (@) { #{{{ ++sub preprocess_missingparents (@) { + my %params=@_; + + if (! defined $params{pages} || ! defined $params{generate}) { -+ return "[[missingparents ".gettext("missing pages or generate parameter")."]]"; ++ return "[[!missingparents ".gettext("missing pages or generate parameter")."]]"; + } + + push @pagespecs, \%params; @@ -115,10 +115,10 @@ Index: IkiWiki/Plugin/missingparents.pm + #translators: is text for pages that match that pagespec. + return sprintf(gettext("missingparents in %s will be %s"), + '`'.$params{pages}.'`', '`\\'.$params{generate}.'`'); -+} # }}} ++} + +my $state_loaded=0; -+sub loadstate() { #{{{ ++sub loadstate() { + my $filename = "$config{wikistatedir}/missingparents"; + if (-e $filename) { + open (IN, $filename) || @@ -132,9 +132,9 @@ Index: IkiWiki/Plugin/missingparents.pm + + $state_loaded=1; + } -+} #}}} ++} + -+sub savestate() { #{{{ ++sub savestate() { + my $filename = "$config{wikistatedir}/missingparents.new"; + my $cleanup = sub { unlink ($filename) }; + open (OUT, ">$filename") || error("open $filename: $!", $cleanup); @@ -143,9 +143,9 @@ Index: IkiWiki/Plugin/missingparents.pm + } + rename($filename, "$config{wikistatedir}/missingparents") || + error("rename $filename: $!", $cleanup); -+} #}}} ++} + -+sub needsdelete (@) { #{{{ ++sub needsdelete (@) { + my $files=shift; + + my @mydel; @@ -167,9 +167,9 @@ Index: IkiWiki/Plugin/missingparents.pm + foreach my $page (@mydel){ + push @{$files}, $page; + } -+} #}}} ++} + -+sub check_matches($) { #{{{ ++sub check_matches($) { + my $page = shift; + return if $IkiWiki::pagesources{$page}; + @@ -183,13 +183,19 @@ Index: IkiWiki/Plugin/missingparents.pm + return $output; + } + return ""; -+} #}}} ++} + -+sub needsbuild ($) { #{{{ ++sub needsbuild ($) { + my $files=shift; + my @new; + + foreach my $file (@{$files}) { ++ if ($ownfiles{$file}) { ++ # someone edited our file, making it the ++ # user's problem ++ delete $ownfiles{$file}; ++ next; ++ } + my $page = pagename $file; + my $newfile = ""; + foreach my $parent (split '/', $page) { @@ -203,22 +209,9 @@ Index: IkiWiki/Plugin/missingparents.pm + $ownfiles{$file} = 1; + push @{$files}, $file; + } -+} #}}} ++} + +1 -Index: IkiWiki/Plugin/rst.pm -=================================================================== ---- IkiWiki/Plugin/rst.pm (revision 3926) -+++ IkiWiki/Plugin/rst.pm (working copy) -@@ -25,7 +25,7 @@ - html = publish_string(stdin.read(), writer_name='html', - settings_overrides = { 'halt_level': 6, - 'file_insertion_enabled': 0, -- 'raw_enabled': 0 } -+ 'raw_enabled': 1 } - ); - print html[html.find('')+6:html.find('')].strip(); - "; Index: IkiWiki.pm =================================================================== --- IkiWiki.pm (revision 3926) @@ -234,18 +227,18 @@ Index: IkiWiki.pm our $version='unknown'; # VERSION_AUTOREPLACE done by Makefile, DNE @@ -330,6 +336,30 @@ error("failed renaming $newfile to $destdir/$file: $!", $cleanup); - } #}}} + } -+sub newpage($$) { #{{{ ++sub newpage($$) { + my $file=shift; + my $page=shift; + + $pagemtime{$page} = $pagectime{$page} = time; + $pagesources{$page} = $file; + $pagecase{lc $page} = $page; -+} #}}} ++} + -+sub delpage($) { #{{{ ++sub delpage($) { + my $page=shift; + $links{$page}=[]; + $renderedfiles{$page}=[]; @@ -258,9 +251,11 @@ Index: IkiWiki.pm + delete $destsources{$_}; + } + } -+} #}}} ++} + my %cleared; - sub will_render ($$;$) { #{{{ + sub will_render ($$;$) { my $page=shift; - \ No newline at end of file + + +[[!tag patch]]