From a2f6b62aa937a3298d0a5b09bd44467124f527ca Mon Sep 17 00:00:00 2001 From: MaxSem Date: Tue, 13 May 2014 03:00:48 +0000 Subject: [PATCH] Revert "Add API action=watch 'entirewatchlist' param to bulk-clear watchlist." Unbounded modification = replication lag. And this function is specifically intended for clearing very large watchlists which would easily escalate to pageable lags of several minutes. This reverts commit 66b07ea38133992f98bb158c95103b720fe958ec. Change-Id: Ie34be712884407e671d715e56bda3bff4a7e78f4 --- includes/api/ApiWatch.php | 60 +++++++++++---------------------------- 1 file changed, 17 insertions(+), 43 deletions(-) diff --git a/includes/api/ApiWatch.php b/includes/api/ApiWatch.php index 1fcc6793ac..6dfb1b4a83 100644 --- a/includes/api/ApiWatch.php +++ b/includes/api/ApiWatch.php @@ -47,49 +47,26 @@ class ApiWatch extends ApiBase { // by default we use pageset to extract the page to work on. // title is still supported for backward compatibility if ( !isset( $params['title'] ) ) { - if ( $params['entirewatchlist'] && $pageSet->getDataSource() !== null ) { - $this->dieUsage( - "Cannot use 'entirewatchlist' at the same time as '{$pageSet->getDataSource()}'", - 'multisource' - ); + $pageSet->execute(); + $res = $pageSet->getInvalidTitlesAndRevisions( array( + 'invalidTitles', + 'special', + 'missingIds', + 'missingRevIds', + 'interwikiTitles' + ) ); + + foreach ( $pageSet->getMissingTitles() as $title ) { + $r = $this->watchTitle( $title, $user, $params ); + $r['missing'] = 1; + $res[] = $r; } - if ( $params['entirewatchlist'] ) { - if ( !$params['unwatch'] ) { - $this->dieUsage( - "'entirewatchlist' option can only be used with 'unwatch' parameter.", - 'invalidparammix' - ); - } else { - // We're going to do this in the database as a bulk operation - // instead of one at a time, so it doesn't time out on largeish lists. - $dbw = wfGetDB( DB_MASTER ); - $dbw->delete( 'watchlist', array( 'wl_user' => $user->getId() ), __METHOD__ ); - $user->invalidateCache(); - $res = array(); - } - } else { - $pageSet->execute(); - $res = $pageSet->getInvalidTitlesAndRevisions( array( - 'invalidTitles', - 'special', - 'missingIds', - 'missingRevIds', - 'interwikiTitles' - ) ); - - foreach ( $pageSet->getMissingTitles() as $title ) { - $r = $this->watchTitle( $title, $user, $params ); - $r['missing'] = 1; - $res[] = $r; - } - - foreach ( $pageSet->getGoodTitles() as $title ) { - $r = $this->watchTitle( $title, $user, $params ); - $res[] = $r; - } - $this->getResult()->setIndexedTagName( $res, 'w' ); + foreach ( $pageSet->getGoodTitles() as $title ) { + $r = $this->watchTitle( $title, $user, $params ); + $res[] = $r; } + $this->getResult()->setIndexedTagName( $res, 'w' ); } else { // dont allow use of old title parameter with new pageset parameters. $extraParams = array_keys( array_filter( $pageSet->extractRequestParams(), function ( $x ) { @@ -198,7 +175,6 @@ class ApiWatch extends ApiBase { ApiBase::PARAM_DEPRECATED => true ), 'unwatch' => false, - 'entirewatchlist' => false, 'uselang' => null, 'token' => array( ApiBase::PARAM_TYPE => 'string', @@ -218,8 +194,6 @@ class ApiWatch extends ApiBase { return $psModule->getParamDescription() + array( 'title' => 'The page to (un)watch. use titles instead', 'unwatch' => 'If set the page will be unwatched rather than watched', - 'entirewatchlist' => 'Work on all watched pages without returning a list; ' - . 'can only be used together with \'unwatch\' option.', 'uselang' => 'Language to show the message in', 'token' => 'A token previously acquired via prop=info', ); -- 2.20.1