]> sipb.mit.edu Git - ikiwiki.git/commitdiff
po plugin: initial implementation of automatic POT/PO update
authorintrigeri <intrigeri@boum.org>
Wed, 15 Oct 2008 04:47:06 +0000 (06:47 +0200)
committerintrigeri <intrigeri@boum.org>
Sat, 18 Oct 2008 13:49:12 +0000 (15:49 +0200)
The updated or created PO files are put under version control.

Signed-off-by: intrigeri <intrigeri@boum.org>
IkiWiki/Plugin/po.pm
doc/plugins/po.mdwn

index 62a2aa3db2a36a508cb9429c1e4958183ba419d9..1dcec7bec268ee82a7c39a579401e9bd033c91cf 100644 (file)
@@ -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 (@) { #{{{
index 717685df36012a3f99f0b5bfa1e99d63bba239d4..2c46a80edc09830dca2d4e4b742148b4ff0ca662 100644 (file)
@@ -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.).