From 225e21f6c5da40f3beea27e084515daf83471d95 Mon Sep 17 00:00:00 2001 From: intrigeri Date: Tue, 4 Nov 2008 23:32:32 +0100 Subject: [PATCH 1/1] po plugin: redesign refresh mechanism after master page update manually triggering IkiWiki::refresh() was at least dubious, and more or less buggy (it randomly broke the whole backlinks feature); thinking a bit more to add the necessary bits to @needsbuild seems like a better way. don't play with ikiwiki's internals if not absolutely needed. Signed-off-by: intrigeri --- IkiWiki/Plugin/po.pm | 20 ++++++++++++-------- doc/plugins/po.mdwn | 6 ------ 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/IkiWiki/Plugin/po.pm b/IkiWiki/Plugin/po.pm index a5bf4fb54..936fe3c49 100644 --- a/IkiWiki/Plugin/po.pm +++ b/IkiWiki/Plugin/po.pm @@ -112,14 +112,16 @@ sub checkconfig () { #{{{ sub potfile ($) { #{{{ my $masterfile=shift; (my $name, my $dir, my $suffix) = fileparse($masterfile, qr/\.[^.]*/); - return File::Spec->catfile($dir, $name . ".pot"); + $dir='' if $dir eq './'; + return File::Spec->catpath('', $dir, $name . ".pot"); } #}}} sub pofile ($$) { #{{{ my $masterfile=shift; my $lang=shift; (my $name, my $dir, my $suffix) = fileparse($masterfile, qr/\.[^.]*/); - return File::Spec->catfile($dir, $name . "." . $lang . ".po"); + $dir='' if $dir eq './'; + return File::Spec->catpath('', $dir, $name . "." . $lang . ".po"); } #}}} sub refreshpot ($) { #{{{ @@ -173,17 +175,22 @@ sub needsbuild () { #{{{ # refresh/create POT and PO files as needed my $updated_po_files=0; foreach my $page (keys %pagesources) { - my $pageneedsbuild = grep { $_ eq $pagesources{$page} } @$needsbuild; if (istranslatable($page)) { + my $pageneedsbuild = grep { $_ eq $pagesources{$page} } @$needsbuild; + my $updated_pot_file=0; my $file=srcfile($pagesources{$page}); if ($pageneedsbuild || ! -e potfile($file)) { refreshpot($file); + $updated_pot_file=1; } my @pofiles; foreach my $lang (keys %{$config{po_slave_languages}}) { my $pofile=pofile($file, $lang); - if ($pageneedsbuild || ! -e $pofile) { + my $pofile_rel=pofile($pagesources{$page}, $lang); + if ($pageneedsbuild || $updated_pot_file || ! -e $pofile) { push @pofiles, $pofile; + push @$needsbuild, $pofile_rel + unless grep { $_ eq $pofile_rel } @$needsbuild; } } if (@pofiles) { @@ -194,7 +201,7 @@ sub needsbuild () { #{{{ } } - # check staged changes in and trigger a wiki refresh. + # check staged changes in if ($updated_po_files) { if ($config{rcs}) { IkiWiki::disable_commit_hook(); @@ -203,8 +210,6 @@ sub needsbuild () { #{{{ IkiWiki::enable_commit_hook(); IkiWiki::rcs_update(); } - IkiWiki::refresh(); - IkiWiki::saveindex(); # refresh module's private variables undef %filtered; undef %translations; @@ -213,7 +218,6 @@ sub needsbuild () { #{{{ } } - # make existing translations depend on the corresponding master page foreach my $master (keys %translations) { foreach my $slave (values %{$translations{$master}}) { diff --git a/doc/plugins/po.mdwn b/doc/plugins/po.mdwn index 61ed9e107..173a26ac4 100644 --- a/doc/plugins/po.mdwn +++ b/doc/plugins/po.mdwn @@ -242,12 +242,6 @@ gettext/po4a rough corners Misc. improvements ------------------ -### automatic POT/PO update - -- Use the `change` hook instead of `needsbuild`? -- Fix (apparently harmless) undefined values that pollute logs when - saving a master page in the CGI - ### page titles Use nice page titles from meta plugin in links, as inline already -- 2.44.0