autoindex: Ignore internal pages, and take underlay directories into account. Also, avoid making index pages for directories that contain no files.

master
Joey Hess 2008-08-06 00:04:05 -04:00
parent 11a4ad8a4d
commit 9cb415f4a4
2 changed files with 25 additions and 19 deletions

View File

@ -35,31 +35,34 @@ sub refresh () { #{{{
error($@) if $@;
my (%pages, %dirs);
find({
no_chdir => 1,
wanted => sub {
$_=decode_utf8($_);
if (IkiWiki::file_pruned($_, $config{srcdir})) {
$File::Find::prune=1;
}
elsif (! -l $_) {
my ($f)=/$config{wiki_file_regexp}/; # untaint
return unless defined $f;
$f=~s/^\Q$config{srcdir}\E\/?//;
return unless length $f;
if (! -d _) {
$pages{pagename($f)}=1;
foreach my $dir ($config{srcdir}, @{$config{underlaydirs}}, $config{underlaydir}) {
find({
no_chdir => 1,
wanted => sub {
$_=decode_utf8($_);
if (IkiWiki::file_pruned($_, $dir)) {
$File::Find::prune=1;
}
else {
$dirs{$f}=1;
elsif (! -l $_) {
my ($f)=/$config{wiki_file_regexp}/; # untaint
return unless defined $f;
$f=~s/^\Q$dir\E\/?//;
return unless length $f;
return if $f =~ /\._([^.]+)$/; # skip internal page
if (! -d _) {
$pages{pagename($f)}=1;
}
elsif ($dir eq $config{srcdir}) {
$dirs{$f}=1;
}
}
}
}
}, $config{srcdir});
}, $dir);
}
my @needed;
foreach my $dir (keys %dirs) {
if (! exists $pages{$dir}) {
if (! exists $pages{$dir} && grep /^$dir\/.*/, keys %pages) {
push @needed, $dir;
}
}

3
debian/changelog vendored
View File

@ -20,6 +20,9 @@ ikiwiki (2.60) UNRELEASED; urgency=low
* Clarify some wording in the setup documentation that could maybe lead
users to putting paths with "~/" in the setup file, which doesn't work.
Closes: #493835
* autoindex: Ignore internal pages, and take underlay directories into
account. Also, avoid making index pages for directories that contain
no files.
-- Joey Hess <joeyh@debian.org> Mon, 21 Jul 2008 11:35:46 -0400