diff options
-rw-r--r-- | IkiWiki.pm | 7 | ||||
-rw-r--r-- | IkiWiki/Plugin/brokenlinks.pm | 31 | ||||
-rw-r--r-- | IkiWiki/Plugin/editpage.pm | 5 | ||||
-rw-r--r-- | IkiWiki/Plugin/inline.pm | 7 | ||||
-rw-r--r-- | IkiWiki/Plugin/opendiscussion.pm | 3 | ||||
-rw-r--r-- | IkiWiki/Plugin/orphans.pm | 11 | ||||
-rw-r--r-- | IkiWiki/Plugin/po.pm | 9 | ||||
-rw-r--r-- | IkiWiki/Render.pm | 32 | ||||
-rwxr-xr-x | Makefile.PL | 2 | ||||
-rw-r--r-- | README | 2 | ||||
-rw-r--r-- | debian/changelog | 3 |
11 files changed, 56 insertions, 56 deletions
diff --git a/IkiWiki.pm b/IkiWiki.pm index a11b330f2..b47da966e 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -220,6 +220,13 @@ sub getsetup () { safe => 1, rebuild => 1, }, + discussionpage => { + type => "string", + default => gettext("Discussion"), + description => "name of Discussion pages", + safe => 1, + rebuild => 1, + }, sslcookie => { type => "boolean", default => 0, diff --git a/IkiWiki/Plugin/brokenlinks.pm b/IkiWiki/Plugin/brokenlinks.pm index cf8f25281..eb698b0be 100644 --- a/IkiWiki/Plugin/brokenlinks.pm +++ b/IkiWiki/Plugin/brokenlinks.pm @@ -27,32 +27,27 @@ sub preprocess (@) { # register a dependency. add_depends($params{page}, $params{pages}); - my %broken; - foreach my $page (pagespec_match_list([keys %links], - $params{pages}, location => $params{page})) { - my $discussion=gettext("Discussion"); - my %seen; - foreach my $link (@{$links{$page}}) { - next if $seen{$link}; - $seen{$link}=1; - next if $link =~ /.*\/\Q$discussion\E/i && $config{discussion}; - my $bestlink=bestlink($page, $link); - next if length $bestlink; - push @{$broken{$link}}, $page; + my @broken; + foreach my $link (keys %IkiWiki::brokenlinks) { + next if $link =~ /.*\/\Q$config{discussionpage}\E/i && $config{discussion}; + + my @pages; + foreach my $page (@{$IkiWiki::brokenlinks{$link}}) { + push @pages, $page + if pagespec_match($page, $params{pages}, location => $params{page}); } - } + next unless @pages; - my @broken; - foreach my $link (keys %broken) { - my $page=$broken{$link}->[0]; + my $page=$IkiWiki::brokenlinks{$link}->[0]; push @broken, sprintf(gettext("%s from %s"), htmllink($page, $params{destpage}, $link, noimageinline => 1), join(", ", map { htmllink($params{page}, $params{destpage}, $_, noimageinline => 1) - } @{$broken{$link}})); + } @pages) + ); } - return gettext("There are no broken links!") unless %broken; + return gettext("There are no broken links!") unless @broken; return "<ul>\n" .join("\n", map { diff --git a/IkiWiki/Plugin/editpage.pm b/IkiWiki/Plugin/editpage.pm index 467cd9ed5..fca970c60 100644 --- a/IkiWiki/Plugin/editpage.pm +++ b/IkiWiki/Plugin/editpage.pm @@ -229,8 +229,9 @@ sub cgi_editpage ($$) { my $dir=$from."/"; $dir=~s![^/]+/+$!!; - if ((defined $form->field('subpage') && length $form->field('subpage')) || - $page eq lc(gettext('Discussion'))) { + if ((defined $form->field('subpage') && + length $form->field('subpage')) || + $page eq lc($config{discussionpage})) { $best_loc="$from/$page"; } else { diff --git a/IkiWiki/Plugin/inline.pm b/IkiWiki/Plugin/inline.pm index 04ad6ed23..704fa711d 100644 --- a/IkiWiki/Plugin/inline.pm +++ b/IkiWiki/Plugin/inline.pm @@ -371,15 +371,14 @@ sub preprocess_inline (@) { my $file = $pagesources{$page}; my $type = pagetype($file); if ($config{discussion}) { - my $discussionlink=lc(gettext("Discussion")); - if ($page !~ /.*\/\Q$discussionlink\E$/ && + if ($page !~ /.*\/\Q$config{discussionpage}\E$/ && (length $config{cgiurl} || - exists $links{$page."/".$discussionlink})) { + exists $links{$page."/".$config{discussionpage}})) { $template->param(have_actions => 1); $template->param(discussionlink => htmllink($page, $params{destpage}, - gettext("Discussion"), + $config{discussionpage}, noimageinline => 1, forcesubpage => 1)); } diff --git a/IkiWiki/Plugin/opendiscussion.pm b/IkiWiki/Plugin/opendiscussion.pm index 60b193eca..1bec4b013 100644 --- a/IkiWiki/Plugin/opendiscussion.pm +++ b/IkiWiki/Plugin/opendiscussion.pm @@ -23,8 +23,7 @@ sub canedit ($$) { my $cgi=shift; my $session=shift; - my $discussion=lc(gettext("Discussion")); - return "" if $page=~/(\/|^)\Q$discussion\E$/; + return "" if $page=~/(\/|^)\Q$config{discussionpage}\E$/; return undef; } diff --git a/IkiWiki/Plugin/orphans.pm b/IkiWiki/Plugin/orphans.pm index 7c938ef74..711226772 100644 --- a/IkiWiki/Plugin/orphans.pm +++ b/IkiWiki/Plugin/orphans.pm @@ -27,23 +27,16 @@ sub preprocess (@) { # register a dependency. add_depends($params{page}, $params{pages}); - my %linkedto; - foreach my $p (keys %links) { - map { $linkedto{bestlink($p, $_)}=1 if length $_ } - @{$links{$p}}; - } - my @orphans; - my $discussion=lc(gettext("Discussion")); foreach my $page (pagespec_match_list( - [ grep { ! $linkedto{$_} && $_ ne 'index' } + [ grep { ! IkiWiki::backlink_pages($_) && $_ ne 'index' } keys %pagesources ], $params{pages}, location => $params{page})) { # If the page has a link to some other page, it's # indirectly linked to a page via that page's backlinks. next if grep { length $_ && - ($_ !~ /\/\Q$discussion\E$/i || ! $config{discussion}) && + ($_ !~ /\/\Q$config{discussionpage}\E$/i || ! $config{discussion}) && bestlink($page, $_) !~ /^(\Q$page\E|)$/ } @{$links{$page}}; push @orphans, $page; diff --git a/IkiWiki/Plugin/po.pm b/IkiWiki/Plugin/po.pm index 52677076e..b8967058e 100644 --- a/IkiWiki/Plugin/po.pm +++ b/IkiWiki/Plugin/po.pm @@ -284,17 +284,16 @@ sub pagetemplate (@) { map add_depends($page, $_), (values %{otherlanguages($page)}); } if ($config{discussion} && istranslation($page)) { - my $discussionlink=gettext("discussion"); - if ($page !~ /.*\/\Q$discussionlink\E$/i && + if ($page !~ /.*\/\Q$config{discussionpage}\E$/i && (length $config{cgiurl} || - exists $links{$masterpage."/".$discussionlink})) { + exists $links{$masterpage."/".lc($config{discussionpage})})) { $template->param('discussionlink' => htmllink( $page, $destpage, - $masterpage . '/' . gettext("Discussion"), + $masterpage . '/' . $config{discussionpage}, noimageinline => 1, forcesubpage => 0, - linktext => gettext("Discussion"), + linktext => $config{discussionpage}, )); } } diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm index fc8f287ce..578142d2e 100644 --- a/IkiWiki/Render.pm +++ b/IkiWiki/Render.pm @@ -8,26 +8,31 @@ use IkiWiki; use Encode; my %backlinks; -my $backlinks_calculated=0; +our %brokenlinks; +my $links_calculated=0; -sub calculate_backlinks () { - return if $backlinks_calculated; - %backlinks=(); +sub calculate_links () { + return if $links_calculated; + %backlinks=%brokenlinks=(); foreach my $page (keys %links) { foreach my $link (@{$links{$page}}) { my $bestlink=bestlink($page, $link); - if (length $bestlink && $bestlink ne $page) { - $backlinks{$bestlink}{$page}=1; + if (length $bestlink) { + $backlinks{$bestlink}{$page}=1 + if $bestlink ne $page; + } + else { + push @{$brokenlinks{$link}}, $page; } } } - $backlinks_calculated=1; + $links_calculated=1; } sub backlink_pages ($) { my $page=shift; - calculate_backlinks(); + calculate_links(); return keys %{$backlinks{$page}}; } @@ -83,11 +88,10 @@ sub genpage ($$) { $actions++; } if ($config{discussion}) { - my $discussionlink=lc(gettext("Discussion")); - if ($page !~ /.*\/\Q$discussionlink\E$/ && + if ($page !~ /.*\/\Q$config{discussionpage}\E$/ && (length $config{cgiurl} || - exists $links{$page."/".$discussionlink})) { - $template->param(discussionlink => htmllink($page, $page, gettext("Discussion"), noimageinline => 1, forcesubpage => 1)); + exists $links{$page."/".$config{discussionpage}})) { + $template->param(discussionlink => htmllink($page, $page, $config{discussionpage}, noimageinline => 1, forcesubpage => 1)); $actions++; } } @@ -153,7 +157,7 @@ sub scan ($) { if ($config{discussion}) { # Discussion links are a special case since they're # not in the text of the page, but on its template. - $links{$page}=[ $page."/".lc(gettext("Discussion")) ]; + $links{$page}=[ $page."/".lc($config{discussionpage}) ]; } else { $links{$page}=[]; @@ -417,7 +421,7 @@ sub refresh () { debug(sprintf(gettext("scanning %s"), $file)); scan($file); } - calculate_backlinks(); + calculate_links(); foreach my $file (@needsbuild) { debug(sprintf(gettext("building %s"), $file)); render($file); diff --git a/Makefile.PL b/Makefile.PL index 602d8fb5c..020813177 100755 --- a/Makefile.PL +++ b/Makefile.PL @@ -27,7 +27,7 @@ PROBABLE_INST_LIB=$(shell \\ W3M_CGI_BIN?=$(PREFIX)/lib/w3m/cgi-bin tflag=$(shell if [ -n "$$NOTAINT" ] && [ "$$NOTAINT" != 1 ]; then printf -- "-T"; fi) -extramodules=$(shell if [ "$$PROFILE" = 1 ]; then printf -- "-d:Profile"; fi) +extramodules=$(shell if [ "$$PROFILE" = 1 ]; then printf -- "-d:NYTProf"; fi) ikiwiki.out: ikiwiki.in ./pm_filter $(PREFIX) $(VER) $(PROBABLE_INST_LIB) < ikiwiki.in > ikiwiki.out @@ -8,7 +8,7 @@ available online at <http://ikiwiki.info/> A few special variables you can set while using the Makefile: PROFILE=1 turns on profiling for the build of the doc wiki. - (Uses Devel::Profile) + (Uses Devel::NYTProf) NOTAINT=0 turns on the taint flag in the ikiwiki program. (Not recommended unless your perl is less buggy than mine -- see diff --git a/debian/changelog b/debian/changelog index ed7854e8a..147d279bb 100644 --- a/debian/changelog +++ b/debian/changelog @@ -4,6 +4,9 @@ ikiwiki (3.141593) UNRELEASED; urgency=low the old version, but continue. Closes: #541205 * inline: Avoid use of my $_ as it fails with older perls. Closes: #541215 + * Add discussionpage configuration setting. + * Several optimisations, including speedups to orphans and brokenlinks + calculation. -- Joey Hess <joeyh@debian.org> Wed, 12 Aug 2009 12:25:30 -0400 |