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;
 use Memoize;
 
 my %translations;
+our %filtered;
 memoize("istranslatable");
 memoize("_istranslation");
 memoize("percenttranslated");
 memoize("istranslatable");
 memoize("_istranslation");
 memoize("percenttranslated");
@@ -151,6 +152,7 @@ sub needsbuild () { #{{{
        }
 
        # refresh/create POT and PO files as needed
        }
 
        # 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)) {
        foreach my $page (keys %pagesources) {
                my $pageneedsbuild = grep { $_ eq $pagesources{$page} } @$needsbuild;
                if (istranslatable($page)) {
@@ -165,8 +167,26 @@ sub needsbuild () { #{{{
                                        push @pofiles, $pofile;
                                }
                        }
                                        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
        }
 
        # refresh %translations, using istranslation's side-effect
@@ -232,7 +252,6 @@ sub tweakbestlink ($$) { #{{{
        return $link;
 } #}}}
 
        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 (@) { #{{{
 # 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]].
 
 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
 ====
 
 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.
 
 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.).
 
 - `refreshpofiles` uses `system()`, whose args have to be checked more
   thoroughly to prevent any security issue (command injection, etc.).