From 252edaea66577327ba533eea5626be8ff860b9d3 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 22 Apr 2009 15:36:40 -0400 Subject: clarify --- doc/plugins/write.mdwn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'doc/plugins/write.mdwn') diff --git a/doc/plugins/write.mdwn b/doc/plugins/write.mdwn index 696bc6bc3..11ed312ae 100644 --- a/doc/plugins/write.mdwn +++ b/doc/plugins/write.mdwn @@ -98,7 +98,7 @@ function is passed no values. This allows a plugin to manipulate the list of files that need to be built when the wiki is refreshed. The function is passed a reference to an -array of pages that will be rebuilt, and can modify the array, either +array of files that will be rebuilt, and can modify the array, either adding or removing files from it. ### scan -- cgit v1.2.3 From 748aa7af777caaa32ac5ab56e707509b3739b49e Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 23 Apr 2009 14:07:28 -0400 Subject: pagespec error/failure distinction and error display by inline * Add IkiWiki::ErrorReason objects, and modify pagespecs to return them in cases where they fail to match due to a configuration or syntax error. * inline: Display a handy error message if the inline cannot display any pages due to such an error. This is perhaps somewhat incomplete, as other users of pagespecs do not display the error, and will eventually need similar modifications to inline. I should probably factor out a pagespec_match_all function and make it throw ErrorReasons. --- IkiWiki.pm | 14 +++++++---- IkiWiki/Plugin/filecheck.pm | 18 +++++++------- IkiWiki/Plugin/inline.pm | 9 ++++++- debian/changelog | 5 ++++ doc/plugins/write.mdwn | 9 ++++--- po/bg.po | 31 ++++++++++++++---------- po/cs.po | 31 ++++++++++++++---------- po/da.po | 36 +++++++++++++++++----------- po/de.po | 37 ++++++++++++++++++----------- po/es.po | 58 +++++++++++++++++++++++++++++---------------- po/fr.po | 37 ++++++++++++++++++----------- po/gu.po | 31 ++++++++++++++---------- po/ikiwiki.pot | 27 ++++++++++++--------- po/pl.po | 31 ++++++++++++++---------- po/sv.po | 31 ++++++++++++++---------- po/vi.po | 31 ++++++++++++++---------- 16 files changed, 266 insertions(+), 170 deletions(-) (limited to 'doc/plugins/write.mdwn') diff --git a/IkiWiki.pm b/IkiWiki.pm index 2eca82e4d..fca8da874 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -1800,7 +1800,7 @@ sub pagespec_translate ($) { $code.="IkiWiki::PageSpec::match_$1(\$page, ".safequote($2).", \@_)"; } else { - $code.="IkiWiki::FailReason->new(".safequote(qq{unknown function in pagespec "$word"}).")"; + $code.="IkiWiki::ErrorReason->new(".safequote(qq{unknown function in pagespec "$word"}).")"; } } else { @@ -1827,7 +1827,7 @@ sub pagespec_match ($$;@) { } my $sub=pagespec_translate($spec); - return IkiWiki::FailReason->new("syntax error in pagespec \"$spec\"") + return IkiWiki::ErrorReason->new("syntax error in pagespec \"$spec\"") if $@ || ! defined $sub; return $sub->($page, @params); } @@ -1861,6 +1861,10 @@ sub new { return bless \$value, $class; } +package IkiWiki::ErrorReason; + +our @ISA = 'IkiWiki::FailReason'; + package IkiWiki::SuccessReason; use overload ( @@ -2021,7 +2025,7 @@ sub match_user ($$;@) { my %params=@_; if (! exists $params{user}) { - return IkiWiki::FailReason->new("no user specified"); + return IkiWiki::ErrorReason->new("no user specified"); } if (defined $params{user} && lc $params{user} eq lc $user) { @@ -2041,7 +2045,7 @@ sub match_admin ($$;@) { my %params=@_; if (! exists $params{user}) { - return IkiWiki::FailReason->new("no user specified"); + return IkiWiki::ErrorReason->new("no user specified"); } if (defined $params{user} && IkiWiki::is_admin($params{user})) { @@ -2061,7 +2065,7 @@ sub match_ip ($$;@) { my %params=@_; if (! exists $params{ip}) { - return IkiWiki::FailReason->new("no IP specified"); + return IkiWiki::ErrorReason->new("no IP specified"); } if (defined $params{ip} && lc $params{ip} eq lc $ip) { diff --git a/IkiWiki/Plugin/filecheck.pm b/IkiWiki/Plugin/filecheck.pm index 8575ee108..01d490961 100644 --- a/IkiWiki/Plugin/filecheck.pm +++ b/IkiWiki/Plugin/filecheck.pm @@ -71,13 +71,13 @@ sub match_maxsize ($$;@) { my $page=shift; my $maxsize=eval{IkiWiki::Plugin::filecheck::parsesize(shift)}; if ($@) { - return IkiWiki::FailReason->new("unable to parse maxsize (or number too large)"); + return IkiWiki::ErrorReason->new("unable to parse maxsize (or number too large)"); } my %params=@_; my $file=exists $params{file} ? $params{file} : $IkiWiki::pagesources{$page}; if (! defined $file) { - return IkiWiki::FailReason->new("no file specified"); + return IkiWiki::ErrorReason->new("no file specified"); } if (-s $file > $maxsize) { @@ -92,13 +92,13 @@ sub match_minsize ($$;@) { my $page=shift; my $minsize=eval{IkiWiki::Plugin::filecheck::parsesize(shift)}; if ($@) { - return IkiWiki::FailReason->new("unable to parse minsize (or number too large)"); + return IkiWiki::ErrorReason->new("unable to parse minsize (or number too large)"); } my %params=@_; my $file=exists $params{file} ? $params{file} : $IkiWiki::pagesources{$page}; if (! defined $file) { - return IkiWiki::FailReason->new("no file specified"); + return IkiWiki::ErrorReason->new("no file specified"); } if (-s $file < $minsize) { @@ -116,14 +116,14 @@ sub match_mimetype ($$;@) { my %params=@_; my $file=exists $params{file} ? $params{file} : $IkiWiki::pagesources{$page}; if (! defined $file) { - return IkiWiki::FailReason->new("no file specified"); + return IkiWiki::ErrorReason->new("no file specified"); } # Use ::magic to get the mime type, the idea is to only trust # data obtained by examining the actual file contents. eval q{use File::MimeInfo::Magic}; if ($@) { - return IkiWiki::FailReason->new("failed to load File::MimeInfo::Magic ($@); cannot check MIME type"); + return IkiWiki::ErrorReason->new("failed to load File::MimeInfo::Magic ($@); cannot check MIME type"); } my $mimetype=File::MimeInfo::Magic::magic($file); if (! defined $mimetype) { @@ -149,12 +149,12 @@ sub match_virusfree ($$;@) { my %params=@_; my $file=exists $params{file} ? $params{file} : $IkiWiki::pagesources{$page}; if (! defined $file) { - return IkiWiki::FailReason->new("no file specified"); + return IkiWiki::ErrorReason->new("no file specified"); } if (! exists $IkiWiki::config{virus_checker} || ! length $IkiWiki::config{virus_checker}) { - return IkiWiki::FailReason->new("no virus_checker configured"); + return IkiWiki::ErrorReason->new("no virus_checker configured"); } # The file needs to be fed into the virus checker on stdin, @@ -162,7 +162,7 @@ sub match_virusfree ($$;@) { # used, clamd would fail to read it. eval q{use IPC::Open2}; error($@) if $@; - open (IN, "<", $file) || return IkiWiki::FailReason->new("failed to read file"); + open (IN, "<", $file) || return IkiWiki::ErrorReason->new("failed to read file"); binmode(IN); my $sigpipe=0; $SIG{PIPE} = sub { $sigpipe=1 }; diff --git a/IkiWiki/Plugin/inline.pm b/IkiWiki/Plugin/inline.pm index 9d7d4b0fd..551c38a65 100644 --- a/IkiWiki/Plugin/inline.pm +++ b/IkiWiki/Plugin/inline.pm @@ -184,13 +184,20 @@ sub preprocess_inline (@) { } my @list; + my $lastmatch; foreach my $page (keys %pagesources) { next if $page eq $params{page}; - if (pagespec_match($page, $params{pages}, location => $params{page})) { + $lastmatch=pagespec_match($page, $params{pages}, location => $params{page}); + if ($lastmatch) { push @list, $page; } } + if (! @list && defined $lastmatch && + $lastmatch->isa("IkiWiki::ErrorReason")) { + error(sprintf(gettext("cannot match pages: %s"), $lastmatch)); + } + if (exists $params{sort} && $params{sort} eq 'title') { @list=sort { pagetitle(basename($a)) cmp pagetitle(basename($b)) } @list; } diff --git a/debian/changelog b/debian/changelog index fbfed0007..f8378f098 100644 --- a/debian/changelog +++ b/debian/changelog @@ -8,6 +8,11 @@ ikiwiki (3.11) UNRELEASED; urgency=low Closes: #520015 * websetup: If setup fails, restore old setup file. * relativedate: Deal with clock skew. + * Add IkiWiki::ErrorReason objects, and modify pagespecs to return + them in cases where they fail to match due to a configuration or syntax + error. + * inline: Display a handy error message if the inline cannot display any + pages due to such an error. -- Joey Hess Tue, 21 Apr 2009 21:41:38 -0400 diff --git a/doc/plugins/write.mdwn b/doc/plugins/write.mdwn index 11ed312ae..23df01ca7 100644 --- a/doc/plugins/write.mdwn +++ b/doc/plugins/write.mdwn @@ -890,9 +890,12 @@ It's also possible to write plugins that add new functions to IkiWiki::PageSpec package, that is named `match_foo`, where "foo()" is how it will be accessed in a [[ikiwiki/PageSpec]]. The function will be passed two parameters: The name of the page being matched, and the thing to match -against. It may also be passed additional, named parameters. It should return -a IkiWiki::SuccessReason object if the match succeeds, or an -IkiWiki::FailReason object if the match fails. +against. It may also be passed additional, named parameters. + +It should return a IkiWiki::SuccessReason object if the match succeeds, or +an IkiWiki::FailReason object if the match fails. If the match cannot be +attempted at all, for any page, it can instead return an +IkiWiki::ErrorReason object explaining why. ### Setup plugins diff --git a/po/bg.po b/po/bg.po index ce963f994..f2207601f 100644 --- a/po/bg.po +++ b/po/bg.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ikiwiki-bg\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-04-04 14:59-0400\n" +"POT-Creation-Date: 2009-04-23 14:02-0400\n" "PO-Revision-Date: 2007-01-12 01:19+0200\n" "Last-Translator: Damyan Ivanov \n" "Language-Team: Bulgarian \n" @@ -181,14 +181,14 @@ msgstr "" msgid "automatic index generation" msgstr "" -#: ../IkiWiki/Plugin/blogspam.pm:105 +#: ../IkiWiki/Plugin/blogspam.pm:108 msgid "" "Sorry, but that looks like spam to blogspam: " msgstr "" #: ../IkiWiki/Plugin/brokenlinks.pm:33 ../IkiWiki/Plugin/editpage.pm:233 -#: ../IkiWiki/Plugin/inline.pm:361 ../IkiWiki/Plugin/opendiscussion.pm:26 +#: ../IkiWiki/Plugin/inline.pm:368 ../IkiWiki/Plugin/opendiscussion.pm:26 #: ../IkiWiki/Plugin/orphans.pm:37 ../IkiWiki/Render.pm:79 #: ../IkiWiki/Render.pm:149 msgid "discussion" @@ -419,29 +419,34 @@ msgstr "шаблонът „%s” не е намерен" msgid "missing pages parameter" msgstr "липсващ параметър „id” на шаблона" -#: ../IkiWiki/Plugin/inline.pm:200 +#: ../IkiWiki/Plugin/inline.pm:198 +#, fuzzy, perl-format +msgid "cannot match pages: %s" +msgstr "грешка при четене на „%s”: %s" + +#: ../IkiWiki/Plugin/inline.pm:207 msgid "Sort::Naturally needed for title_natural sort" msgstr "" -#: ../IkiWiki/Plugin/inline.pm:211 +#: ../IkiWiki/Plugin/inline.pm:218 #, perl-format msgid "unknown sort type %s" msgstr "непознат вид сортиране „%s”" -#: ../IkiWiki/Plugin/inline.pm:314 +#: ../IkiWiki/Plugin/inline.pm:321 msgid "Add a new post titled:" msgstr "" -#: ../IkiWiki/Plugin/inline.pm:334 +#: ../IkiWiki/Plugin/inline.pm:341 #, perl-format msgid "nonexistant template %s" msgstr "" -#: ../IkiWiki/Plugin/inline.pm:369 ../IkiWiki/Render.pm:83 +#: ../IkiWiki/Plugin/inline.pm:376 ../IkiWiki/Render.pm:83 msgid "Discussion" msgstr "Дискусия" -#: ../IkiWiki/Plugin/inline.pm:600 +#: ../IkiWiki/Plugin/inline.pm:607 msgid "RPC::XML::Client not found, not pinging" msgstr "модулът „RPC::XML::Client” не е намерен; източникът не е проверен" @@ -903,9 +908,9 @@ msgid "" "to rebuild the wiki." msgstr "" -#: ../IkiWiki/Plugin/websetup.pm:433 +#: ../IkiWiki/Plugin/websetup.pm:436 #, perl-format -msgid "

Error: %s exited nonzero (%s)" +msgid "Error: %s exited nonzero (%s). Discarding setup changes." msgstr "" #: ../IkiWiki/Receive.pm:35 @@ -986,12 +991,12 @@ msgstr "грешка при четене на „%s”: %s" msgid "you must enter a wikiname (that contains alphanumerics)" msgstr "" -#: ../IkiWiki/Setup/Automator.pm:68 +#: ../IkiWiki/Setup/Automator.pm:71 #, perl-format msgid "unsupported revision control system %s" msgstr "" -#: ../IkiWiki/Setup/Automator.pm:94 +#: ../IkiWiki/Setup/Automator.pm:97 msgid "failed to set up the repository with ikiwiki-makerepo" msgstr "" diff --git a/po/cs.po b/po/cs.po index c66004dcb..29df2126a 100644 --- a/po/cs.po +++ b/po/cs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ikiwiki\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-04-04 14:59-0400\n" +"POT-Creation-Date: 2009-04-23 14:02-0400\n" "PO-Revision-Date: 2007-05-09 21:21+0200\n" "Last-Translator: Miroslav Kure \n" "Language-Team: Czech \n" @@ -178,14 +178,14 @@ msgstr "" msgid "automatic index generation" msgstr "" -#: ../IkiWiki/Plugin/blogspam.pm:105 +#: ../IkiWiki/Plugin/blogspam.pm:108 msgid "" "Sorry, but that looks like spam to blogspam: " msgstr "" #: ../IkiWiki/Plugin/brokenlinks.pm:33 ../IkiWiki/Plugin/editpage.pm:233 -#: ../IkiWiki/Plugin/inline.pm:361 ../IkiWiki/Plugin/opendiscussion.pm:26 +#: ../IkiWiki/Plugin/inline.pm:368 ../IkiWiki/Plugin/opendiscussion.pm:26 #: ../IkiWiki/Plugin/orphans.pm:37 ../IkiWiki/Render.pm:79 #: ../IkiWiki/Render.pm:149 msgid "discussion" @@ -413,29 +413,34 @@ msgstr "zdroj nebyl nalezen" msgid "missing pages parameter" msgstr "chybí parametr %s" -#: ../IkiWiki/Plugin/inline.pm:200 +#: ../IkiWiki/Plugin/inline.pm:198 +#, fuzzy, perl-format +msgid "cannot match pages: %s" +msgstr "nemohu číst %s: %s" + +#: ../IkiWiki/Plugin/inline.pm:207 msgid "Sort::Naturally needed for title_natural sort" msgstr "" -#: ../IkiWiki/Plugin/inline.pm:211 +#: ../IkiWiki/Plugin/inline.pm:218 #, perl-format msgid "unknown sort type %s" msgstr "neznámý typ řazení %s" -#: ../IkiWiki/Plugin/inline.pm:314 +#: ../IkiWiki/Plugin/inline.pm:321 msgid "Add a new post titled:" msgstr "Přidat nový příspěvek nazvaný:" -#: ../IkiWiki/Plugin/inline.pm:334 +#: ../IkiWiki/Plugin/inline.pm:341 #, perl-format msgid "nonexistant template %s" msgstr "neexistující šablona %s" -#: ../IkiWiki/Plugin/inline.pm:369 ../IkiWiki/Render.pm:83 +#: ../IkiWiki/Plugin/inline.pm:376 ../IkiWiki/Render.pm:83 msgid "Discussion" msgstr "Diskuse" -#: ../IkiWiki/Plugin/inline.pm:600 +#: ../IkiWiki/Plugin/inline.pm:607 msgid "RPC::XML::Client not found, not pinging" msgstr "RPC::XML::Client nebyl nalezen, nepinkám" @@ -885,9 +890,9 @@ msgid "" "to rebuild the wiki." msgstr "" -#: ../IkiWiki/Plugin/websetup.pm:433 +#: ../IkiWiki/Plugin/websetup.pm:436 #, perl-format -msgid "

Error: %s exited nonzero (%s)" +msgid "Error: %s exited nonzero (%s). Discarding setup changes." msgstr "" #: ../IkiWiki/Receive.pm:35 @@ -968,12 +973,12 @@ msgstr "nemohu číst %s: %s" msgid "you must enter a wikiname (that contains alphanumerics)" msgstr "" -#: ../IkiWiki/Setup/Automator.pm:68 +#: ../IkiWiki/Setup/Automator.pm:71 #, perl-format msgid "unsupported revision control system %s" msgstr "" -#: ../IkiWiki/Setup/Automator.pm:94 +#: ../IkiWiki/Setup/Automator.pm:97 msgid "failed to set up the repository with ikiwiki-makerepo" msgstr "" diff --git a/po/da.po b/po/da.po index 5f582312d..b49ac5cbd 100644 --- a/po/da.po +++ b/po/da.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ikiwiki\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-04-04 14:59-0400\n" +"POT-Creation-Date: 2009-04-23 14:02-0400\n" "PO-Revision-Date: 2008-10-22 19:13+0100\n" "Last-Translator: Jonas Smedegaard \n" "Language-Team: None\n" @@ -180,14 +180,14 @@ msgstr "vedhæftningsoplægning" msgid "automatic index generation" msgstr "automatisk indeks-dannelse" -#: ../IkiWiki/Plugin/blogspam.pm:105 +#: ../IkiWiki/Plugin/blogspam.pm:108 msgid "" "Sorry, but that looks like spam to blogspam: " msgstr "" #: ../IkiWiki/Plugin/brokenlinks.pm:33 ../IkiWiki/Plugin/editpage.pm:233 -#: ../IkiWiki/Plugin/inline.pm:361 ../IkiWiki/Plugin/opendiscussion.pm:26 +#: ../IkiWiki/Plugin/inline.pm:368 ../IkiWiki/Plugin/opendiscussion.pm:26 #: ../IkiWiki/Plugin/orphans.pm:37 ../IkiWiki/Render.pm:79 #: ../IkiWiki/Render.pm:149 msgid "discussion" @@ -410,29 +410,34 @@ msgstr "sideredigering er ikke tilladt" msgid "missing pages parameter" msgstr "mangler pages-parametren" -#: ../IkiWiki/Plugin/inline.pm:200 +#: ../IkiWiki/Plugin/inline.pm:198 +#, fuzzy, perl-format +msgid "cannot match pages: %s" +msgstr "kan ikke læse %s: %s" + +#: ../IkiWiki/Plugin/inline.pm:207 msgid "Sort::Naturally needed for title_natural sort" msgstr "" -#: ../IkiWiki/Plugin/inline.pm:211 +#: ../IkiWiki/Plugin/inline.pm:218 #, perl-format msgid "unknown sort type %s" msgstr "ukendt sorteringsform %s" -#: ../IkiWiki/Plugin/inline.pm:314 +#: ../IkiWiki/Plugin/inline.pm:321 msgid "Add a new post titled:" msgstr "Tilføj nyt indlæg med følgende titel:" -#: ../IkiWiki/Plugin/inline.pm:334 +#: ../IkiWiki/Plugin/inline.pm:341 #, perl-format msgid "nonexistant template %s" msgstr "ikke-eksisterende skabelon: %s" -#: ../IkiWiki/Plugin/inline.pm:369 ../IkiWiki/Render.pm:83 +#: ../IkiWiki/Plugin/inline.pm:376 ../IkiWiki/Render.pm:83 msgid "Discussion" msgstr "Diskussion" -#: ../IkiWiki/Plugin/inline.pm:600 +#: ../IkiWiki/Plugin/inline.pm:607 msgid "RPC::XML::Client not found, not pinging" msgstr "RPC::XML::Client ikke fundet, pinger ikke" @@ -881,10 +886,10 @@ msgstr "" "For at opsætningsændringerne vist nedenfor træder fuldt ud i kraft, skal du " "muligvis genopbygge wikien." -#: ../IkiWiki/Plugin/websetup.pm:433 +#: ../IkiWiki/Plugin/websetup.pm:436 #, perl-format -msgid "

Error: %s exited nonzero (%s)" -msgstr "

Fejl: %s sluttede med fejl (%s)" +msgid "Error: %s exited nonzero (%s). Discarding setup changes." +msgstr "" #: ../IkiWiki/Receive.pm:35 #, perl-format @@ -966,12 +971,12 @@ msgstr "kan ikke læse %s: %s" msgid "you must enter a wikiname (that contains alphanumerics)" msgstr "du skal angive et wikinavn (som indeholder alfanumeriske tegn)" -#: ../IkiWiki/Setup/Automator.pm:68 +#: ../IkiWiki/Setup/Automator.pm:71 #, perl-format msgid "unsupported revision control system %s" msgstr "revisionskontrolsystem %s ikke understøttet" -#: ../IkiWiki/Setup/Automator.pm:94 +#: ../IkiWiki/Setup/Automator.pm:97 msgid "failed to set up the repository with ikiwiki-makerepo" msgstr "opsætning af depotet med ikiwiki-makerepo mislykkedes" @@ -1068,6 +1073,9 @@ msgstr "Hvilken wiki bruger (eller openid) skal være administrator?" msgid "What is the domain name of the web server?" msgstr "Hvad er domænenavnet på webserveren?" +#~ msgid "

Error: %s exited nonzero (%s)" +#~ msgstr "

Fejl: %s sluttede med fejl (%s)" + #~ msgid "failed to write %s: %s" #~ msgstr "skrivning ad %s mislykkedes: %s" diff --git a/po/de.po b/po/de.po index 748265924..3a05f46a8 100644 --- a/po/de.po +++ b/po/de.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: ikiwiki 3.06\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-04-04 14:59-0400\n" +"POT-Creation-Date: 2009-04-23 14:02-0400\n" "PO-Revision-Date: 2009-03-02 15:39+0100\n" "Last-Translator: Kai Wasserbäch \n" "Language-Team: German \n" @@ -178,7 +178,7 @@ msgstr "Anhang hochladen" msgid "automatic index generation" msgstr "automatische Index-Erstellung" -#: ../IkiWiki/Plugin/blogspam.pm:105 +#: ../IkiWiki/Plugin/blogspam.pm:108 msgid "" "Sorry, but that looks like spam to blogspam: " @@ -187,7 +187,7 @@ msgstr "" "als Spam ein: " #: ../IkiWiki/Plugin/brokenlinks.pm:33 ../IkiWiki/Plugin/editpage.pm:233 -#: ../IkiWiki/Plugin/inline.pm:361 ../IkiWiki/Plugin/opendiscussion.pm:26 +#: ../IkiWiki/Plugin/inline.pm:368 ../IkiWiki/Plugin/opendiscussion.pm:26 #: ../IkiWiki/Plugin/orphans.pm:37 ../IkiWiki/Render.pm:79 #: ../IkiWiki/Render.pm:149 msgid "discussion" @@ -415,29 +415,34 @@ msgstr "Seitenbearbeitungen sind nicht erlaubt" msgid "missing pages parameter" msgstr "Fehlender Seitenparameter" -#: ../IkiWiki/Plugin/inline.pm:200 +#: ../IkiWiki/Plugin/inline.pm:198 +#, fuzzy, perl-format +msgid "cannot match pages: %s" +msgstr "kann %s nicht lesen: %s" + +#: ../IkiWiki/Plugin/inline.pm:207 msgid "Sort::Naturally needed for title_natural sort" msgstr "" -#: ../IkiWiki/Plugin/inline.pm:211 +#: ../IkiWiki/Plugin/inline.pm:218 #, perl-format msgid "unknown sort type %s" msgstr "Unbekannter Sortierungstyp %s" -#: ../IkiWiki/Plugin/inline.pm:314 +#: ../IkiWiki/Plugin/inline.pm:321 msgid "Add a new post titled:" msgstr "Füge einen neuen Beitrag hinzu. Titel:" -#: ../IkiWiki/Plugin/inline.pm:334 +#: ../IkiWiki/Plugin/inline.pm:341 #, perl-format msgid "nonexistant template %s" msgstr "nicht-vorhandene Vorlage %s" -#: ../IkiWiki/Plugin/inline.pm:369 ../IkiWiki/Render.pm:83 +#: ../IkiWiki/Plugin/inline.pm:376 ../IkiWiki/Render.pm:83 msgid "Discussion" msgstr "Diskussion" -#: ../IkiWiki/Plugin/inline.pm:600 +#: ../IkiWiki/Plugin/inline.pm:607 msgid "RPC::XML::Client not found, not pinging" msgstr "RPC::XML::Client nicht gefunden, führe Ping nicht aus" @@ -891,11 +896,10 @@ msgstr "" "Damit die unten aufgeführten Konfigurationsänderungen aktiviert werden, kann " "es erforderlich sein, das Wiki neu zu erzeugen." -#: ../IkiWiki/Plugin/websetup.pm:433 +#: ../IkiWiki/Plugin/websetup.pm:436 #, perl-format -msgid "

Error: %s exited nonzero (%s)" +msgid "Error: %s exited nonzero (%s). Discarding setup changes." msgstr "" -"

Fehler: %s beendete sich mit einem Wert ungleich Null (%s)" #: ../IkiWiki/Receive.pm:35 #, perl-format @@ -978,12 +982,12 @@ msgid "you must enter a wikiname (that contains alphanumerics)" msgstr "" "Sie müssen einen Wiki-Namen eingeben (der alphanumerische Zeichen enthält)" -#: ../IkiWiki/Setup/Automator.pm:68 +#: ../IkiWiki/Setup/Automator.pm:71 #, perl-format msgid "unsupported revision control system %s" msgstr "Nicht unterstütztes Versionskontrollsystem %s" -#: ../IkiWiki/Setup/Automator.pm:94 +#: ../IkiWiki/Setup/Automator.pm:97 msgid "failed to set up the repository with ikiwiki-makerepo" msgstr "Erstellen des Depots mit ikiwiki-makerepo ist fehlgeschlagen" @@ -1082,3 +1086,8 @@ msgstr "" #: ../auto.setup:23 msgid "What is the domain name of the web server?" msgstr "Wie lautet der Domainname des Webservers?" + +#~ msgid "

Error: %s exited nonzero (%s)" +#~ msgstr "" +#~ "

Fehler: %s beendete sich mit einem Wert ungleich Null " +#~ "(%s)" diff --git a/po/es.po b/po/es.po index bf8f82899..682eff0c9 100644 --- a/po/es.po +++ b/po/es.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: es\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-04-04 14:59-0400\n" +"POT-Creation-Date: 2009-04-23 14:02-0400\n" "PO-Revision-Date: 2009-04-07 08:54+0200\n" "Last-Translator: Víctor Moral \n" "Language-Team: spanish \n" @@ -34,7 +34,8 @@ msgstr "" #: ../IkiWiki/CGI.pm:149 msgid "login failed, perhaps you need to turn on cookies?" -msgstr "registro fallido, ¿ tal vez necesita activar las cookies en el navegador ?" +msgstr "" +"registro fallido, ¿ tal vez necesita activar las cookies en el navegador ?" #: ../IkiWiki/CGI.pm:168 ../IkiWiki/CGI.pm:299 msgid "Your login session has expired." @@ -70,7 +71,8 @@ msgstr "Contenido añadido activado vía web." #: ../IkiWiki/Plugin/aggregate.pm:93 msgid "Nothing to do right now, all feeds are up-to-date!" -msgstr "¡ No hay nada que hacer, todas las fuentes de noticias están actualizadas !" +msgstr "" +"¡ No hay nada que hacer, todas las fuentes de noticias están actualizadas !" #: ../IkiWiki/Plugin/aggregate.pm:220 #, perl-format @@ -183,7 +185,7 @@ msgstr "enviado el adjunto" msgid "automatic index generation" msgstr "creación de índice automática" -#: ../IkiWiki/Plugin/blogspam.pm:105 +#: ../IkiWiki/Plugin/blogspam.pm:108 msgid "" "Sorry, but that looks like spam to blogspam: " @@ -192,7 +194,7 @@ msgstr "" "dice que el texto puede ser spam." #: ../IkiWiki/Plugin/brokenlinks.pm:33 ../IkiWiki/Plugin/editpage.pm:233 -#: ../IkiWiki/Plugin/inline.pm:361 ../IkiWiki/Plugin/opendiscussion.pm:26 +#: ../IkiWiki/Plugin/inline.pm:368 ../IkiWiki/Plugin/opendiscussion.pm:26 #: ../IkiWiki/Plugin/orphans.pm:37 ../IkiWiki/Render.pm:79 #: ../IkiWiki/Render.pm:149 msgid "discussion" @@ -359,7 +361,8 @@ msgstr "" #: ../IkiWiki/Plugin/google.pm:31 msgid "Failed to parse url, cannot determine domain name" -msgstr "Error en el análisis del URL, no puedo determinar el nombre del dominio" +msgstr "" +"Error en el análisis del URL, no puedo determinar el nombre del dominio" #: ../IkiWiki/Plugin/goto.pm:49 msgid "missing page" @@ -417,29 +420,36 @@ msgstr "no está permitida la modificación de páginas" msgid "missing pages parameter" msgstr "falta el parámetro pages" -#: ../IkiWiki/Plugin/inline.pm:200 +#: ../IkiWiki/Plugin/inline.pm:198 +#, fuzzy, perl-format +msgid "cannot match pages: %s" +msgstr "no puedo leer el archivo %s: %s" + +#: ../IkiWiki/Plugin/inline.pm:207 msgid "Sort::Naturally needed for title_natural sort" -msgstr "Se necesita el módulo Sort::Naturally para el tipo de ordenación title_natural" +msgstr "" +"Se necesita el módulo Sort::Naturally para el tipo de ordenación " +"title_natural" -#: ../IkiWiki/Plugin/inline.pm:211 +#: ../IkiWiki/Plugin/inline.pm:218 #, perl-format msgid "unknown sort type %s" msgstr "no conozco este tipo de ordenación %s" -#: ../IkiWiki/Plugin/inline.pm:314 +#: ../IkiWiki/Plugin/inline.pm:321 msgid "Add a new post titled:" msgstr "Añadir una entrada nueva titulada:" -#: ../IkiWiki/Plugin/inline.pm:334 +#: ../IkiWiki/Plugin/inline.pm:341 #, perl-format msgid "nonexistant template %s" msgstr "la plantilla %s no existe " -#: ../IkiWiki/Plugin/inline.pm:369 ../IkiWiki/Render.pm:83 +#: ../IkiWiki/Plugin/inline.pm:376 ../IkiWiki/Render.pm:83 msgid "Discussion" msgstr "Comentarios" -#: ../IkiWiki/Plugin/inline.pm:600 +#: ../IkiWiki/Plugin/inline.pm:607 msgid "RPC::XML::Client not found, not pinging" msgstr "No he encontrado el componente RPC::XML::Client, no envío señal alguna" @@ -454,7 +464,8 @@ msgstr "La página %s está bloqueada y no puede modificarse" #: ../IkiWiki/Plugin/mdwn.pm:44 msgid "multimarkdown is enabled, but Text::MultiMarkdown is not installed" -msgstr "el modo multimarkdown está activo, pero no está instalado Text::MultiMarkdown" +msgstr "" +"el modo multimarkdown está activo, pero no está instalado Text::MultiMarkdown" #: ../IkiWiki/Plugin/mdwn.pm:67 #, perl-format @@ -876,7 +887,8 @@ msgid "plugins" msgstr "complementos" #: ../IkiWiki/Plugin/websetup.pm:395 -msgid "The configuration changes shown below require a wiki rebuild to take effect." +msgid "" +"The configuration changes shown below require a wiki rebuild to take effect." msgstr "" "Los cambios en la configuración que se muestran más abajo precisan una " "reconstrucción del wiki para tener efecto." @@ -889,10 +901,10 @@ msgstr "" "Para que los cambios en la configuración mostrados más abajo tengan efecto, " "es posible que necesite reconstruir el wiki." -#: ../IkiWiki/Plugin/websetup.pm:433 +#: ../IkiWiki/Plugin/websetup.pm:436 #, perl-format -msgid "

Error: %s exited nonzero (%s)" -msgstr "

Error: %s finaliza con código distinto de cero (%s)" +msgid "Error: %s exited nonzero (%s). Discarding setup changes." +msgstr "" #: ../IkiWiki/Receive.pm:35 #, perl-format @@ -976,12 +988,12 @@ msgstr "no puedo leer el archivo %s: %s" msgid "you must enter a wikiname (that contains alphanumerics)" msgstr "debe escribir un nombre wiki (que contiene caracteres alfanuméricos)" -#: ../IkiWiki/Setup/Automator.pm:68 +#: ../IkiWiki/Setup/Automator.pm:71 #, perl-format msgid "unsupported revision control system %s" msgstr "el sistema de control de versiones %s no está soportado" -#: ../IkiWiki/Setup/Automator.pm:94 +#: ../IkiWiki/Setup/Automator.pm:97 msgid "failed to set up the repository with ikiwiki-makerepo" msgstr "no he podido crear un repositorio con el programa ikiwiki-makerepo" @@ -992,7 +1004,8 @@ msgstr "el programa %s no parece ser ejecutable" #: ../IkiWiki/Wrapper.pm:20 msgid "cannot create a wrapper that uses a setup file" -msgstr "no puedo crear un programa envoltorio que utiliza un archivo de configuración" +msgstr "" +"no puedo crear un programa envoltorio que utiliza un archivo de configuración" #: ../IkiWiki/Wrapper.pm:24 msgid "wrapper filename not specified" @@ -1082,3 +1095,6 @@ msgstr "" msgid "What is the domain name of the web server?" msgstr "¿ Cuál es el dominio para el servidor web ?" +#~ msgid "

Error: %s exited nonzero (%s)" +#~ msgstr "" +#~ "

Error: %s finaliza con código distinto de cero (%s)" diff --git a/po/fr.po b/po/fr.po index 78b3bbe0f..8845f5068 100644 --- a/po/fr.po +++ b/po/fr.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: ikiwiki 3.04\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-04-04 14:59-0400\n" +"POT-Creation-Date: 2009-04-23 14:02-0400\n" "PO-Revision-Date: 2009-03-15 16:10+0100\n" "Last-Translator: Philippe Batailler \n" "Language-Team: French \n" @@ -180,7 +180,7 @@ msgstr "Envoi de la pièce jointe" msgid "automatic index generation" msgstr "Génération de l'index automatique" -#: ../IkiWiki/Plugin/blogspam.pm:105 +#: ../IkiWiki/Plugin/blogspam.pm:108 msgid "" "Sorry, but that looks like spam to blogspam: " @@ -189,7 +189,7 @@ msgstr "" "blogspam.net/\">blogspam: " #: ../IkiWiki/Plugin/brokenlinks.pm:33 ../IkiWiki/Plugin/editpage.pm:233 -#: ../IkiWiki/Plugin/inline.pm:361 ../IkiWiki/Plugin/opendiscussion.pm:26 +#: ../IkiWiki/Plugin/inline.pm:368 ../IkiWiki/Plugin/opendiscussion.pm:26 #: ../IkiWiki/Plugin/orphans.pm:37 ../IkiWiki/Render.pm:79 #: ../IkiWiki/Render.pm:149 msgid "discussion" @@ -412,29 +412,34 @@ msgstr "Modification de page interdite" msgid "missing pages parameter" msgstr "Paramètre « pages » manquant" -#: ../IkiWiki/Plugin/inline.pm:200 +#: ../IkiWiki/Plugin/inline.pm:198 +#, fuzzy, perl-format +msgid "cannot match pages: %s" +msgstr "Lecture impossible de %s : %s" + +#: ../IkiWiki/Plugin/inline.pm:207 msgid "Sort::Naturally needed for title_natural sort" msgstr "" -#: ../IkiWiki/Plugin/inline.pm:211 +#: ../IkiWiki/Plugin/inline.pm:218 #, perl-format msgid "unknown sort type %s" msgstr "Type de tri %s inconnu" -#: ../IkiWiki/Plugin/inline.pm:314 +#: ../IkiWiki/Plugin/inline.pm:321 msgid "Add a new post titled:" msgstr "Ajouter un nouvel article dont le titre est :" -#: ../IkiWiki/Plugin/inline.pm:334 +#: ../IkiWiki/Plugin/inline.pm:341 #, perl-format msgid "nonexistant template %s" msgstr "Le modèle de page %s n'existe pas" -#: ../IkiWiki/Plugin/inline.pm:369 ../IkiWiki/Render.pm:83 +#: ../IkiWiki/Plugin/inline.pm:376 ../IkiWiki/Render.pm:83 msgid "Discussion" msgstr "Discussion" -#: ../IkiWiki/Plugin/inline.pm:600 +#: ../IkiWiki/Plugin/inline.pm:607 msgid "RPC::XML::Client not found, not pinging" msgstr "RPC::XML::Client introuvable, pas de réponse au ping" @@ -886,11 +891,10 @@ msgstr "" "Pour que les changements de configuration ci-dessous prennent effet vous " "devez recompiler le wiki" -#: ../IkiWiki/Plugin/websetup.pm:433 +#: ../IkiWiki/Plugin/websetup.pm:436 #, perl-format -msgid "

Error: %s exited nonzero (%s)" +msgid "Error: %s exited nonzero (%s). Discarding setup changes." msgstr "" -"

Erreur : %s s'est terminé, valeur de sortie nonzero (%s)" #: ../IkiWiki/Receive.pm:35 #, perl-format @@ -975,12 +979,12 @@ msgstr "" "Vous devez spécifier un nom de wiki (contenant des caractères " "alphanumériques)" -#: ../IkiWiki/Setup/Automator.pm:68 +#: ../IkiWiki/Setup/Automator.pm:71 #, perl-format msgid "unsupported revision control system %s" msgstr "Système de contrôle de version non reconnu : %s" -#: ../IkiWiki/Setup/Automator.pm:94 +#: ../IkiWiki/Setup/Automator.pm:97 msgid "failed to set up the repository with ikiwiki-makerepo" msgstr "Échec lors de la création du dépôt avec ikiwiki-makerepo" @@ -1076,3 +1080,8 @@ msgstr "Identifiant de l'administrateur (utilisateur du wiki ou openid) :" #: ../auto.setup:23 msgid "What is the domain name of the web server?" msgstr "Nom de domaine du serveur HTTP :" + +#~ msgid "

Error: %s exited nonzero (%s)" +#~ msgstr "" +#~ "

Erreur : %s s'est terminé, valeur de sortie nonzero (%" +#~ "s)" diff --git a/po/gu.po b/po/gu.po index dd9c7c5a1..a1bda2a15 100644 --- a/po/gu.po +++ b/po/gu.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ikiwiki-gu\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-04-04 14:59-0400\n" +"POT-Creation-Date: 2009-04-23 14:02-0400\n" "PO-Revision-Date: 2007-01-11 16:05+0530\n" "Last-Translator: Kartik Mistry \n" "Language-Team: Gujarati \n" @@ -179,14 +179,14 @@ msgstr "" msgid "automatic index generation" msgstr "" -#: ../IkiWiki/Plugin/blogspam.pm:105 +#: ../IkiWiki/Plugin/blogspam.pm:108 msgid "" "Sorry, but that looks like spam to blogspam: " msgstr "" #: ../IkiWiki/Plugin/brokenlinks.pm:33 ../IkiWiki/Plugin/editpage.pm:233 -#: ../IkiWiki/Plugin/inline.pm:361 ../IkiWiki/Plugin/opendiscussion.pm:26 +#: ../IkiWiki/Plugin/inline.pm:368 ../IkiWiki/Plugin/opendiscussion.pm:26 #: ../IkiWiki/Plugin/orphans.pm:37 ../IkiWiki/Render.pm:79 #: ../IkiWiki/Render.pm:149 msgid "discussion" @@ -414,29 +414,34 @@ msgstr "ફીડ મળ્યું નહી" msgid "missing pages parameter" msgstr "ખોવાયેલ %s વિકલ્પ" -#: ../IkiWiki/Plugin/inline.pm:200 +#: ../IkiWiki/Plugin/inline.pm:198 +#, fuzzy, perl-format +msgid "cannot match pages: %s" +msgstr "વાંચી શકાતી નથી %s: %s" + +#: ../IkiWiki/Plugin/inline.pm:207 msgid "Sort::Naturally needed for title_natural sort" msgstr "" -#: ../IkiWiki/Plugin/inline.pm:211 +#: ../IkiWiki/Plugin/inline.pm:218 #, perl-format msgid "unknown sort type %s" msgstr "અજાણ્યો ગોઠવણી પ્રકાર %s" -#: ../IkiWiki/Plugin/inline.pm:314 +#: ../IkiWiki/Plugin/inline.pm:321 msgid "Add a new post titled:" msgstr "આ શિર્ષકથી નવું પોસ્ટ ઉમેરો:" -#: ../IkiWiki/Plugin/inline.pm:334 +#: ../IkiWiki/Plugin/inline.pm:341 #, perl-format msgid "nonexistant template %s" msgstr "અસ્તિત્વમાં ન હોય તેવું ટેમ્પલેટ %s" -#: ../IkiWiki/Plugin/inline.pm:369 ../IkiWiki/Render.pm:83 +#: ../IkiWiki/Plugin/inline.pm:376 ../IkiWiki/Render.pm:83 msgid "Discussion" msgstr "ચર્ચા" -#: ../IkiWiki/Plugin/inline.pm:600 +#: ../IkiWiki/Plugin/inline.pm:607 msgid "RPC::XML::Client not found, not pinging" msgstr "RPC::XML::Client મળ્યું નહી, પિંગ કરવામાં આવતું નથી" @@ -885,9 +890,9 @@ msgid "" "to rebuild the wiki." msgstr "" -#: ../IkiWiki/Plugin/websetup.pm:433 +#: ../IkiWiki/Plugin/websetup.pm:436 #, perl-format -msgid "

Error: %s exited nonzero (%s)" +msgid "Error: %s exited nonzero (%s). Discarding setup changes." msgstr "" #: ../IkiWiki/Receive.pm:35 @@ -968,12 +973,12 @@ msgstr "વાંચી શકાતી નથી %s: %s" msgid "you must enter a wikiname (that contains alphanumerics)" msgstr "" -#: ../IkiWiki/Setup/Automator.pm:68 +#: ../IkiWiki/Setup/Automator.pm:71 #, perl-format msgid "unsupported revision control system %s" msgstr "" -#: ../IkiWiki/Setup/Automator.pm:94 +#: ../IkiWiki/Setup/Automator.pm:97 msgid "failed to set up the repository with ikiwiki-makerepo" msgstr "" diff --git a/po/ikiwiki.pot b/po/ikiwiki.pot index d05a4a693..6c9b16289 100644 --- a/po/ikiwiki.pot +++ b/po/ikiwiki.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-04-04 18:50-0400\n" +"POT-Creation-Date: 2009-04-23 14:02-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -177,14 +177,14 @@ msgstr "" msgid "automatic index generation" msgstr "" -#: ../IkiWiki/Plugin/blogspam.pm:105 +#: ../IkiWiki/Plugin/blogspam.pm:108 msgid "" "Sorry, but that looks like spam to blogspam: " msgstr "" #: ../IkiWiki/Plugin/brokenlinks.pm:33 ../IkiWiki/Plugin/editpage.pm:233 -#: ../IkiWiki/Plugin/inline.pm:361 ../IkiWiki/Plugin/opendiscussion.pm:26 +#: ../IkiWiki/Plugin/inline.pm:368 ../IkiWiki/Plugin/opendiscussion.pm:26 #: ../IkiWiki/Plugin/orphans.pm:37 ../IkiWiki/Render.pm:79 #: ../IkiWiki/Render.pm:149 msgid "discussion" @@ -405,29 +405,34 @@ msgstr "" msgid "missing pages parameter" msgstr "" -#: ../IkiWiki/Plugin/inline.pm:200 +#: ../IkiWiki/Plugin/inline.pm:198 +#, perl-format +msgid "cannot match pages: %s" +msgstr "" + +#: ../IkiWiki/Plugin/inline.pm:207 msgid "Sort::Naturally needed for title_natural sort" msgstr "" -#: ../IkiWiki/Plugin/inline.pm:211 +#: ../IkiWiki/Plugin/inline.pm:218 #, perl-format msgid "unknown sort type %s" msgstr "" -#: ../IkiWiki/Plugin/inline.pm:314 +#: ../IkiWiki/Plugin/inline.pm:321 msgid "Add a new post titled:" msgstr "" -#: ../IkiWiki/Plugin/inline.pm:334 +#: ../IkiWiki/Plugin/inline.pm:341 #, perl-format msgid "nonexistant template %s" msgstr "" -#: ../IkiWiki/Plugin/inline.pm:369 ../IkiWiki/Render.pm:83 +#: ../IkiWiki/Plugin/inline.pm:376 ../IkiWiki/Render.pm:83 msgid "Discussion" msgstr "" -#: ../IkiWiki/Plugin/inline.pm:600 +#: ../IkiWiki/Plugin/inline.pm:607 msgid "RPC::XML::Client not found, not pinging" msgstr "" @@ -868,9 +873,9 @@ msgid "" "to rebuild the wiki." msgstr "" -#: ../IkiWiki/Plugin/websetup.pm:433 +#: ../IkiWiki/Plugin/websetup.pm:436 #, perl-format -msgid "

Error: %s exited nonzero (%s)" +msgid "Error: %s exited nonzero (%s). Discarding setup changes." msgstr "" #: ../IkiWiki/Receive.pm:35 diff --git a/po/pl.po b/po/pl.po index 305d8bfc6..fc9313364 100644 --- a/po/pl.po +++ b/po/pl.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ikiwiki 1.51\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-04-04 14:59-0400\n" +"POT-Creation-Date: 2009-04-23 14:02-0400\n" "PO-Revision-Date: 2007-04-27 22:05+0200\n" "Last-Translator: Pawel Tecza \n" "Language-Team: Debian L10n Polish \n" @@ -183,14 +183,14 @@ msgstr "" msgid "automatic index generation" msgstr "" -#: ../IkiWiki/Plugin/blogspam.pm:105 +#: ../IkiWiki/Plugin/blogspam.pm:108 msgid "" "Sorry, but that looks like spam to blogspam: " msgstr "" #: ../IkiWiki/Plugin/brokenlinks.pm:33 ../IkiWiki/Plugin/editpage.pm:233 -#: ../IkiWiki/Plugin/inline.pm:361 ../IkiWiki/Plugin/opendiscussion.pm:26 +#: ../IkiWiki/Plugin/inline.pm:368 ../IkiWiki/Plugin/opendiscussion.pm:26 #: ../IkiWiki/Plugin/orphans.pm:37 ../IkiWiki/Render.pm:79 #: ../IkiWiki/Render.pm:149 msgid "discussion" @@ -421,29 +421,34 @@ msgstr "nieznaleziony kanał RSS" msgid "missing pages parameter" msgstr "brakujący parametr %s" -#: ../IkiWiki/Plugin/inline.pm:200 +#: ../IkiWiki/Plugin/inline.pm:198 +#, fuzzy, perl-format +msgid "cannot match pages: %s" +msgstr "awaria w trakcie odczytu %s: %s" + +#: ../IkiWiki/Plugin/inline.pm:207 msgid "Sort::Naturally needed for title_natural sort" msgstr "" -#: ../IkiWiki/Plugin/inline.pm:211 +#: ../IkiWiki/Plugin/inline.pm:218 #, perl-format msgid "unknown sort type %s" msgstr "nieznany sposób sortowania %s" -#: ../IkiWiki/Plugin/inline.pm:314 +#: ../IkiWiki/Plugin/inline.pm:321 msgid "Add a new post titled:" msgstr "Tytuł nowego wpisu" -#: ../IkiWiki/Plugin/inline.pm:334 +#: ../IkiWiki/Plugin/inline.pm:341 #, perl-format msgid "nonexistant template %s" msgstr "brakujący szablon %s" -#: ../IkiWiki/Plugin/inline.pm:369 ../IkiWiki/Render.pm:83 +#: ../IkiWiki/Plugin/inline.pm:376 ../IkiWiki/Render.pm:83 msgid "Discussion" msgstr "Dyskusja" -#: ../IkiWiki/Plugin/inline.pm:600 +#: ../IkiWiki/Plugin/inline.pm:607 msgid "RPC::XML::Client not found, not pinging" msgstr "Nieznaleziony moduł RPC::XML::Client, brak możliwości pingowania" @@ -909,9 +914,9 @@ msgid "" "to rebuild the wiki." msgstr "" -#: ../IkiWiki/Plugin/websetup.pm:433 +#: ../IkiWiki/Plugin/websetup.pm:436 #, perl-format -msgid "

Error: %s exited nonzero (%s)" +msgid "Error: %s exited nonzero (%s). Discarding setup changes." msgstr "" #: ../IkiWiki/Receive.pm:35 @@ -992,12 +997,12 @@ msgstr "awaria w trakcie odczytu %s: %s" msgid "you must enter a wikiname (that contains alphanumerics)" msgstr "" -#: ../IkiWiki/Setup/Automator.pm:68 +#: ../IkiWiki/Setup/Automator.pm:71 #, perl-format msgid "unsupported revision control system %s" msgstr "" -#: ../IkiWiki/Setup/Automator.pm:94 +#: ../IkiWiki/Setup/Automator.pm:97 msgid "failed to set up the repository with ikiwiki-makerepo" msgstr "" diff --git a/po/sv.po b/po/sv.po index eeeac88f8..fc7af3830 100644 --- a/po/sv.po +++ b/po/sv.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ikiwiki\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-04-04 14:59-0400\n" +"POT-Creation-Date: 2009-04-23 14:02-0400\n" "PO-Revision-Date: 2007-01-10 23:47+0100\n" "Last-Translator: Daniel Nylander \n" "Language-Team: Swedish \n" @@ -180,14 +180,14 @@ msgstr "" msgid "automatic index generation" msgstr "" -#: ../IkiWiki/Plugin/blogspam.pm:105 +#: ../IkiWiki/Plugin/blogspam.pm:108 msgid "" "Sorry, but that looks like spam to blogspam: " msgstr "" #: ../IkiWiki/Plugin/brokenlinks.pm:33 ../IkiWiki/Plugin/editpage.pm:233 -#: ../IkiWiki/Plugin/inline.pm:361 ../IkiWiki/Plugin/opendiscussion.pm:26 +#: ../IkiWiki/Plugin/inline.pm:368 ../IkiWiki/Plugin/opendiscussion.pm:26 #: ../IkiWiki/Plugin/orphans.pm:37 ../IkiWiki/Render.pm:79 #: ../IkiWiki/Render.pm:149 msgid "discussion" @@ -416,29 +416,34 @@ msgstr "mallen %s hittades inte" msgid "missing pages parameter" msgstr "mall saknar id-parameter" -#: ../IkiWiki/Plugin/inline.pm:200 +#: ../IkiWiki/Plugin/inline.pm:198 +#, fuzzy, perl-format +msgid "cannot match pages: %s" +msgstr "kan inte läsa %s: %s" + +#: ../IkiWiki/Plugin/inline.pm:207 msgid "Sort::Naturally needed for title_natural sort" msgstr "" -#: ../IkiWiki/Plugin/inline.pm:211 +#: ../IkiWiki/Plugin/inline.pm:218 #, perl-format msgid "unknown sort type %s" msgstr "okänd sorteringstyp %s" -#: ../IkiWiki/Plugin/inline.pm:314 +#: ../IkiWiki/Plugin/inline.pm:321 msgid "Add a new post titled:" msgstr "" -#: ../IkiWiki/Plugin/inline.pm:334 +#: ../IkiWiki/Plugin/inline.pm:341 #, perl-format msgid "nonexistant template %s" msgstr "" -#: ../IkiWiki/Plugin/inline.pm:369 ../IkiWiki/Render.pm:83 +#: ../IkiWiki/Plugin/inline.pm:376 ../IkiWiki/Render.pm:83 msgid "Discussion" msgstr "Diskussion" -#: ../IkiWiki/Plugin/inline.pm:600 +#: ../IkiWiki/Plugin/inline.pm:607 msgid "RPC::XML::Client not found, not pinging" msgstr "RPC::XML::Client hittades inte, pingar inte" @@ -898,9 +903,9 @@ msgid "" "to rebuild the wiki." msgstr "" -#: ../IkiWiki/Plugin/websetup.pm:433 +#: ../IkiWiki/Plugin/websetup.pm:436 #, perl-format -msgid "

Error: %s exited nonzero (%s)" +msgid "Error: %s exited nonzero (%s). Discarding setup changes." msgstr "" #: ../IkiWiki/Receive.pm:35 @@ -981,12 +986,12 @@ msgstr "kan inte läsa %s: %s" msgid "you must enter a wikiname (that contains alphanumerics)" msgstr "" -#: ../IkiWiki/Setup/Automator.pm:68 +#: ../IkiWiki/Setup/Automator.pm:71 #, perl-format msgid "unsupported revision control system %s" msgstr "" -#: ../IkiWiki/Setup/Automator.pm:94 +#: ../IkiWiki/Setup/Automator.pm:97 msgid "failed to set up the repository with ikiwiki-makerepo" msgstr "" diff --git a/po/vi.po b/po/vi.po index 719e99889..212acbe58 100644 --- a/po/vi.po +++ b/po/vi.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: ikiwiki\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-04-04 14:59-0400\n" +"POT-Creation-Date: 2009-04-23 14:02-0400\n" "PO-Revision-Date: 2007-01-13 15:31+1030\n" "Last-Translator: Clytie Siddall \n" "Language-Team: Vietnamese \n" @@ -181,14 +181,14 @@ msgstr "" msgid "automatic index generation" msgstr "" -#: ../IkiWiki/Plugin/blogspam.pm:105 +#: ../IkiWiki/Plugin/blogspam.pm:108 msgid "" "Sorry, but that looks like spam to blogspam: " msgstr "" #: ../IkiWiki/Plugin/brokenlinks.pm:33 ../IkiWiki/Plugin/editpage.pm:233 -#: ../IkiWiki/Plugin/inline.pm:361 ../IkiWiki/Plugin/opendiscussion.pm:26 +#: ../IkiWiki/Plugin/inline.pm:368 ../IkiWiki/Plugin/opendiscussion.pm:26 #: ../IkiWiki/Plugin/orphans.pm:37 ../IkiWiki/Render.pm:79 #: ../IkiWiki/Render.pm:149 msgid "discussion" @@ -419,29 +419,34 @@ msgstr "không tìm thấy mẫu %s" msgid "missing pages parameter" msgstr "mẫu thiếu tham số id" -#: ../IkiWiki/Plugin/inline.pm:200 +#: ../IkiWiki/Plugin/inline.pm:198 +#, fuzzy, perl-format +msgid "cannot match pages: %s" +msgstr "không thể đọc %s: %s" + +#: ../IkiWiki/Plugin/inline.pm:207 msgid "Sort::Naturally needed for title_natural sort" msgstr "" -#: ../IkiWiki/Plugin/inline.pm:211 +#: ../IkiWiki/Plugin/inline.pm:218 #, perl-format msgid "unknown sort type %s" msgstr "kiểu sắp xếp không rõ %s" -#: ../IkiWiki/Plugin/inline.pm:314 +#: ../IkiWiki/Plugin/inline.pm:321 msgid "Add a new post titled:" msgstr "" -#: ../IkiWiki/Plugin/inline.pm:334 +#: ../IkiWiki/Plugin/inline.pm:341 #, perl-format msgid "nonexistant template %s" msgstr "" -#: ../IkiWiki/Plugin/inline.pm:369 ../IkiWiki/Render.pm:83 +#: ../IkiWiki/Plugin/inline.pm:376 ../IkiWiki/Render.pm:83 msgid "Discussion" msgstr "Thảo luận" -#: ../IkiWiki/Plugin/inline.pm:600 +#: ../IkiWiki/Plugin/inline.pm:607 msgid "RPC::XML::Client not found, not pinging" msgstr "Không tìm thấy RPC::XML::Client nên không gửi gói tin ping" @@ -899,9 +904,9 @@ msgid "" "to rebuild the wiki." msgstr "" -#: ../IkiWiki/Plugin/websetup.pm:433 +#: ../IkiWiki/Plugin/websetup.pm:436 #, perl-format -msgid "

Error: %s exited nonzero (%s)" +msgid "Error: %s exited nonzero (%s). Discarding setup changes." msgstr "" #: ../IkiWiki/Receive.pm:35 @@ -982,12 +987,12 @@ msgstr "không thể đọc %s: %s" msgid "you must enter a wikiname (that contains alphanumerics)" msgstr "" -#: ../IkiWiki/Setup/Automator.pm:68 +#: ../IkiWiki/Setup/Automator.pm:71 #, perl-format msgid "unsupported revision control system %s" msgstr "" -#: ../IkiWiki/Setup/Automator.pm:94 +#: ../IkiWiki/Setup/Automator.pm:97 msgid "failed to set up the repository with ikiwiki-makerepo" msgstr "" -- cgit v1.2.3 From aa306957bac11477b914ac19b93890184ffe4062 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 23 Apr 2009 15:45:30 -0400 Subject: pagespec_match_list added and used in most appropriate places * pagespec_match_list: New API function, matches pages in a list and throws an error if the pagespec is bad. * inline, brokenlinks, calendar, linkmap, map, orphans, pagecount, pagestate, postsparkline: Display a handy error message if the pagespec is erronious. --- IkiWiki.pm | 32 +++++++++++++++++++++++---- IkiWiki/Plugin/brokenlinks.pm | 23 +++++++++---------- IkiWiki/Plugin/calendar.pm | 3 +-- IkiWiki/Plugin/external.pm | 9 +++++++- IkiWiki/Plugin/inline.pm | 17 +++----------- IkiWiki/Plugin/linkmap.pm | 7 +++--- IkiWiki/Plugin/map.pm | 49 ++++++++++++++++++++--------------------- IkiWiki/Plugin/orphans.pm | 7 +++--- IkiWiki/Plugin/pagecount.pm | 9 +++----- IkiWiki/Plugin/pagestats.pm | 11 +++++---- IkiWiki/Plugin/postsparkline.pm | 10 +++------ debian/changelog | 7 ++++-- doc/plugins/write.mdwn | 13 +++++++++++ 13 files changed, 111 insertions(+), 86 deletions(-) (limited to 'doc/plugins/write.mdwn') diff --git a/IkiWiki.pm b/IkiWiki.pm index fca8da874..e260fffea 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -18,10 +18,10 @@ use vars qw{%config %links %oldlinks %pagemtime %pagectime %pagecase use Exporter q{import}; our @EXPORT = qw(hook debug error template htmlpage add_depends pagespec_match - bestlink htmllink readfile writefile pagetype srcfile pagename - displaytime will_render gettext urlto targetpage - add_underlay pagetitle titlepage linkpage newpagefile - inject + pagespec_match_list bestlink htmllink readfile writefile + pagetype srcfile pagename displaytime will_render gettext urlto + targetpage add_underlay pagetitle titlepage linkpage + newpagefile inject %config %links %pagestate %wikistate %renderedfiles %pagesources %destsources); our $VERSION = 3.00; # plugin interface version, next is ikiwiki version @@ -1832,6 +1832,30 @@ sub pagespec_match ($$;@) { return $sub->($page, @params); } +sub pagespec_match_list ($$;@) { + my $pages=shift; + my $spec=shift; + my @params=@_; + + my $sub=pagespec_translate($spec); + error "syntax error in pagespec \"$spec\"" + if $@ || ! defined $sub; + + my @ret; + my $r; + foreach my $page (@$pages) { + $r=$sub->($page, @params); + push @ret, $page if $r; + } + + if (! @ret && defined $r && $r->isa("IkiWiki::ErrorReason")) { + error(sprintf(gettext("cannot match pages: %s"), $r)); + } + else { + return @ret; + } +} + sub pagespec_valid ($) { my $spec=shift; diff --git a/IkiWiki/Plugin/brokenlinks.pm b/IkiWiki/Plugin/brokenlinks.pm index bf0d7560d..da97dbc28 100644 --- a/IkiWiki/Plugin/brokenlinks.pm +++ b/IkiWiki/Plugin/brokenlinks.pm @@ -28,18 +28,17 @@ sub preprocess (@) { add_depends($params{page}, $params{pages}); my %broken; - foreach my $page (keys %links) { - if (pagespec_match($page, $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; - } + 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; } } diff --git a/IkiWiki/Plugin/calendar.pm b/IkiWiki/Plugin/calendar.pm index d473c8348..fe4b16072 100644 --- a/IkiWiki/Plugin/calendar.pm +++ b/IkiWiki/Plugin/calendar.pm @@ -369,8 +369,7 @@ sub preprocess (@) { my $page =$params{page}; if (! defined $cache{$pagespec}) { - foreach my $p (keys %pagesources) { - next unless pagespec_match($p, $pagespec); + foreach my $p (pagespec_match_list([keys %pagesources], $pagespec)) { my $mtime = $IkiWiki::pagectime{$p}; my $src = $pagesources{$p}; my @date = localtime($mtime); diff --git a/IkiWiki/Plugin/external.pm b/IkiWiki/Plugin/external.pm index 066f15cf1..aeee15dea 100644 --- a/IkiWiki/Plugin/external.pm +++ b/IkiWiki/Plugin/external.pm @@ -230,10 +230,17 @@ sub hook ($@) { } sub pagespec_match ($@) { - # convert pagespec_match's return object into a XML RPC boolean + # convert return object into a XML RPC boolean my $plugin=shift; return RPC::XML::boolean->new(0 + IkiWiki::pagespec_march(@_)); } +sub pagespec_match_list ($@) { + # convert return object into a XML RPC boolean + my $plugin=shift; + + return RPC::XML::boolean->new(0 + IkiWiki::pagespec_march_list(@_)); +} + 1 diff --git a/IkiWiki/Plugin/inline.pm b/IkiWiki/Plugin/inline.pm index 551c38a65..366357095 100644 --- a/IkiWiki/Plugin/inline.pm +++ b/IkiWiki/Plugin/inline.pm @@ -183,20 +183,9 @@ sub preprocess_inline (@) { $params{template} = $archive ? "archivepage" : "inlinepage"; } - my @list; - my $lastmatch; - foreach my $page (keys %pagesources) { - next if $page eq $params{page}; - $lastmatch=pagespec_match($page, $params{pages}, location => $params{page}); - if ($lastmatch) { - push @list, $page; - } - } - - if (! @list && defined $lastmatch && - $lastmatch->isa("IkiWiki::ErrorReason")) { - error(sprintf(gettext("cannot match pages: %s"), $lastmatch)); - } + my @list=pagespec_match_list( + [ grep { $_ ne $params{page}} keys %pagesources ], + $params{pages}, location => $params{page}); if (exists $params{sort} && $params{sort} eq 'title') { @list=sort { pagetitle(basename($a)) cmp pagetitle(basename($b)) } @list; diff --git a/IkiWiki/Plugin/linkmap.pm b/IkiWiki/Plugin/linkmap.pm index 941ed5f36..0137476ac 100644 --- a/IkiWiki/Plugin/linkmap.pm +++ b/IkiWiki/Plugin/linkmap.pm @@ -56,10 +56,9 @@ sub genmap ($) { # Get all the items to map. my %mapitems = (); - foreach my $item (keys %links) { - if (pagespec_match($item, $params{pages}, location => $params{page})) { - $mapitems{$item}=urlto($item, $params{destpage}); - } + foreach my $item (pagespec_match_list([keys %links], + $params{pages}, location => $params{page})) { + $mapitems{$item}=urlto($item, $params{destpage}); } my $dest=$params{page}."/linkmap.png"; diff --git a/IkiWiki/Plugin/map.pm b/IkiWiki/Plugin/map.pm index 328493116..120451b5d 100644 --- a/IkiWiki/Plugin/map.pm +++ b/IkiWiki/Plugin/map.pm @@ -32,32 +32,31 @@ sub preprocess (@) { # Get all the items to map. my %mapitems; - foreach my $page (keys %pagesources) { - if (pagespec_match($page, $params{pages}, location => $params{page})) { - if (exists $params{show} && - exists $pagestate{$page} && - exists $pagestate{$page}{meta}{$params{show}}) { - $mapitems{$page}=$pagestate{$page}{meta}{$params{show}}; - } - else { - $mapitems{$page}=''; - } - # Check for a common prefix. - if (! defined $common_prefix) { - $common_prefix=$page; - } - elsif (length $common_prefix && - $page !~ /^\Q$common_prefix\E(\/|$)/) { - my @a=split(/\//, $page); - my @b=split(/\//, $common_prefix); - $common_prefix=""; - while (@a && @b && $a[0] eq $b[0]) { - if (length $common_prefix) { - $common_prefix.="/"; - } - $common_prefix.=shift(@a); - shift @b; + foreach my $page (pagespec_match_list([keys %pagesources], + $params{pages}, location => $params{page})) { + if (exists $params{show} && + exists $pagestate{$page} && + exists $pagestate{$page}{meta}{$params{show}}) { + $mapitems{$page}=$pagestate{$page}{meta}{$params{show}}; + } + else { + $mapitems{$page}=''; + } + # Check for a common prefix. + if (! defined $common_prefix) { + $common_prefix=$page; + } + elsif (length $common_prefix && + $page !~ /^\Q$common_prefix\E(\/|$)/) { + my @a=split(/\//, $page); + my @b=split(/\//, $common_prefix); + $common_prefix=""; + while (@a && @b && $a[0] eq $b[0]) { + if (length $common_prefix) { + $common_prefix.="/"; } + $common_prefix.=shift(@a); + shift @b; } } } diff --git a/IkiWiki/Plugin/orphans.pm b/IkiWiki/Plugin/orphans.pm index 605e6e43a..cf74c9b79 100644 --- a/IkiWiki/Plugin/orphans.pm +++ b/IkiWiki/Plugin/orphans.pm @@ -35,9 +35,10 @@ sub preprocess (@) { my @orphans; my $discussion=gettext("discussion"); - foreach my $page (keys %pagesources) { - next if $linkedto{$page} || $page eq 'index'; - next unless pagespec_match($page, $params{pages}, location => $params{page}); + foreach my $page (pagespec_match_list( + [ grep { ! $linkedto{$_} && $_ 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 { diff --git a/IkiWiki/Plugin/pagecount.pm b/IkiWiki/Plugin/pagecount.pm index a143f24d0..f8881a04b 100644 --- a/IkiWiki/Plugin/pagecount.pm +++ b/IkiWiki/Plugin/pagecount.pm @@ -27,12 +27,9 @@ sub preprocess (@) { add_depends($params{page}, $params{pages}); my @pages=keys %pagesources; - return $#pages+1 if $params{pages} eq "*"; # optimisation - my $count=0; - foreach my $page (@pages) { - $count++ if pagespec_match($page, $params{pages}, location => $params{page}); - } - return $count; + @pages=pagespec_match_list(\@pages, $params{pages}, location => $params{page}) + if $params{pages} ne "*"; # optimisation; + return $#pages+1; } 1 diff --git a/IkiWiki/Plugin/pagestats.pm b/IkiWiki/Plugin/pagestats.pm index dbe69539d..8ab5d3666 100644 --- a/IkiWiki/Plugin/pagestats.pm +++ b/IkiWiki/Plugin/pagestats.pm @@ -41,12 +41,11 @@ sub preprocess (@) { my %counts; my $max = 0; - foreach my $page (keys %links) { - if (pagespec_match($page, $params{pages}, location => $params{page})) { - use IkiWiki::Render; - $counts{$page} = scalar(IkiWiki::backlinks($page)); - $max = $counts{$page} if $counts{$page} > $max; - } + foreach my $page (pagespec_match_list([keys %links], + $params{pages}, location => $params{page})) { + use IkiWiki::Render; + $counts{$page} = scalar(IkiWiki::backlinks($page)); + $max = $counts{$page} if $counts{$page} > $max; } if ($style eq 'table') { diff --git a/IkiWiki/Plugin/postsparkline.pm b/IkiWiki/Plugin/postsparkline.pm index ba43561fb..c2ebbc5eb 100644 --- a/IkiWiki/Plugin/postsparkline.pm +++ b/IkiWiki/Plugin/postsparkline.pm @@ -50,13 +50,9 @@ sub preprocess (@) { add_depends($params{page}, $params{pages}); - my @list; - foreach my $page (keys %pagesources) { - next if $page eq $params{page}; - if (pagespec_match($page, $params{pages}, location => $params{page})) { - push @list, $page; - } - } + my @list=pagespec_match_list( + [ grep { $_ ne $params{page} } keys %pagesources], + $params{pages}, location => $params{page}); @list = sort { $params{timehash}->{$b} <=> $params{timehash}->{$a} } @list; diff --git a/debian/changelog b/debian/changelog index de4ac4a8c..37b69ada0 100644 --- a/debian/changelog +++ b/debian/changelog @@ -11,8 +11,11 @@ ikiwiki (3.11) UNRELEASED; urgency=low * Add IkiWiki::ErrorReason objects, and modify pagespecs to return them in cases where they fail to match due to a configuration or syntax error. - * inline: Display a handy error message if the inline cannot display any - pages due to such an error. + * pagespec_match_list: New API function, matches pages in a list + and throws an error if the pagespec is bad. + * inline, brokenlinks, calendar, linkmap, map, orphans, pagecount, + pagestate, postsparkline: Display a handy error message if the pagespec + is erronious. * comments: Add link to comment post form to allow user to sign in if they wish to, if the configuration makes signin optional for commenting. diff --git a/doc/plugins/write.mdwn b/doc/plugins/write.mdwn index 23df01ca7..0b358b215 100644 --- a/doc/plugins/write.mdwn +++ b/doc/plugins/write.mdwn @@ -572,6 +572,19 @@ The most often used is "location", which specifies the location the PageSpec should match against. If not passed, relative PageSpecs will match relative to the top of the wiki. +#### `pagespec_match_list($$;@)` + +Passed a reference to a list of page names, and [[ikiwiki/PageSpec]], +returns the set of pages that match the [[ikiwiki/PageSpec]]. + +Additional named parameters can be passed, to further limit the match. +The most often used is "location", which specifies the location the +PageSpec should match against. If not passed, relative PageSpecs will match +relative to the top of the wiki. + +Unlike pagespec_match, this may throw an error if there is an error in +the pagespec. + #### `bestlink($$)` Given a page and the text of a link on the page, determine which -- cgit v1.2.3 From 2a7721febd6cac1af5e7f4b4949ffe066c62c837 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 5 May 2009 23:40:09 -0400 Subject: Avoid %links accumulating duplicates. (For TOVA) This is sorta an optimisation, and sorta a bug fix. In one test case I have available, it can speed a page build up from 3 minutes to 3 seconds. The root of the problem is that $links{$page} contains arrays of links, rather than hashes of links. And when a link is found, it is just pushed onto the array, without checking for dups. Now, the array is emptied before scanning a page, so there should not be a lot of opportunity for lots of duplicate links to pile up in it. But, in some cases, they can, and if there are hundreds of duplicate links in the array, then scanning it for matching links, as match_link and some other code does, becomes much more expensive than it needs to be. Perhaps the real right fix would be to change the data structure to a hash. But, the list of links is never accessed like that, you always want to iterate through it. I also looked at deduping the list in saveindex, but that does a lot of unnecessary work, and doesn't completly solve the problem. So, finally, I decided to add an add_link function that handles deduping, and make ikiwiki-transition remove the old dup links. --- IkiWiki.pm | 12 ++++++++++-- IkiWiki/Plugin/camelcase.pm | 2 +- IkiWiki/Plugin/img.pm | 2 +- IkiWiki/Plugin/link.pm | 2 +- IkiWiki/Plugin/meta.pm | 2 +- IkiWiki/Plugin/tag.pm | 6 +++--- debian/NEWS | 9 +++++++++ debian/changelog | 4 ++++ doc/ikiwiki-transition.mdwn | 7 +++++++ doc/plugins/write.mdwn | 22 ++++++++++++++-------- ikiwiki-transition | 19 +++++++++++++++++++ 11 files changed, 70 insertions(+), 17 deletions(-) (limited to 'doc/plugins/write.mdwn') diff --git a/IkiWiki.pm b/IkiWiki.pm index e260fffea..e6efe1889 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -21,12 +21,12 @@ our @EXPORT = qw(hook debug error template htmlpage add_depends pagespec_match pagespec_match_list bestlink htmllink readfile writefile pagetype srcfile pagename displaytime will_render gettext urlto targetpage add_underlay pagetitle titlepage linkpage - newpagefile inject + newpagefile inject add_link %config %links %pagestate %wikistate %renderedfiles %pagesources %destsources); our $VERSION = 3.00; # plugin interface version, next is ikiwiki version our $version='unknown'; # VERSION_AUTOREPLACE done by Makefile, DNE -our $installdir=''; # INSTALLDIR_AUTOREPLACE done by Makefile, DNE +our $installdir='/usr'; # INSTALLDIR_AUTOREPLACE done by Makefile, DNE # Optimisation. use Memoize; @@ -1757,6 +1757,14 @@ sub inject { use warnings; } +sub add_link ($$) { + my $page=shift; + my $link=shift; + + push @{$links{$page}}, $link + unless grep { $_ eq $link } @{$links{$page}}; +} + sub pagespec_merge ($$) { my $a=shift; my $b=shift; diff --git a/IkiWiki/Plugin/camelcase.pm b/IkiWiki/Plugin/camelcase.pm index 74a8397d7..088447d6b 100644 --- a/IkiWiki/Plugin/camelcase.pm +++ b/IkiWiki/Plugin/camelcase.pm @@ -61,7 +61,7 @@ sub scan (@) { my $content=$params{content}; while ($content =~ /$link_regexp/g) { - push @{$links{$page}}, linkpage($1) unless ignored($1) + add_link($page, linkpage($1)) unless ignored($1) } } diff --git a/IkiWiki/Plugin/img.pm b/IkiWiki/Plugin/img.pm index d295b833b..a697fea19 100644 --- a/IkiWiki/Plugin/img.pm +++ b/IkiWiki/Plugin/img.pm @@ -43,7 +43,7 @@ sub preprocess (@) { return ''; } - push @{$links{$params{page}}}, $image; + add_link($params{page}, $image); # optimisation: detect scan mode, and avoid generating the image if (! defined wantarray) { return; diff --git a/IkiWiki/Plugin/link.pm b/IkiWiki/Plugin/link.pm index b79273f96..4c1add985 100644 --- a/IkiWiki/Plugin/link.pm +++ b/IkiWiki/Plugin/link.pm @@ -86,7 +86,7 @@ sub scan (@) { my $content=$params{content}; while ($content =~ /(? pagetitle($1)); } else { my $tag=linkpage($_); $tags{$params{page}}{$tag}=1; - push @{$links{$params{page}}}, tagpage($tag); + add_link($params{page}, tagpage($tag)); return taglink($params{page}, $params{destpage}, $tag); } } diff --git a/debian/NEWS b/debian/NEWS index 22513cc4a..62e1543b3 100644 --- a/debian/NEWS +++ b/debian/NEWS @@ -1,3 +1,12 @@ +ikiwiki (3.12) UNRELEASED; urgency=low + + You may want to run `ikiwiki-transition deduplinks /path/to/srcdir` + after upgrading to this version of ikiwiki. This command will + optimise your wiki's saved state, removing duplicate information + that can slow ikiwiki down. + + -- Joey Hess Wed, 06 May 2009 00:25:06 -0400 + ikiwiki (3.01) unstable; urgency=low If your wiki uses git, and you have a `diffurl` configured in diff --git a/debian/changelog b/debian/changelog index 9244ccdb8..1e1d48d78 100644 --- a/debian/changelog +++ b/debian/changelog @@ -5,6 +5,10 @@ ikiwiki (3.12) UNRELEASED; urgency=low fails on nonexistant directories with some broken perl versions. * inline: Minor optimisation. + * add_link: New function, which plugins should use rather than + modifying %links directly, to avoid it accumulating duplicates. + * ikiwiki-transition: Add a deduplinks action, that can be used + to remove duplicate links and optimise a wiki w/o rebuilding it. -- Joey Hess Mon, 04 May 2009 19:17:39 -0400 diff --git a/doc/ikiwiki-transition.mdwn b/doc/ikiwiki-transition.mdwn index 18836d5f5..e0b853ecf 100644 --- a/doc/ikiwiki-transition.mdwn +++ b/doc/ikiwiki-transition.mdwn @@ -61,6 +61,13 @@ If this is not done explicitly, a user's plaintext password will be automatically converted to a hash when a user logs in for the first time after upgrade to ikiwiki 2.48. +# deduplinks srcdir + +In the past, bugs in ikiwiki have allowed duplicate link information +to be stored in its indexdb. This mode removes such duplicate information, +which may speed up wikis afflicted by it. Note that rebuilding the wiki +will have the same effect. + # AUTHOR Josh Triplett , Joey Hess diff --git a/doc/plugins/write.mdwn b/doc/plugins/write.mdwn index 0b358b215..28da243d5 100644 --- a/doc/plugins/write.mdwn +++ b/doc/plugins/write.mdwn @@ -107,8 +107,8 @@ adding or removing files from it. This hook is called early in the process of building the wiki, and is used as a first pass scan of the page, to collect metadata about the page. It's -mostly used to scan the page for [[WikiLinks|ikiwiki/WikiLink]], and add them to `%links`. -Present in IkiWiki 2.40 and later. +mostly used to scan the page for [[WikiLinks|ikiwiki/WikiLink]], and add +them to `%links`. Present in IkiWiki 2.40 and later. The function is passed named parameters "page" and "content". Its return value is ignored. @@ -151,11 +151,11 @@ parameter is set to a true value if the page is being previewed. If `hook` is passed an optional "scan" parameter, set to a true value, this makes the hook be called during the preliminary scan that ikiwiki makes of updated pages, before begining to render pages. This should be done if the -hook modifies data in `%links`. Note that doing so will make the hook be -run twice per page build, so avoid doing it for expensive hooks. (As an -optimisation, if your preprocessor hook is called in a void context, you -can assume it's being run in scan mode, and avoid doing expensive things at -that point.) +hook modifies data in `%links` (typically by calling `add_link`). Note that +doing so will make the hook be run twice per page build, so avoid doing it +for expensive hooks. (As an optimisation, if your preprocessor hook is +called in a void context, you can assume it's being run in scan mode, and +avoid doing expensive things at that point.) Note that if the [[htmlscrubber]] is enabled, html in preprocessor [[ikiwiki/directive]] output is sanitised, which may limit what @@ -174,7 +174,8 @@ links. The function is passed named parameters "page", "destpage", and and later. Plugins that implement linkify must also implement a scan hook, that scans -for the links on the page and adds them to `%links`. +for the links on the page and adds them to `%links` (typically by calling +`add_link`). ### htmlize @@ -753,6 +754,11 @@ Optionally, a third parameter can be passed, to specify the preferred filename of the page. For example, `targetpage("foo", "rss", "feed")` will yield something like `foo/feed.rss`. +#### `add_link($$)` + +This adds a link to `%links`, ensuring that duplicate links are not +added. Pass it the page that contains the link, and the link text. + ## Miscellaneous ### Internal use pages diff --git a/ikiwiki-transition b/ikiwiki-transition index 599261a09..f17868d73 100755 --- a/ikiwiki-transition +++ b/ikiwiki-transition @@ -220,6 +220,21 @@ sub moveprefs { IkiWiki::Setup::dump($setup); } +sub deduplinks { + my $dir=shift; + if (! defined $dir) { + usage(); + } + $config{wikistatedir}=$dir."/.ikiwiki"; + IkiWiki::loadindex(); + foreach my $page (keys %links) { + my %l; + $l{$_}=1 foreach @{$links{$page}}; + $links{$page}=[keys %l] + } + IkiWiki::saveindex(); +} + sub usage { print STDERR "Usage: ikiwiki-transition type ...\n"; print STDERR "Currently supported transition subcommands:\n"; @@ -229,6 +244,7 @@ sub usage { print STDERR "\tmoveprefs setupfile\n"; print STDERR "\thashpassword srcdir\n"; print STDERR "\tindexdb srcdir\n"; + print STDERR "\tdeduplinks srcdir\n"; exit 1; } @@ -253,6 +269,9 @@ elsif ($mode eq 'setupformat') { elsif ($mode eq 'moveprefs') { moveprefs(@ARGV); } +elsif ($mode eq 'deduplinks') { + deduplinks(@ARGV); +} else { usage(); } -- cgit v1.2.3 From 335462c05d22defe020941d2d32b2f18e975d80c Mon Sep 17 00:00:00 2001 From: Jon Dowland Date: Sat, 16 May 2009 14:01:12 +0100 Subject: document longname parameter --- doc/plugins/write.mdwn | 3 +++ 1 file changed, 3 insertions(+) (limited to 'doc/plugins/write.mdwn') diff --git a/doc/plugins/write.mdwn b/doc/plugins/write.mdwn index 28da243d5..d0f6a09e1 100644 --- a/doc/plugins/write.mdwn +++ b/doc/plugins/write.mdwn @@ -198,6 +198,9 @@ value, then the id parameter specifies not a filename extension, but a whole filename that can be htmlized. This is useful for files like `Makefile` that have no extension. +If `hook` is passed an optional "longname" parameter, this value is used +when prompting a user to choose a page type on the edit page form. + ### pagetemplate hook(type => "pagetemplate", id => "foo", call => \&pagetemplate); -- cgit v1.2.3