summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorintrigeri <intrigeri@boum.org>2008-10-15 06:47:06 +0200
committerintrigeri <intrigeri@boum.org>2008-10-18 15:49:12 +0200
commit1d767625178380c6b760b9ea4bb41a11a7c95d53 (patch)
treebdd85171b93d604cd019ea14659103960bc69939
parentc852203be808131ce5f9bbc376b04e76e3e82c8d (diff)
po plugin: initial implementation of automatic POT/PO update
The updated or created PO files are put under version control. Signed-off-by: intrigeri <intrigeri@boum.org>
-rw-r--r--IkiWiki/Plugin/po.pm23
-rw-r--r--doc/plugins/po.mdwn37
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.).