Preliminary patch for a feature wishlist item: [[bugs/pruning_is_too_strict]].

    diff -ur ikiwiki-orig/IkiWiki/CGI.pm ikiwiki/IkiWiki/CGI.pm
    --- ikiwiki-orig/IkiWiki/CGI.pm     2006-10-27 20:15:17.000000000 -0700
    +++ ikiwiki/IkiWiki/CGI.pm  2006-11-07 22:32:41.000000000 -0800
    @@ -405,7 +405,7 @@
        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");
        }

    @@ -495,8 +495,7 @@
                        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 -ur ikiwiki-orig/IkiWiki/Render.pm ikiwiki/IkiWiki/Render.pm
    --- ikiwiki-orig/IkiWiki/Render.pm  2006-10-27 20:15:17.000000000 -0700
    +++ ikiwiki/IkiWiki/Render.pm       2006-11-07 22:36:48.000000000 -0800
    @@ -189,7 +193,7 @@
                no_chdir => 1,
                wanted => sub {
                        $_=decode_utf8($_);
    -                   if (/$config{wiki_file_prune_regexp}/) {
    +                   if (is_prune($_)) {
                                $File::Find::prune=1;
                        }
                        elsif (! -d $_ && ! -l $_) {
    @@ -209,7 +213,7 @@
                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 $_) {
    diff -ur ikiwiki-orig/IkiWiki.pm ikiwiki/IkiWiki.pm
    --- ikiwiki-orig/IkiWiki.pm 2006-10-27 20:15:23.000000000 -0700
    +++ ikiwiki/IkiWiki.pm      2006-11-07 22:21:17.000000000 -0800
    @@ -21,6 +21,8 @@
     # Optimisation.
     use Memoize;
     memoize("abs2rel");
    +memoize("basefile");
    +memoize("is_prune");
     memoize("pagespec_translate");

     my $installdir=''; # INSTALLDIR_AUTOREPLACE done by Makefile, DNE
    @@ -343,6 +352,22 @@
        return $page;
     } #}}}

    +sub basefile ($;$) { #{{{
    +   my $file=shift;
    +   my $base=shift || $config{srcdir};
    +
    +   require File::Spec;
    +   $base=File::Spec->canonpath($base);
    +   my $ret=File::Spec->canonpath($file);
    +
    +   $ret=~s#^$base/*##;
    +   return $ret;
    +} #}}}
    +
    +sub is_prune ($;$) { #{{{
    +   return basefile($_[0], $_[1])=~m/$config{wiki_file_prune_regexp}/;
    +} #}}}
    +
     sub abs2rel ($$) { #{{{
        # Work around very innefficient behavior in File::Spec if abs2rel
        # is passed two relative paths. It's much faster if paths are