From 1d767625178380c6b760b9ea4bb41a11a7c95d53 Mon Sep 17 00:00:00 2001 From: intrigeri Date: Wed, 15 Oct 2008 06:47:06 +0200 Subject: po plugin: initial implementation of automatic POT/PO update The updated or created PO files are put under version control. Signed-off-by: intrigeri --- IkiWiki/Plugin/po.pm | 23 +++++++++++++++++++++-- doc/plugins/po.mdwn | 37 +++++++++++++++++-------------------- 2 files changed, 38 insertions(+), 22 deletions(-) diff --git a/IkiWiki/Plugin/po.pm b/IkiWiki/Plugin/po.pm index 62a2aa3db..1dcec7bec 100644 --- a/IkiWiki/Plugin/po.pm +++ b/IkiWiki/Plugin/po.pm @@ -16,6 +16,7 @@ use File::Temp; use Memoize; my %translations; +our %filtered; memoize("istranslatable"); memoize("_istranslation"); memoize("percenttranslated"); @@ -151,6 +152,7 @@ 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)) { @@ -165,8 +167,26 @@ sub needsbuild () { #{{{ push @pofiles, $pofile; } } - refreshpofiles($file, @pofiles) if (@pofiles); + if (@pofiles) { + refreshpofiles($file, @pofiles) ; + map { IkiWiki::rcs_add($_); } @pofiles if ($config{rcs}); + $updated_po_files = 1; + } + } + } + + # check staged changes in and trigger a wiki refresh. + if ($updated_po_files) { + if ($config{rcs}) { + IkiWiki::disable_commit_hook(); + IkiWiki::rcs_commit_staged(gettext("updated PO files"), + "refreshpofiles", "127.0.0.1"); + IkiWiki::enable_commit_hook(); + IkiWiki::rcs_update(); } + IkiWiki::refresh(); + IkiWiki::saveindex(); + %filtered=undef; } # refresh %translations, using istranslation's side-effect @@ -232,7 +252,6 @@ sub tweakbestlink ($$) { #{{{ return $link; } #}}} -our %filtered; # We use filter to convert PO to the master page's type, # since other plugins should not work on PO files sub filter (@) { #{{{ diff --git a/doc/plugins/po.mdwn b/doc/plugins/po.mdwn index 717685df3..2c46a80ed 100644 --- a/doc/plugins/po.mdwn +++ b/doc/plugins/po.mdwn @@ -169,6 +169,21 @@ Additional PageSpec tests This plugin enhances the regular [[ikiwiki/PageSpec]] syntax with some additional tests that are documented [[here|ikiwiki/pagespec/po]]. +Automatic PO files update +------------------------- + +Committing changes to a "master" page: + +1. updates the POT file and the PO files for the supported languages + (this is done in the `needsbuild` hook); the updated PO files are + then put under version control +2. triggers a refresh of the corresponding HTML slave pages (this is + achieved by making any "slave" page dependent on the corresponding + "master" page, in the `needsbuild` hook) + +Also, when the plugin has just been enabled, or when a page has just +been declared as being translatable, the needed POT and PO files are +created, and the PO files are checked into version control. TODO ==== @@ -184,26 +199,8 @@ Should pages using the `OTHERLANGUAGES` template loop be declared as linking to the same page in other versions? To be rigorous, they should, but this may clutter the backlinks. -Automatic PO files update -------------------------- - -Committing changes to a "master" page: - -1. updates the POT file and the PO files for the supported languages; - this is done in the `needsbuild` hook; **FIXME**: the updated PO - files must then be put under version control - -2. triggers a refresh of the corresponding HTML slave pages: this is - achieved by making any "slave" page dependent on the corresponding - "master" page, in the `needsbuild` hook. - -Also, when the plugin has just been enabled, or when a page -has just been declared as being translatable: - -- all the needed POT and PO files are be created -- **FIXME** the PO files must be checked into version control - -Security checks: +Security checks +--------------- - `refreshpofiles` uses `system()`, whose args have to be checked more thoroughly to prevent any security issue (command injection, etc.). -- cgit v1.2.3