rebuildLocalisationCache: Implement --lang option
authorAntoine Musso <hashar@free.fr>
Tue, 30 Apr 2013 14:50:20 +0000 (16:50 +0200)
committerAntoine Musso <hashar@free.fr>
Wed, 1 May 2013 10:33:12 +0000 (12:33 +0200)
It would rebuild all language caches by default.
We were lacking an option to rebuild only one language, for example when
it get corrupted or the cache file for a language got removed.

The new --lang accepts a list of comma separated langs to rebuild the
cache for.  Example usage:

 php rebuildLocalisationCache.php --lang en,fr,de

Nonexistent languages are simply ignored. The script dies if it ends up
with no languages to rebuild.

Change-Id: I4c5e69abb76ffd8b88b595e3687edab3bb267ccc

RELEASE-NOTES-1.22
maintenance/rebuildLocalisationCache.php

index aad11a0..eea9756 100644 (file)
@@ -56,6 +56,8 @@ production.
   language links associated with a page before display.
 * Chosen (http://harvesthq.github.io/chosen/) was added as module 'jquery.chosen'
 * HTMLForm will turn multiselect checkboxes into a Chosen interface when setting cssclass 'mw-chosen'
+* rebuildLocalisationCache learned --lang option. Let you rebuild l10n caches
+  of the specified languages instead of all of them.
 
 === Bug fixes in 1.22 ===
 * Disable Special:PasswordReset when $wgEnableEmail. Previously one could still
index db77564..81e8904 100644 (file)
@@ -44,6 +44,8 @@ class RebuildLocalisationCache extends Maintenance {
                $this->addOption( 'threads', 'Fork more than one thread', false, true );
                $this->addOption( 'outdir', 'Override the output directory (normally $wgCacheDirectory)',
                        false, true );
+               $this->addOption( 'lang', 'Only rebuild these languages, comma separated.',
+                       false, true );
        }
 
        public function memoryLimit() {
@@ -90,7 +92,19 @@ class RebuildLocalisationCache extends Maintenance {
                }
                $lc = new LocalisationCache_BulkLoad( $conf );
 
-               $codes = array_keys( Language::fetchLanguageNames( null, 'mwfile' ) );
+               $allCodes = array_keys( Language::fetchLanguageNames( null, 'mwfile' ) );
+               if( $this->hasOption( 'lang' ) ) {
+                       # Validate requested languages
+                       $codes = array_intersect( $allCodes,
+                               explode( ',', $this->getOption( 'lang' ) ) );
+                       # Bailed out if nothing is left
+                       if( count( $codes ) == 0 ) {
+                               $this->error( 'None of the languages specified exists.', 1 );
+                       }
+               } else {
+                       # By default get all languages
+                       $codes = $allCodes;
+               }
                sort( $codes );
 
                // Initialise and split into chunks