web commit by RecaiOktas: Revise patch (joey: sorry for the wrong place of this page).
[ikiwiki.git] / doc / bugs / patchqueue / pruning_is_too_strict.mdwn
1 Preliminary patch for a feature wishlist item: [[bugs/pruning_is_too_strict]].
2
3     diff --git a/IkiWiki.pm b/IkiWiki.pm
4     index 1a00f2d..7381ae7 100644
5     --- a/IkiWiki.pm
6     +++ b/IkiWiki.pm
7     @@ -20,6 +20,7 @@ our $VERSION = 1.00;
8      # Optimisation.
9      use Memoize;
10      memoize("abs2rel");
11     +memoize("is_prune");
12      memoize("pagespec_translate");
13      
14      my $installdir=''; # INSTALLDIR_AUTOREPLACE done by Makefile, DNE
15     @@ -331,6 +332,14 @@ sub abs2rel ($$) { #{{{
16         return $ret;
17      } #}}}
18      
19     +sub is_prune ($;$) { #{{{
20     +   my $file=shift;
21     +   my $base=shift || $config{srcdir};
22     +
23     +   my $rel=abs2rel($file, $base);
24     +   return $rel eq '.' ? 0 : $rel=~m/$config{wiki_file_prune_regexp}/;
25     +} #}}}
26     +
27      sub displaytime ($) { #{{{
28         my $time=shift;
29      
30     diff --git a/IkiWiki/CGI.pm b/IkiWiki/CGI.pm
31     index f550b67..5d1991d 100644
32     --- a/IkiWiki/CGI.pm
33     +++ b/IkiWiki/CGI.pm
34     @@ -386,7 +386,7 @@ sub cgi_editpage ($$) { #{{{
35         my ($page)=$form->field('page');
36         $page=titlepage(possibly_foolish_untaint($page));
37         if (! defined $page || ! length $page ||
38     -       $page=~/$config{wiki_file_prune_regexp}/ || $page=~/^\//) {
39     +       is_prune($page) || $page=~/^\//) {
40                 error("bad page name");
41         }
42         
43     @@ -476,8 +476,7 @@ sub cgi_editpage ($$) { #{{{
44                         my $best_loc;
45                         if (! defined $from || ! length $from ||
46                             $from ne $form->field('from') ||
47     -                       $from=~/$config{wiki_file_prune_regexp}/ ||
48     -                       $from=~/^\// ||
49     +                       is_prune($from) || $from=~/^\// ||
50                             $form->submitted eq "Preview") {
51                                 @page_locs=$best_loc=$page;
52                         }
53     diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm
54     index 48a25be..a083d3f 100644
55     --- a/IkiWiki/Render.pm
56     +++ b/IkiWiki/Render.pm
57     @@ -202,7 +202,7 @@ sub refresh () { #{{{
58                 no_chdir => 1,
59                 wanted => sub {
60                         $_=decode_utf8($_);
61     -                   if (/$config{wiki_file_prune_regexp}/) {
62     +                   if (is_prune($_)) {
63                                 $File::Find::prune=1;
64                         }
65                         elsif (! -d $_ && ! -l $_) {
66     @@ -222,7 +222,7 @@ sub refresh () { #{{{
67                 no_chdir => 1,
68                 wanted => sub {
69                         $_=decode_utf8($_);
70     -                   if (/$config{wiki_file_prune_regexp}/) {
71     +                   if (is_prune($_, $config{underlaydir})) {
72                                 $File::Find::prune=1;
73                         }
74                         elsif (! -d $_ && ! -l $_) {