diff options
Diffstat (limited to 'doc')
-rw-r--r-- | doc/bugs/patchqueue/pruning_is_too_strict.mdwn | 31 |
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 |