wiki.techinc.nl/maintenance/clearInterwikiCache.php

60 lines
1.7 KiB
PHP
Raw Normal View History

2005-01-04 12:30:49 +00:00
<?php
2005-01-27 23:25:16 +00:00
/**
* 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
2005-01-27 23:25:16 +00:00
*/
// @codeCoverageIgnoreStart
require_once __DIR__ . '/Maintenance.php';
// @codeCoverageIgnoreEnd
2005-01-04 12:30:49 +00:00
/**
interwiki: Overall clean up and simplification * 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
2022-08-16 21:14:40 +00:00
* 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 = $this->getServiceContainer()->getInterwikiLookup();
interwiki: Overall clean up and simplification * 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
2022-08-16 21:14:40 +00:00
$dbr = $this->getReplicaDB();
interwiki: Overall clean up and simplification * 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
2022-08-16 21:14:40 +00:00
$prefixes = $dbr->newSelectQueryBuilder()
->select( 'iw_prefix' )
->from( 'interwiki' )
->caller( __METHOD__ )
interwiki: Overall clean up and simplification * 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
2022-08-16 21:14:40 +00:00
->fetchFieldValues();
interwiki: Overall clean up and simplification * 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
2022-08-16 21:14:40 +00:00
foreach ( $prefixes as $prefix ) {
$this->output( "...$prefix\n" );
$lookup->invalidateCache( $prefix );
}
interwiki: Overall clean up and simplification * 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
2022-08-16 21:14:40 +00:00
$this->output( "done\n" );
2005-01-04 12:30:49 +00:00
}
}
// @codeCoverageIgnoreStart
$maintClass = ClearInterwikiCache::class;
require_once RUN_MAINTENANCE_IF_MAIN;
// @codeCoverageIgnoreEnd