]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - doc/todo/missingparents.pm.mdwn
improved fix for depends_simple_mixup
[git.ikiwiki.info.git] / doc / todo / missingparents.pm.mdwn
index 152c82402f8f4a3fcd372a93ac8c15c0195e7f1c..cecac7a94010dec37e9caf6b4eec4c414c426d4a 100644 (file)
@@ -4,9 +4,9 @@ has a child). Basically, you give it a page called missingparents.mdwn,
 something like this:
 
 <pre>
-[[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"]]"""]]
 </pre>
 
 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('<body>')+6:html.find('</body>')].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;
-</pre>
\ No newline at end of file
+</pre>
+
+[[!tag patch patch/core]]