X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=includes%2FRevision.php;h=c3782ba18a9af2f3a5de40e83b387938d0beec38;hb=9592331197eef7abdb2894e73f6978028f640c9f;hp=dca2e1b5695177d5561070b99dac42030eb545f6;hpb=49748181dd56ec97e7ba7c13e684a16abceb3cc0;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/Revision.php b/includes/Revision.php index dca2e1b569..c3782ba18a 100644 --- a/includes/Revision.php +++ b/includes/Revision.php @@ -19,6 +19,9 @@ * * @file */ + +use Wikimedia\Rdbms\Database; +use Wikimedia\Rdbms\IDatabase; use MediaWiki\Linker\LinkTarget; use MediaWiki\MediaWikiServices; use Wikimedia\Rdbms\ResultWrapper; @@ -1279,12 +1282,15 @@ class Revision implements IDBAccessObject { if ( isset( $row->old_id ) && $wiki === false ) { // Make use of the wiki-local revision text cache $cache = MediaWikiServices::getInstance()->getMainWANObjectCache(); - $text = $cache->getWithSetCallback( + // The cached value should be decompressed, so handle that and return here + return $cache->getWithSetCallback( $cache->makeKey( 'revisiontext', 'textid', $row->old_id ), self::getCacheTTL( $cache ), - function () use ( $url, $wiki ) { + function () use ( $url, $wiki, $flags ) { // No negative caching per Revision::loadText() - return ExternalStore::fetchFromURL( $url, [ 'wiki' => $wiki ] ); + $text = ExternalStore::fetchFromURL( $url, [ 'wiki' => $wiki ] ); + + return self::decompressRevisionText( $text, $flags ); }, [ 'pcGroup' => self::TEXT_CACHE_GROUP, 'pcTTL' => $cache::TTL_PROC_LONG ] ); @@ -1293,12 +1299,7 @@ class Revision implements IDBAccessObject { } } - // If the text was fetched without an error, convert it - if ( $text !== false ) { - $text = self::decompressRevisionText( $text, $flags ); - } - - return $text; + return self::decompressRevisionText( $text, $flags ); } /** @@ -1344,6 +1345,13 @@ class Revision implements IDBAccessObject { * @return string|bool Decompressed text, or false on failure */ public static function decompressRevisionText( $text, $flags ) { + global $wgLegacyEncoding, $wgContLang; + + if ( $text === false ) { + // Text failed to be fetched; nothing to do + return false; + } + if ( in_array( 'gzip', $flags ) ) { # Deal with optional compression of archived pages. # This can be done periodically via maintenance/compressOld.php, and @@ -1366,7 +1374,6 @@ class Revision implements IDBAccessObject { $text = $obj->getText(); } - global $wgLegacyEncoding; if ( $text !== false && $wgLegacyEncoding && !in_array( 'utf-8', $flags ) && !in_array( 'utf8', $flags ) ) { @@ -1374,7 +1381,6 @@ class Revision implements IDBAccessObject { # Upconvert on demand. # ("utf8" checked for compatibility with some broken # conversion scripts 2008-12-30) - global $wgContLang; $text = $wgContLang->iconv( $wgLegacyEncoding, 'UTF-8', $text ); } @@ -1490,7 +1496,10 @@ class Revision implements IDBAccessObject { $dbw->insert( 'revision', $row, __METHOD__ ); - $this->mId = $rev_id !== null ? $rev_id : $dbw->insertId(); + if ( $this->mId === null ) { + // Only if nextSequenceValue() was called + $this->mId = $dbw->insertId(); + } // Assertion to try to catch T92046 if ( (int)$this->mId === 0 ) {