summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorintrigeri <intrigeri@boum.org>2008-11-04 23:32:32 +0100
committerintrigeri <intrigeri@boum.org>2008-11-04 23:32:32 +0100
commit225e21f6c5da40f3beea27e084515daf83471d95 (patch)
tree82d830f8b5b422d47d8904b58c17863718accb28
parentbc5b875de85419d38688b47e0d40ff808f0ebd86 (diff)
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 <intrigeri@boum.org>
-rw-r--r--IkiWiki/Plugin/po.pm20
-rw-r--r--doc/plugins/po.mdwn6
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