use vars qw{%config %links %oldlinks %pagemtime %pagectime %pagecase
%pagestate %wikistate %renderedfiles %oldrenderedfiles
%pagesources %destsources %depends %hooks %forcerebuild
- %loaded_plugins};
+ %loaded_plugins %depends_exact};
use Exporter q{import};
our @EXPORT = qw(hook debug error template htmlpage add_depends pagespec_match
return;
}
+my %pagename_cache;
+
sub pagename ($) {
my $file=shift;
+ if (exists $pagename_cache{$file}) {
+ return $pagename_cache{$file};
+ }
+
my $type=pagetype($file);
my $page=$file;
$page=~s/\Q.$type\E*$//
if ($config{indexpages} && $page=~/(.*)\/index$/) {
$page=$1;
}
+
+ $pagename_cache{$file} = $page;
return $page;
}
%oldrenderedfiles=%pagectime=();
if (! $config{rebuild}) {
%pagesources=%pagemtime=%oldlinks=%links=%depends=
- %destsources=%renderedfiles=%pagecase=%pagestate=();
+ %destsources=%renderedfiles=%pagecase=%pagestate=
+ %depends_exact=();
}
my $in;
if (! open ($in, "<", "$config{wikistatedir}/indexdb")) {
$links{$page}=$d->{links};
$oldlinks{$page}=[@{$d->{links}}];
}
+ if (exists $d->{depends_exact}) {
+ $depends_exact{$page}={
+ map { $_ => 1 } @{$d->{depends_exact}}
+ };
+ }
if (exists $d->{dependslist}) {
$depends{$page}={
map { $_ => 1 } @{$d->{dependslist}}
$index{page}{$src}{dependslist} = [ keys %{$depends{$page}} ];
}
+ if (exists $depends_exact{$page}) {
+ $index{page}{$src}{depends_exact} = [ keys %{$depends_exact{$page}} ];
+ }
+
if (exists $pagestate{$page}) {
foreach my $id (@hookids) {
foreach my $key (keys %{$pagestate{$page}{$id}}) {
my $page=shift;
my $pagespec=shift;
+ if ($pagespec =~ /$config{wiki_file_regexp}/ &&
+ $pagespec !~ /[\s*?()!]/) {
+ # a simple dependency, which can be matched by string eq
+ $depends_exact{$page}{lc $pagespec} = 1;
+ return 1;
+ }
+
return unless pagespec_valid($pagespec);
$depends{$page}{$pagespec} = 1;
unless grep { $_ eq $link } @{$links{$page}};
}
-sub pagespec_merge ($$) {
- my $a=shift;
- my $b=shift;
-
- return $a if $a eq $b;
- return "($a) or ($b)";
-}
-
sub pagespec_translate ($) {
my $spec=shift;