rdbms: make replace()/upsert() use atomic sections
[lhc/web/wiklou.git] / maintenance / doMaintenance.php
index e649c9d..f3fb32c 100644 (file)
@@ -21,7 +21,6 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
- * @author Chad Horohoe <chad@anyonecanedit.org>
  * @file
  * @ingroup Maintenance
  */
@@ -35,7 +34,7 @@ if ( !defined( 'RUN_MAINTENANCE_IF_MAIN' ) ) {
 // Wasn't included from the file scope, halt execution (probably wanted the class)
 // If a class is using commandLine.inc (old school maintenance), they definitely
 // cannot be included and will proceed with execution
-if ( !Maintenance::shouldExecute() && $maintClass != 'CommandLineInc' ) {
+if ( !Maintenance::shouldExecute() && $maintClass != CommandLineInc::class ) {
        return;
 }
 
@@ -55,46 +54,30 @@ $maintenance->setup();
 // to $maintenance->mSelf. Keep that here for b/c
 $self = $maintenance->getName();
 
-# Start the autoloader, so that extensions can derive classes from core files
-require_once "$IP/includes/AutoLoader.php";
-# Grab profiling functions
-require_once "$IP/includes/profiler/ProfilerFunctions.php";
-
-# Start the profiler
-$wgProfiler = [];
-if ( file_exists( "$IP/StartProfiler.php" ) ) {
-       require "$IP/StartProfiler.php";
-}
-
-// Some other requires
-require_once "$IP/includes/Defines.php";
-require_once "$IP/includes/DefaultSettings.php";
-require_once "$IP/includes/GlobalFunctions.php";
-
-# Load composer's autoloader if present
-if ( is_readable( "$IP/vendor/autoload.php" ) ) {
-       require_once "$IP/vendor/autoload.php";
+// Define how settings are loaded (e.g. LocalSettings.php)
+if ( !defined( 'MW_CONFIG_CALLBACK' ) && !defined( 'MW_CONFIG_FILE' ) ) {
+       define( 'MW_CONFIG_FILE', $maintenance->loadSettings() );
 }
 
-if ( defined( 'MW_CONFIG_CALLBACK' ) ) {
-       # Use a callback function to configure MediaWiki
-       call_user_func( MW_CONFIG_CALLBACK );
-} else {
-       // Require the configuration (probably LocalSettings.php)
-       require $maintenance->loadSettings();
-}
-
-if ( $maintenance->getDbType() === Maintenance::DB_NONE ) {
-       if ( $wgLocalisationCacheConf['storeClass'] === false
-               && ( $wgLocalisationCacheConf['store'] == 'db'
-                       || ( $wgLocalisationCacheConf['store'] == 'detect' && !$wgCacheDirectory ) )
-       ) {
-               $wgLocalisationCacheConf['storeClass'] = 'LCStoreNull';
+// Custom setup for Maintenance entry point
+if ( !defined( 'MW_SETUP_CALLBACK' ) ) {
+       function wfMaintenanceSetup() {
+               // phpcs:ignore MediaWiki.NamingConventions.ValidGlobalName.wgPrefix
+               global $maintenance, $wgLocalisationCacheConf, $wgCacheDirectory;
+               if ( $maintenance->getDbType() === Maintenance::DB_NONE ) {
+                       if ( $wgLocalisationCacheConf['storeClass'] === false
+                               && ( $wgLocalisationCacheConf['store'] == 'db'
+                                       || ( $wgLocalisationCacheConf['store'] == 'detect' && !$wgCacheDirectory ) )
+                       ) {
+                               $wgLocalisationCacheConf['storeClass'] = LCStoreNull::class;
+                       }
+               }
+
+               $maintenance->finalSetup();
        }
+       define( 'MW_SETUP_CALLBACK', 'wfMaintenanceSetup' );
 }
 
-$maintenance->finalSetup();
-// Some last includes
 require_once "$IP/includes/Setup.php";
 
 // Initialize main config instance
@@ -113,14 +96,18 @@ $maintenance->execute();
 // Potentially debug globals
 $maintenance->globals();
 
-// Perform deferred updates.
-$lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
-$lbFactory->commitMasterChanges( $maintClass );
-DeferredUpdates::doUpdates();
+if ( $maintenance->getDbType() !== Maintenance::DB_NONE ) {
+       // Perform deferred updates.
+       $lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
+       $lbFactory->commitMasterChanges( $maintClass );
+       DeferredUpdates::doUpdates();
+}
 
 // log profiling info
 wfLogProfilingData();
 
-// Commit and close up!
-$lbFactory->commitMasterChanges( 'doMaintenance' );
-$lbFactory->shutdown( $lbFactory::SHUTDOWN_NO_CHRONPROT );
+if ( isset( $lbFactory ) ) {
+       // Commit and close up!
+       $lbFactory->commitMasterChanges( 'doMaintenance' );
+       $lbFactory->shutdown( $lbFactory::SHUTDOWN_NO_CHRONPROT );
+}