http://www.mediawiki.org/wiki/Special:Code/MediaWiki/99635
Revision: 99635
Author: nikerabbit
Date: 2011-10-12 16:23:54 +0000 (Wed, 12 Oct 2011)
Log Message:
-----------
* Fixed bug 31630: Renaming page translation page creates multiple log entries
** Replaced the old racy system with $objectcache->decr() which in theory can
be atomic
** Replaced $wgMemc with wfGetCache( CACHE_ANYTHING );
* Added target page as parameter to log moveok log entry
* Fixed the parameter in edit summaries of individual page moves to refer to
the base bage
* Fixed a fatal in TranslateEditAddons.php when editing a translation which is
in the process of being moved
Modified Paths:
--------------
trunk/extensions/Translate/PageTranslation.i18n.php
trunk/extensions/Translate/README
trunk/extensions/Translate/TranslateEditAddons.php
trunk/extensions/Translate/tag/MoveJob.php
trunk/extensions/Translate/tag/PageTranslationHooks.php
trunk/extensions/Translate/tag/SpecialPageTranslationMovePage.php
Modified: trunk/extensions/Translate/PageTranslation.i18n.php
===================================================================
--- trunk/extensions/Translate/PageTranslation.i18n.php 2011-10-12 15:42:42 UTC
(rev 99634)
+++ trunk/extensions/Translate/PageTranslation.i18n.php 2011-10-12 16:23:54 UTC
(rev 99635)
@@ -99,7 +99,7 @@
'pt-log-name' => 'Page translation log',
'pt-log-mark' => '{{GENDER:$2|marked}} revision $3 of page "[[:$1]]"
for translation',
'pt-log-unmark' => '{{GENDER:$2|removed}} page "[[:$1]]" from
translation',
- 'pt-log-moveok' => '{{GENDER:$2|completed}} renaming of translatable
page $1 to a new name',
+ 'pt-log-moveok' => '{{GENDER:$2|completed}} renaming of translatable
page $1 to $3',
'pt-log-movenok' => '{{GENDER:$2|encountered}} a problem while moving
[[:$1]] to [[:$3]]',
'pt-log-delete-full-ok' => '{{GENDER:$2|completed}} deletion of
translatable page $1',
'pt-log-delete-full-nok' => '{{GENDER:$2|encountered}} a problem while
deleting translatable page [[:$1]]',
Modified: trunk/extensions/Translate/README
===================================================================
--- trunk/extensions/Translate/README 2011-10-12 15:42:42 UTC (rev 99634)
+++ trunk/extensions/Translate/README 2011-10-12 16:23:54 UTC (rev 99635)
@@ -29,6 +29,8 @@
http://translatewiki.net/docs/Translate/html/
== Change log ==
+* 2011-10-12
+- Multiple bug fixes and improvements to translatable page moving feature
* 2011-10-07
- $wgTranslateNewsletterPreference was introduced (default: false). Setting
this
to true, will once again add the "Do not send me e-mail newsletters"
Modified: trunk/extensions/Translate/TranslateEditAddons.php
===================================================================
--- trunk/extensions/Translate/TranslateEditAddons.php 2011-10-12 15:42:42 UTC
(rev 99634)
+++ trunk/extensions/Translate/TranslateEditAddons.php 2011-10-12 16:23:54 UTC
(rev 99635)
@@ -31,6 +31,11 @@
}
$group = $handle->getGroup();
+ // Happens when translation page move is in progress
+ if ( !$group ) {
+ return true;
+ }
+
$key = $handle->getKey();
$code = $handle->getCode();
$collection = $group->initCollection(
$group->getSourceLanguage() );
Modified: trunk/extensions/Translate/tag/MoveJob.php
===================================================================
--- trunk/extensions/Translate/tag/MoveJob.php 2011-10-12 15:42:42 UTC (rev
99634)
+++ trunk/extensions/Translate/tag/MoveJob.php 2011-10-12 16:23:54 UTC (rev
99635)
@@ -9,28 +9,27 @@
*/
/**
- * Contains class with job for moving translation pages.
+ * Contains class with job for moving translation pages. Used together with
PageTranslationMovePage class.
*
* @ingroup PageTranslation JobQueue
- * @todo Get rid of direct reference to $wgMemc.
*/
class MoveJob extends Job {
/**
* @param $source Title
* @param $target Title
- * @param $base
+ * @param $params array, should include base-source and base-target
* @param $performer
* @return MoveJob
*/
- public static function newJob( Title $source, Title $target, $base,
/*User*/ $performer ) {
+ public static function newJob( Title $source, Title $target, array
$params, /*User*/ $performer ) {
global $wgTranslateFuzzyBotName;
$job = new self( $source );
$job->setUser( $wgTranslateFuzzyBotName );
$job->setTarget( $target->getPrefixedText() );
- $job->setSummary( wfMsgForContent( 'pt-movepage-logreason',
$target->getPrefixedText() ) );
- $job->setBase( $base );
+ $job->setSummary( wfMsgForContent( 'pt-movepage-logreason',
$params['base-source'] ) );
+ $job->setParams( $params );
$job->setPerformer( $performer );
$job->lock();
return $job;
@@ -49,7 +48,7 @@
$user = $this->getUser();
$summary = $this->getSummary();
$target = $this->getTarget();
- $base = $this->getBase();
+ $base = $this->params['base-source'];
PageTranslationHooks::$allowTargetEdit = true;
$oldUser = $wgUser;
@@ -74,21 +73,20 @@
$this->unlock();
- global $wgMemc;
- $pages = (array) $wgMemc->get( wfMemcKey( 'pt-base', $base ) );
- $last = true;
+
+ $cache = wfGetCache( CACHE_ANYTHING );
+ $key = wfMemcKey( 'translate-pt-move', $base );
+
+ $count = $cache->decr( $key );
+ $last = strval($count) === "0";
- foreach ( $pages as $page ) {
- if ( $wgMemc->get( wfMemcKey( 'pt-lock', $page ) ) ===
true ) {
- $last = false;
- break;
- }
- }
-
if ( $last ) {
- $wgMemc->delete( wfMemcKey( 'pt-base', $base ) );
+ $cache->delete( $key );
$logger = new LogPage( 'pagetranslation' );
- $params = array( 'user' => $this->getPerformer() );
+ $params = array(
+ 'user' => $this->getPerformer(),
+ 'target' => $this->params['base-target'],
+ );
$doer = User::newFromName( $this->getPerformer() );
$logger->addEntry( 'moveok', Title::newFromText( $base
), null, array( serialize( $params ) ), $doer );
}
@@ -106,14 +104,6 @@
return $this->params['summary'];
}
- public function setBase( $base ) {
- $this->params['base'] = $base;
- }
-
- public function getBase() {
- return $this->params['base'];
- }
-
public function setPerformer( $performer ) {
if ( is_object( $performer ) ) {
$this->params['performer'] = $performer->getName();
@@ -154,16 +144,22 @@
return User::newFromName( $this->params['user'], false );
}
+ public function setParams( array $params ) {
+ foreach ( $params as $k => $v ) {
+ $this->params[$k] = $v;
+ }
+ }
+
public function lock() {
- global $wgMemc;
- $wgMemc->set( wfMemcKey( 'pt-lock',
$this->title->getPrefixedText() ), true, 60 * 60 * 6 );
- $wgMemc->set( wfMemcKey( 'pt-lock',
$this->getTarget()->getPrefixedText() ), true, 60 * 60 * 6 );
+ $cache = wfGetCache( CACHE_ANYTHING );
+ $cache->set( wfMemcKey( 'pt-lock',
$this->title->getPrefixedText() ), true );
+ $cache->set( wfMemcKey( 'pt-lock',
$this->getTarget()->getPrefixedText() ), true );
}
public function unlock() {
- global $wgMemc;
- $wgMemc->delete( wfMemcKey( 'pt-lock',
$this->title->getPrefixedText() ) );
- $wgMemc->delete( wfMemcKey( 'pt-lock',
$this->getTarget()->getPrefixedText() ) );
+ $cache = wfGetCache( CACHE_ANYTHING );
+ $cache->delete( wfMemcKey( 'pt-lock',
$this->title->getPrefixedText() ) );
+ $cache->delete( wfMemcKey( 'pt-lock',
$this->getTarget()->getPrefixedText() ) );
}
/**
Modified: trunk/extensions/Translate/tag/PageTranslationHooks.php
===================================================================
--- trunk/extensions/Translate/tag/PageTranslationHooks.php 2011-10-12
15:42:42 UTC (rev 99634)
+++ trunk/extensions/Translate/tag/PageTranslationHooks.php 2011-10-12
16:23:54 UTC (rev 99635)
@@ -519,7 +519,9 @@
} elseif ( $action === 'unmark' ) {
return wfMsgExt( 'pt-log-unmark', $opts,
$title->getPrefixedText(), $user );
} elseif ( $action === 'moveok' ) {
- return wfMsgExt( 'pt-log-moveok', $opts,
$title->getPrefixedText(), $user );
+ // Old entries are missing the target
+ $target = isset( $_['target'] ) ? $_['target'] : '[[]]';
+ return wfMsgExt( 'pt-log-moveok', $opts,
$title->getPrefixedText(), $user, $target );
} elseif ( $action === 'movenok' ) {
return wfMsgExt( 'pt-log-movenok', $opts,
$title->getPrefixedText(), $user, $_['target'] );
} elseif ( $action === 'deletefnok' ) {
@@ -543,9 +545,10 @@
/// Hook: getUserPermissionsErrorsExpensive
public static function lockedPagesCheck( Title $title, User $user,
$action, &$result ) {
- global $wgMemc;
+ $cache = wfGetCache( CACHE_ANYTHING );
$key = wfMemcKey( 'pt-lock', $title->getPrefixedText() );
- if ( $wgMemc->get( $key ) === true ) {
+ // At least memcached mangles true to "1"
+ if ( $cache->get( $key ) == true ) {
$result = array( 'pt-locked-page' );
return false;
}
Modified: trunk/extensions/Translate/tag/SpecialPageTranslationMovePage.php
===================================================================
--- trunk/extensions/Translate/tag/SpecialPageTranslationMovePage.php
2011-10-12 15:42:42 UTC (rev 99634)
+++ trunk/extensions/Translate/tag/SpecialPageTranslationMovePage.php
2011-10-12 16:23:54 UTC (rev 99635)
@@ -353,16 +353,21 @@
$base = $this->oldTitle->getPrefixedText();
$oldLatest = $this->oldTitle->getLatestRevId();
+ $params = array(
+ 'base-source' => $this->oldTitle->getPrefixedText(),
+ 'base-target' => $this->newTitle->getPrefixedText(),
+ );
+
$translationPages = $this->getTranslationPages();
foreach ( $translationPages as $old ) {
$to = $this->newPageTitle( $base, $old, $target );
- $jobs[$old->getPrefixedText()] = MoveJob::newJob( $old,
$to, $base, $this->user );
+ $jobs[$old->getPrefixedText()] = MoveJob::newJob( $old,
$to, $params, $this->user );
}
$sectionPages = $this->getSectionPages();
foreach ( $sectionPages as $old ) {
$to = $this->newPageTitle( $base, $old, $target );
- $jobs[$old->getPrefixedText()] = MoveJob::newJob( $old,
$to, $base, $this->user );
+ $jobs[$old->getPrefixedText()] = MoveJob::newJob( $old,
$to, $params, $this->user );
}
if ( $this->moveSubpages ) {
@@ -373,15 +378,14 @@
}
$to = $this->newPageTitle( $base, $old, $target
);
- $jobs[$old->getPrefixedText()] =
MoveJob::newJob( $old, $to, $base, $this->user );
+ $jobs[$old->getPrefixedText()] =
MoveJob::newJob( $old, $to, $params, $this->user );
}
}
+ // This is used by MoveJob
+ wfGetCache( CACHE_ANYTHING )->set( wfMemcKey(
'translate-pt-move', $base ), count( $jobs ) );
Job::batchInsert( $jobs );
- global $wgMemc;
- $wgMemc->set( wfMemcKey( 'pt-base', $base ), array_keys( $jobs
), 60 * 60 * 6 );
-
MoveJob::forceRedirects( false );
$errors = $this->oldTitle->moveTo( $this->newTitle, true,
$this->reason, false );
_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs