summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/bugs/patchqueue/pruning_is_too_strict.mdwn31
1 files changed, 20 insertions, 11 deletions
diff --git a/doc/bugs/patchqueue/pruning_is_too_strict.mdwn b/doc/bugs/patchqueue/pruning_is_too_strict.mdwn
index 620a7eab4..c9087ae90 100644
--- a/doc/bugs/patchqueue/pruning_is_too_strict.mdwn
+++ b/doc/bugs/patchqueue/pruning_is_too_strict.mdwn
@@ -1,32 +1,41 @@
Preliminary patch for a feature wishlist item: [[bugs/pruning_is_too_strict]].
diff --git a/IkiWiki.pm b/IkiWiki.pm
- index 1a00f2d..7381ae7 100644
+ index 1a00f2d..0119a26 100644
--- a/IkiWiki.pm
+++ b/IkiWiki.pm
- @@ -20,6 +20,7 @@ our $VERSION = 1.00;
+ @@ -20,6 +20,8 @@ our $VERSION = 1.00;
# Optimisation.
use Memoize;
memoize("abs2rel");
+ +memoize("basefile");
+memoize("is_prune");
memoize("pagespec_translate");
my $installdir=''; # INSTALLDIR_AUTOREPLACE done by Makefile, DNE
- @@ -331,6 +332,14 @@ sub abs2rel ($$) { #{{{
- return $ret;
+ @@ -318,6 +320,22 @@ sub baseurl (;$) { #{{{
+ return $page;
} #}}}
- +sub is_prune ($;$) { #{{{
+ +sub basefile ($;$) { #{{{
+ my $file=shift;
+ my $base=shift || $config{srcdir};
+
- + my $rel=abs2rel($file, $base);
- + return $rel eq '.' ? 0 : $rel=~m/$config{wiki_file_prune_regexp}/;
+ + require File::Spec;
+ + $base=File::Spec->canonpath($base);
+ + my $ret=File::Spec->canonpath($file);
+ +
+ + $ret=~s#^$base/*##;
+ + return $ret;
+} #}}}
+
- sub displaytime ($) { #{{{
- my $time=shift;
-
+ +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
diff --git a/IkiWiki/CGI.pm b/IkiWiki/CGI.pm
index f550b67..5d1991d 100644
--- a/IkiWiki/CGI.pm
@@ -71,4 +80,4 @@ Preliminary patch for a feature wishlist item: [[bugs/pruning_is_too_strict]].
+ if (is_prune($_, $config{underlaydir})) {
$File::Find::prune=1;
}
- elsif (! -d $_ && ! -l $_) {
+ elsif (! -d $_ && ! -l $_) { \ No newline at end of file