* Remove inline `false` fallback in fetch().
load() does this already and can't return other falsey values
like null.
* Remove use of Database::getCacheSetOptions as this data is
generally not mutable.
* Remove foreach-wiki logic from clearInterwikiCache.php.
Usually to make scripts apply cross-wiki they are iterated
externally via something like foreachwiki (as WMF does) and
by using the `--wiki` parameter that core supports. Iterating
in-process is somewhat fragile and depended on various hardcoding
and assumptions, including e.g. BagOStuff::makeKey() and how
ClassicInterwikiLookup calls this.
Also fix clearInterwikiCache.php to actually work on simple wikis.
Previously it did nothing locally as $wgLocalDatabases is empty.
* Remove non-confident code from loadFromArray() for tolerating
absence of iw_url. Move the isset() check to the one place that
needs it, namely the hook handler in load(), and document what it
is for.
* Simplify load() usage by inlining and moving fetchPregenerated()
responsibility there.
* Simplify load() by merging the aborted and non-aborted hook cases,
and document the reasons explicitly.
* Move use of WikiMap::getCurrentWikiId() to the constructor
with TODO for proper injection.
* Rename a bunch of variables and apply more consistent terminology
within interwiki-related source code. In particular, it was
confusing that the variable 'objectCache' in fact did not cache
the objects, which are cached in 'localCache' instead. Use the
common naming found in other MW components instead ("wanCache" and
"instances").
Bug: T315315
Change-Id: If3429b0604974efd4ff5914660979d3e49266848
57 lines
1.6 KiB
PHP
57 lines
1.6 KiB
PHP
<?php
|
|
/**
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
* http://www.gnu.org/copyleft/gpl.html
|
|
*
|
|
* @file
|
|
* @ingroup Maintenance
|
|
*/
|
|
|
|
use MediaWiki\MediaWikiServices;
|
|
|
|
require_once __DIR__ . '/Maintenance.php';
|
|
|
|
/**
|
|
* Clear the cache of interwiki prefixes.
|
|
*
|
|
* @ingroup Maintenance
|
|
*/
|
|
class ClearInterwikiCache extends Maintenance {
|
|
|
|
public function __construct() {
|
|
parent::__construct();
|
|
$this->addDescription( 'Clear all interwiki links for all languages from the cache' );
|
|
}
|
|
|
|
public function execute() {
|
|
$lookup = MediaWikiServices::getInstance()->getInterwikiLookup();
|
|
|
|
$dbr = $this->getDB( DB_REPLICA );
|
|
$prefixes = $dbr->newSelectQueryBuilder()
|
|
->select( 'iw_prefix' )
|
|
->from( 'interwiki' )
|
|
->caller( __METHOD__ )
|
|
->fetchFieldValues();
|
|
|
|
foreach ( $prefixes as $prefix ) {
|
|
$this->output( "...$prefix\n" );
|
|
$lookup->invalidateCache( $prefix );
|
|
}
|
|
$this->output( "done\n" );
|
|
}
|
|
}
|
|
|
|
$maintClass = ClearInterwikiCache::class;
|
|
require_once RUN_MAINTENANCE_IF_MAIN;
|