use MediaWiki\Preferences\DefaultPreferencesFactory;
use MediaWiki\Shell\CommandFactory;
use MediaWiki\Storage\BlobStoreFactory;
+use MediaWiki\Storage\NameTableStore;
use MediaWiki\Storage\RevisionStore;
use MediaWiki\Storage\SqlBlobStore;
use Wikimedia\ObjectFactory;
);
$class = MWLBFactory::getLBFactoryClass( $lbConf );
- return new $class( $lbConf );
+ $instance = new $class( $lbConf );
+ MWLBFactory::setSchemaAliases( $instance );
+
+ return $instance;
},
'DBLoadBalancer' => function ( MediaWikiServices $services ) {
$store = new WatchedItemStore(
$services->getDBLoadBalancer(),
new HashBagOStuff( [ 'maxKeys' => 100 ] ),
- $services->getReadOnlyMode()
+ $services->getReadOnlyMode(),
+ $services->getMainConfig()->get( 'UpdateRowsPerQuery' )
);
$store->setStatsdDataFactory( $services->getStatsdDataFactory() );
'WatchedItemQueryService' => function ( MediaWikiServices $services ) {
return new WatchedItemQueryService(
$services->getDBLoadBalancer(),
- $services->getCommentStore()
+ $services->getCommentStore(),
+ $services->getActorMigration()
);
},
$detectorCmd = $mainConfig->get( 'MimeDetectorCommand' );
if ( $detectorCmd ) {
- $params['detectCallback'] = function ( $file ) use ( $detectorCmd ) {
- return wfShellExec( "$detectorCmd " . wfEscapeShellArg( $file ) );
+ $factory = $services->getShellCommandFactory();
+ $params['detectCallback'] = function ( $file ) use ( $detectorCmd, $factory ) {
+ $result = $factory->create()
+ // $wgMimeDetectorCommand can contain commands with parameters
+ ->unsafeParams( $detectorCmd )
+ ->params( $file )
+ ->execute();
+ return $result->getStdout();
};
}
);
},
+ 'UploadRevisionImporter' => function ( MediaWikiServices $services ) {
+ return new ImportableUploadRevisionImporter(
+ $services->getMainConfig()->get( 'EnableUploads' ),
+ LoggerFactory::getInstance( 'UploadRevisionImporter' )
+ );
+ },
+
+ 'OldRevisionImporter' => function ( MediaWikiServices $services ) {
+ return new ImportableOldRevisionImporter(
+ true,
+ LoggerFactory::getInstance( 'OldRevisionImporter' ),
+ $services->getDBLoadBalancer()
+ );
+ },
+
+ 'WikiRevisionOldRevisionImporterNoUpdates' => function ( MediaWikiServices $services ) {
+ return new ImportableOldRevisionImporter(
+ false,
+ LoggerFactory::getInstance( 'OldRevisionImporter' ),
+ $services->getDBLoadBalancer()
+ );
+ },
+
'ShellCommandFactory' => function ( MediaWikiServices $services ) {
$config = $services->getMainConfig();
$services->getDBLoadBalancer(),
$blobStore,
$services->getMainWANObjectCache(),
- $services->getCommentStore()
+ $services->getCommentStore(),
+ $services->getActorMigration()
);
$store->setLogger( LoggerFactory::getInstance( 'RevisionStore' ) );
return $services->getBlobStoreFactory()->newSqlBlobStore();
},
+ 'ContentModelStore' => function ( MediaWikiServices $services ) {
+ return new NameTableStore(
+ $services->getDBLoadBalancer(),
+ $services->getMainWANObjectCache(),
+ LoggerFactory::getInstance( 'NameTableSqlStore' ),
+ 'content_models',
+ 'model_id',
+ 'model_name'
+ /**
+ * No strtolower normalization is added to the service as there are examples of
+ * extensions that do not stick to this assumption.
+ * - extensions/examples/DataPages define( 'CONTENT_MODEL_XML_DATA','XML_DATA' );
+ * - extensions/Scribunto define( 'CONTENT_MODEL_SCRIBUNTO', 'Scribunto' );
+ */
+ );
+ },
+
+ 'SlotRoleStore' => function ( MediaWikiServices $services ) {
+ return new NameTableStore(
+ $services->getDBLoadBalancer(),
+ $services->getMainWANObjectCache(),
+ LoggerFactory::getInstance( 'NameTableSqlStore' ),
+ 'slot_roles',
+ 'role_id',
+ 'role_name',
+ 'strtolower'
+ );
+ },
+
'PreferencesFactory' => function ( MediaWikiServices $services ) {
global $wgContLang;
$authManager = AuthManager::singleton();
$wgContLang,
$services->getMainConfig()->get( 'CommentTableSchemaMigrationStage' )
);
- }
+ },
+
+ 'ActorMigration' => function ( MediaWikiServices $services ) {
+ return new ActorMigration(
+ $services->getMainConfig()->get( 'ActorTableSchemaMigrationStage' )
+ );
+ },
///////////////////////////////////////////////////////////////////////////
// NOTE: When adding a service here, don't forget to add a getter function