Fix SQLite patch-(page|template)links-fix-pk.sql column order
[lhc/web/wiklou.git] / maintenance / refreshLinks.php
index 578a226..8306243 100644 (file)
@@ -21,6 +21,7 @@
  * @ingroup Maintenance
  */
 
+use MediaWiki\MediaWikiServices;
 use Wikimedia\Rdbms\IDatabase;
 
 require_once __DIR__ . '/Maintenance.php';
@@ -70,7 +71,7 @@ class RefreshLinks extends Maintenance {
                if ( ( $category = $this->getOption( 'category', false ) ) !== false ) {
                        $title = Title::makeTitleSafe( NS_CATEGORY, $category );
                        if ( !$title ) {
-                               $this->error( "'$category' is an invalid category name!\n", true );
+                               $this->fatalError( "'$category' is an invalid category name!\n" );
                        }
                        $this->refreshCategory( $title );
                } elseif ( ( $category = $this->getOption( 'tracking-category', false ) ) !== false ) {
@@ -80,9 +81,9 @@ class RefreshLinks extends Maintenance {
                        $redir = $this->hasOption( 'redirects-only' );
                        $oldRedir = $this->hasOption( 'old-redirects-only' );
                        $this->doRefreshLinks( $start, $new, $end, $redir, $oldRedir );
-                       $this->deleteLinksFromNonexistent( null, null, $this->mBatchSize, $dfnChunkSize );
+                       $this->deleteLinksFromNonexistent( null, null, $this->getBatchSize(), $dfnChunkSize );
                } else {
-                       $this->deleteLinksFromNonexistent( $start, $end, $this->mBatchSize, $dfnChunkSize );
+                       $this->deleteLinksFromNonexistent( $start, $end, $this->getBatchSize(), $dfnChunkSize );
                }
        }
 
@@ -170,8 +171,8 @@ class RefreshLinks extends Maintenance {
                        }
                } else {
                        if ( !$end ) {
-                               $maxPage = $dbr->selectField( 'page', 'max(page_id)', false );
-                               $maxRD = $dbr->selectField( 'redirect', 'max(rd_from)', false );
+                               $maxPage = $dbr->selectField( 'page', 'max(page_id)', '', __METHOD__ );
+                               $maxRD = $dbr->selectField( 'redirect', 'max(rd_from)', '', __METHOD__ );
                                $end = max( $maxPage, $maxRD );
                        }
                        $this->output( "Refreshing redirects table.\n" );
@@ -258,7 +259,7 @@ class RefreshLinks extends Maintenance {
        public static function fixLinksFromArticle( $id, $ns = false ) {
                $page = WikiPage::newFromID( $id );
 
-               LinkCache::singleton()->clear();
+               MediaWikiServices::getInstance()->getLinkCache()->clear();
 
                if ( $page === null ) {
                        return;
@@ -267,17 +268,14 @@ class RefreshLinks extends Maintenance {
                        return;
                }
 
-               $content = $page->getContent( Revision::RAW );
-               if ( $content === null ) {
-                       return;
-               }
-
-               $updates = $content->getSecondaryDataUpdates(
-                       $page->getTitle(), /* $old = */ null, /* $recursive = */ false );
-               foreach ( $updates as $update ) {
-                       DeferredUpdates::addUpdate( $update );
-                       DeferredUpdates::doUpdates();
-               }
+               // Defer updates to post-send but then immediately execute deferred updates;
+               // this is the simplest way to run all updates immediately (including updates
+               // scheduled by other updates).
+               $page->doSecondaryDataUpdates( [
+                       'defer' => DeferredUpdates::POSTSEND,
+                       'recursive' => false,
+               ] );
+               DeferredUpdates::doUpdates();
        }
 
        /**
@@ -448,7 +446,7 @@ class RefreshLinks extends Maintenance {
                do {
                        $finalConds = $conds;
                        $timestamp = $dbr->addQuotes( $timestamp );
-                       $finalConds []=
+                       $finalConds [] =
                                "(cl_timestamp > $timestamp OR (cl_timestamp = $timestamp AND cl_from > $lastId))";
                        $res = $dbr->select( [ 'page', 'categorylinks' ],
                                [ 'page_id', 'cl_timestamp' ],
@@ -456,7 +454,7 @@ class RefreshLinks extends Maintenance {
                                __METHOD__,
                                [
                                        'ORDER BY' => [ 'cl_timestamp', 'cl_from' ],
-                                       'LIMIT' => $this->mBatchSize,
+                                       'LIMIT' => $this->getBatchSize(),
                                ]
                        );
 
@@ -470,7 +468,7 @@ class RefreshLinks extends Maintenance {
                                self::fixLinksFromArticle( $row->page_id );
                        }
 
-               } while ( $res->numRows() == $this->mBatchSize );
+               } while ( $res->numRows() == $this->getBatchSize() );
        }
 
        /**
@@ -485,9 +483,9 @@ class RefreshLinks extends Maintenance {
                if ( isset( $cats[$categoryKey] ) ) {
                        return $cats[$categoryKey]['cats'];
                }
-               $this->error( "Unknown tracking category {$categoryKey}\n", true );
+               $this->fatalError( "Unknown tracking category {$categoryKey}\n" );
        }
 }
 
-$maintClass = 'RefreshLinks';
+$maintClass = RefreshLinks::class;
 require_once RUN_MAINTENANCE_IF_MAIN;