X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/20a38fbf6d4fda7d811239ae2980a166bc32ad0d..6ece984c39713117d356843ba8f71fb2beb47e91:/IkiWiki/Render.pm diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm index 85ae0f8e9..a8236b954 100644 --- a/IkiWiki/Render.pm +++ b/IkiWiki/Render.pm @@ -210,7 +210,7 @@ sub render ($) { if (defined $type) { my $page=pagename($file); delete $depends{$page}; - delete $depends_exact{$page}; + delete $depends_simple{$page}; will_render($page, htmlpage($page), 1); return if $type=~/^_/; @@ -225,7 +225,7 @@ sub render ($) { } else { delete $depends{$file}; - delete $depends_exact{$file}; + delete $depends_simple{$file}; will_render($file, $file, 1); if ($config{hardlink}) { @@ -279,24 +279,26 @@ sub find_src_files () { find({ no_chdir => 1, wanted => sub { - $_=decode_utf8($_); - if (file_pruned($_, $config{srcdir})) { + my $file=decode_utf8($_); + $file=~s/^\Q$config{srcdir}\E\/?//; + my $page = pagename($file); + if (! exists $pagesources{$page} && + file_pruned($file)) { $File::Find::prune=1; + return; } - elsif (! -l $_ && ! -d _) { - my ($f)=/$config{wiki_file_regexp}/; # untaint - if (! defined $f) { - warn(sprintf(gettext("skipping bad filename %s"), $_)."\n"); - } - else { - $f=~s/^\Q$config{srcdir}\E\/?//; - push @files, $f; - my $pagename = pagename($f); - if ($pages{$pagename}) { - debug(sprintf(gettext("%s has multiple possible source pages"), $pagename)); - } - $pages{$pagename}=1; + return if -l $_ || -d _ || ! length $file; + + my ($f) = $file =~ /$config{wiki_file_regexp}/; # untaint + if (! defined $f) { + warn(sprintf(gettext("skipping bad filename %s"), $file)."\n"); + } + else { + push @files, $f; + if ($pages{$page}) { + debug(sprintf(gettext("%s has multiple possible source pages"), $page)); } + $pages{$page}=1; } }, }, $config{srcdir}); @@ -304,27 +306,28 @@ sub find_src_files () { find({ no_chdir => 1, wanted => sub { - $_=decode_utf8($_); - if (file_pruned($_, $dir)) { + my $file=decode_utf8($_); + $file=~s/^\Q$dir\E\/?//; + my $page=pagename($file); + if (! exists $pagesources{$page} && + file_pruned($file)) { $File::Find::prune=1; + return; } - elsif (! -l $_ && ! -d _) { - my ($f)=/$config{wiki_file_regexp}/; # untaint - if (! defined $f) { - warn(sprintf(gettext("skipping bad filename %s"), $_)."\n"); - } - else { - $f=~s/^\Q$dir\E\/?//; - # avoid underlaydir - # override attacks; see - # security.mdwn - if (! -l "$config{srcdir}/$f" && - ! -e _) { - my $page=pagename($f); - if (! $pages{$page}) { - push @files, $f; - $pages{$page}=1; - } + return if -l $_ || -d _ || ! length $file; + + my ($f) = $file =~ /$config{wiki_file_regexp}/; # untaint + if (! defined $f) { + warn(sprintf(gettext("skipping bad filename %s"), $file)."\n"); + } + else { + # avoid underlaydir override + # attacks; see security.mdwn + if (! -l "$config{srcdir}/$f" && + ! -e _) { + if (! $pages{$page}) { + push @files, $f; + $pages{$page}=1; } } } @@ -433,7 +436,7 @@ sub refresh () { # internal pages are not rendered my $page=pagename($file); delete $depends{$page}; - delete $depends_exact{$page}; + delete $depends_simple{$page}; foreach my $old (@{$renderedfiles{$page}}) { delete $destsources{$old}; } @@ -465,8 +468,8 @@ sub refresh () { my $p=pagename($f); my $reason = undef; - if (exists $depends_exact{$p}) { - foreach my $d (keys %{$depends_exact{$p}}) { + if (exists $depends_simple{$p}) { + foreach my $d (keys %{$depends_simple{$p}}) { if (exists $lcchanged{$d}) { $reason = $d; last;