Preliminary patch for a feature wishlist item: [[bugs/pruning_is_too_strict]]. diff --git a/IkiWiki.pm b/IkiWiki.pm index 1a00f2d..7381ae7 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -20,6 +20,7 @@ our $VERSION = 1.00; # Optimisation. use Memoize; memoize("abs2rel"); +memoize("is_prune"); memoize("pagespec_translate"); my $installdir=''; # INSTALLDIR_AUTOREPLACE done by Makefile, DNE @@ -331,6 +332,14 @@ sub abs2rel ($$) { #{{{ return $ret; } #}}} +sub is_prune ($;$) { #{{{ + my $file=shift; + my $base=shift || $config{srcdir}; + + my $rel=abs2rel($file, $base); + return $rel eq '.' ? 0 : $rel=~m/$config{wiki_file_prune_regexp}/; +} #}}} + sub displaytime ($) { #{{{ my $time=shift; diff --git a/IkiWiki/CGI.pm b/IkiWiki/CGI.pm index f550b67..5d1991d 100644 --- a/IkiWiki/CGI.pm +++ b/IkiWiki/CGI.pm @@ -386,7 +386,7 @@ sub cgi_editpage ($$) { #{{{ my ($page)=$form->field('page'); $page=titlepage(possibly_foolish_untaint($page)); if (! defined $page || ! length $page || - $page=~/$config{wiki_file_prune_regexp}/ || $page=~/^\//) { + is_prune($page) || $page=~/^\//) { error("bad page name"); } @@ -476,8 +476,7 @@ sub cgi_editpage ($$) { #{{{ my $best_loc; if (! defined $from || ! length $from || $from ne $form->field('from') || - $from=~/$config{wiki_file_prune_regexp}/ || - $from=~/^\// || + is_prune($from) || $from=~/^\// || $form->submitted eq "Preview") { @page_locs=$best_loc=$page; } diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm index 48a25be..a083d3f 100644 --- a/IkiWiki/Render.pm +++ b/IkiWiki/Render.pm @@ -202,7 +202,7 @@ sub refresh () { #{{{ no_chdir => 1, wanted => sub { $_=decode_utf8($_); - if (/$config{wiki_file_prune_regexp}/) { + if (is_prune($_)) { $File::Find::prune=1; } elsif (! -d $_ && ! -l $_) { @@ -222,7 +222,7 @@ sub refresh () { #{{{ no_chdir => 1, wanted => sub { $_=decode_utf8($_); - if (/$config{wiki_file_prune_regexp}/) { + if (is_prune($_, $config{underlaydir})) { $File::Find::prune=1; } elsif (! -d $_ && ! -l $_) {