Commit graph

122 commits

Author SHA1 Message Date
Reedy
6aaaa070f3 Remove MimeMagic
Deprecated since 1.28

Change-Id: I793deb8669e353525464ccd840801e5015c545c8
2018-09-23 20:13:29 +00:00
Tim Starling
0ecfe75502 Introduce NameTableStoreFactory
With a separate service for each of the NameTableStore tables, it
wasn't possible to instantiate a NameTableStore for a foreign wiki,
leading to the inelegant situation of having RevisionStoreFactory
construct a new NameTableStoreFactory every time a RevisionStore for a
foreign wiki was requested. These NameTableStore objects were not
tracked in any structured way, so there was no way to reset them for
tests.

So, introduce NameTableStoreFactory, which tracks object instances for
both local and remote table access.

This also avoids having schema details in ServiceWiring.php.

Depends-On: I5c78cfb8bf90eca935a3264592366f63517c4fad
Bug: T202641
Change-Id: Ic0f2d1d94bad9dcc047ff19a1f92db89b7e014ce
2018-09-04 15:08:38 +10:00
daniel
e9f71517f7 [MCR] Introduce RevisionRenderer
RevisionRenderer is the MCR replacement for Content::getParserOutput,
as outlined in <https://www.mediawiki.org/wiki/User:Daniel_Kinzler_(WMDE)/MCR-PageUpdater>.

Note: This change also introduces quite a bit of code for
merging ParserOutput objects.

Bug: T194048
Change-Id: I871978bf79f67c9e7954fb3fc8528d6e365f2cc1
2018-08-30 19:15:12 +02:00
Tim Starling
f2f82dcb94 The BlobStoreFactory constructor needs an LBFactory
BlobStoreFactory::newBlobStore() takes a wiki ID as a parameter, so it
needs an LBFactory to fetch the correct LoadBalancer from.

Bug: T202483
Change-Id: I834cd95251d76cb862600362525faf60d4e170b9
2018-08-22 16:47:04 +10:00
addshore
82b19bd96a Create and use PrefixingStatsdDataFactoryProxy in PerDbNameStatsdDataFactory
MediaWiki::emitBufferedStatsdData() is never called for the PerDbName factory,
so stats were being dropped. Instead of having two factories, turn the
PerDbName one into a proxy/wrapper around the main factory that just adds a
prefix in front of all of the keys.

Bug: T202144
Change-Id: I31e376446abb58e41353b4ca3814120d2e914104
2018-08-19 00:19:57 -07:00
Kunal Mehta
2852255186 Inject SpecialPageFactory into Parser
Change-Id: I6a6a94cbdafdc724ce02408cd9e744e7b3eda92b
2018-08-17 12:03:13 -07:00
jenkins-bot
532b15c800 Merge "Make SpecialPageFactory a service" 2018-08-17 18:53:27 +00:00
Aryeh Gregor
d4045035b0 Make SpecialPageFactory a service
Calling SpecialPageFactory methods statically is now soft-deprecated.

SpecialPageFactory::resetList() is a no-op, and I changed tests
in core to use overrideMwServices() instead.

Methods that fell back to $wgUser now require a User object being passed.

Depends-On: Ie1f80315871085b9fd4763a265b588849d94414d
Change-Id: Id8a92d57743f790b7d8c377c033cef38d1bb24de
2018-08-17 11:12:23 -07:00
Kunal Mehta
95a68fb889 Actually inject InterwikiLookup into MediaWikiTitleCodec
Change-Id: Ic469f0fb8068bfb06b741d957b21e66dfa839cd6
2018-08-15 00:15:04 -07:00
Aryeh Gregor
bca6085920 Use ParserFactory in a bunch of places
I wasn't sure how to convert the rest of the occurrences in core (there
are a significant number).

Bug: T200881
Change-Id: I114bba946cd3ea8a293121e275588c3c4d174f94
2018-08-11 00:16:17 -06:00
Aryeh Gregor
62515f7b15 Introduce ParserFactory service
Bug: T200881
Change-Id: I257e78200983cb10afb76de1f07dd1b9d531c52a
2018-08-11 00:15:52 -06:00
Fomafix
810735a103 ServiceWiring: Avoid once used local variables
Also make the indenting and wrapping of the lines like in the other
functions.

Change-Id: I87adf7dfe518425e38a15406a432d1f91917d4e1
2018-08-10 12:37:23 +02:00
Aryeh Gregor
1174776e47 Don't require a list of services in tests
We already have two lists in other files, there's no need for a third.

Change-Id: I516a26e1170834b27aafeb0049a5893ec965d820
2018-08-10 04:28:31 +00:00
Aryeh Gregor
3c45e203a8 Alphabetize service lists
Adding everything at the end makes the list arbitrarily ordered, and
also invites lots of merge conflicts as new things are added.

Change-Id: I58bcca4fa79140f5d5f2f6ef447e67035cc37aae
2018-08-09 22:19:58 -06:00
jenkins-bot
725b19d315 Merge "Introduce RevisionStoreFactory & Tests" 2018-08-02 20:39:54 +00:00
jenkins-bot
004ee6bf5e Merge "Fix PerDbnameStatsdDataFactory metric prefix again" 2018-08-02 20:35:13 +00:00
addshore
f5cc67524d Introduce RevisionStoreFactory & Tests
This is based on I0a8a441b803, which was reverted because it was
incomplete.

Bug: T198701
Change-Id: I3e4a5f1ef687418c06dfc979cfe04da336e876b1
2018-08-02 18:55:29 +00:00
Kunal Mehta
fb73286fba Add PasswordFactory to MediaWikiServices
Instead of having basically every caller do:
 $pf = new PasswordFactory();
 $pf->init( RequestContext::getMain()->getConfig() );
Just create a single PasswordFactory via MediaWikiServices and pass that
around. Things that want to use their own config can still pass settings
via the new constructor.

This will eventually let us remove the init() function, removing the
only hard dependency upon MediaWiki, to make it easier to librarize
(T89742).

Change-Id: I0fc7520dc023b11a7fa66083eff7b88ebfe49c7b
2018-08-02 14:46:35 +01:00
addshore
7de2f11c1d Fix PerDbnameStatsdDataFactory metric prefix again
prefix = 'MediaWiki.' will result in 'MediaWiki..dbname'

Preventing that is the only purpose of the rtrim(), we don't support
whitespace there

Change-Id: I72383aae908dbc89688cd3bebba36d389cde3f29
2018-08-01 22:22:13 +01:00
Aryeh Gregor
6d36883ed8 Update ServiceWiring to use ContentLanguage
Bug: T200246
Change-Id: I626030e9ad0f2a6c60bddb0b05e842eb1ac56da7
2018-08-01 10:38:53 +00:00
Aryeh Gregor
1e079652e0 Introduce ContentLanguage service to replace $wgContLang
Bug: T200246
Depends-On: I31c2e20fc70ba3cbc124b9f462f4924a139dd9bd
Depends-On: I4aaf1c641ec6abef214eb96c0e4b42a67488ac00
Depends-On: I461cf2f441a4040bb15d6c4bb93ce6114c143845
Depends-On: I4b1cc4257348d1773fd2ccf045966261f801e7d0
Depends-On: I9790b7efdd484366dc36eb8880778aea1a559e5e
Change-Id: I193f5b9a95430b0a05573c361715e053e5411e32
2018-07-31 21:42:53 -07:00
jenkins-bot
07d1307029 Merge "Fix PerDbnameStatsdDataFactory metric prefix" 2018-07-31 09:50:32 +00:00
Aryeh Gregor
c3ee073d62 Update Parser to use MagicWordFactory
Bug: T200247
Depends-On: Ie061fe90f9b9eca0cbf7e8199d9ca325c464867a
Change-Id: Iab6a4cb32c491caf2685cdd68f9465ef1dfa3c4c
2018-07-30 21:20:43 +03:00
Aryeh Gregor
5189333c39 MagicWordFactory to replace MagicWord static members/methods
Static members of MagicWord have been removed.

Static methods are soft-deprecated and forward to the factory.  They
will be hard-deprecated when all callers are removed from core.

MagicWord::clearCache() has been removed.  Instead, call
resetServiceForTesting( 'MagicWordFactory' ) on your MediaWikiServices
object.

Change-Id: Ie061fe90f9b9eca0cbf7e8199d9ca325c464867a
Bug: T200247
2018-07-30 21:20:43 +03:00
addshore
d42d4863dc Fix PerDbnameStatsdDataFactory metric prefix
This was reporting Mediawikiwikidatawiki for example as the '.'
was added inside the rtrim call

Bug: T196609
Bug: T200424
Change-Id: Ia8e51371b9a27ed14ec55bb34a52ec9e65ad55cf
2018-07-26 12:32:26 +00:00
jenkins-bot
7ca601fd08 Merge "config: Add new ConfigRepository" 2018-07-19 14:40:26 +00:00
Florian Schmidt
418cb8d9b3 config: Add new ConfigRepository
This, for now, has the focus for holding metadata of each
configuration option inside of MediaWiki (both extensions and core).
It's very close to the Config interface and friends, and uses these
implementations to retrieve the actual value of the
configuration option.

The goal with this change is to implement a basic architecture to
allow to display the values of the curent configuration of the MediaWiki
installation on-wiki (e.g. on a special page). It also provides a
central point, where the currently known options can be fetched
from.

The long-term goal, of course, would be to get a web interface to really
configure the MediaWiki installation. But, this is more like a dream,
then a plan (from the point of view of this commit).

Next steps would be:
 * Enable ExtensionRegistry to "register" the configuration options of
   extensions, so they're available in the repo (done).
 * Find a good way to get mediawiki/core configurations into this repo
 * Work out an overall architecture to display the different possible
   values. (I think about something like different formatters for types).

Change-Id: I9419508eaa85ffc55520db7f33b3e9530fc99f00
2018-07-19 14:21:56 +00:00
jenkins-bot
368c698631 Merge "Revert "Introduce RevisionStoreFactory & Tests"" 2018-07-05 15:08:36 +00:00
Addshore
2a6af6854d Revert "Introduce RevisionStoreFactory & Tests"
This needs more work, I'll file some tickets with TODOs

This reverts commit eb39d5f945.

Change-Id: I0678d0c4e4e7496a67dfe826b00246723e9c7d54
2018-07-03 14:32:44 +01:00
addshore
72c50093a4 Add MediaWikiService::getPerDbNameStatsdDataFactory
Bug: T196609
Change-Id: I08a4909e2855e33569641166b77be5d8bf4e2c34
2018-07-02 18:31:03 +01:00
addshore
eb39d5f945 Introduce RevisionStoreFactory & Tests
Bug: T194729
Change-Id: I0a8a441b803816281113e52a2a57cc07af8a1119
2018-06-29 12:55:20 +00:00
Amir Sarabadani
bd8cd912a7 Turning change_tag_def store to a service
This will be useful when reading the table.

Bug: T194162
Change-Id: I8c0a0075910a79465a648a052b4e7fbc888b10e7
2018-06-21 09:40:56 +02:00
addshore
125bf7e44f [MCR] RevisionStore, enable insertions for new schema
Enable inserts to the new MCR db schema in single slot mode only.

TODO:
 - RELEASE NOTES

Notes:
 - When in MIGRATION_WRITE_NEW or greater, deleting and then
 restoring a page will result in different data in the revision table.
 For example, if you delete a page that has text_ids present in the
 revision table and restore it, the text_ids will be blank after.
 - When in MIGRATION_WRITE_BOTH or greater the archive table will
 start to ar_content_model entries where previously it would have been
 given NULL. This is due to the old content schema having NULL in the db
 when the default content model is used, but the new schema will always
 have a value, taken from the content_models table

Note: If259b1e1c49ce was squashed into this change.

Bug: T183488
Bug: T174024
Change-Id: Ic2221da30c8f6ac2ba42720fcd568f2d0ed70534
2018-06-14 13:36:08 +00:00
Max Semenik
9bab7de5f8 Clean up CSPRNG support for PHP7
Replace it all with random_bytes(), leave
only MWCryptRand::generateHex() as a convenience helper.

Change-Id: Ic30376a90e66d8f00dab86e7e6466fb3a750b87d
2018-06-10 00:52:04 +00:00
Bartosz Dziewoński
485f66f174 Use PHP 7 '??' operator instead of '?:' with 'isset()' where convenient
Find: /isset\(\s*([^()]+?)\s*\)\s*\?\s*\1\s*:\s*/
Replace with: '\1 ?? '

(Everywhere except includes/PHPVersionCheck.php)
(Then, manually fix some line length and indentation issues)

Then manually reviewed the replacements for cases where confusing
operator precedence would result in incorrect results
(fixing those in I478db046a1cc162c6767003ce45c9b56270f3372).

Change-Id: I33b421c8cb11cdd4ce896488c9ff5313f03a38cf
2018-05-30 18:06:13 -07:00
Max Semenik
69aecc2eea Don't initialize MediaWikiServices before extensions have been loaded
Bug: T153256
Bug: T190425
Change-Id: I749f66d13a8c8a8ae4a83661b83c56f0db74a187
2018-05-03 23:36:10 -07:00
Aaron Schulz
628a3a9b26 rdbms: make sure cpPosIndex cookie is applied to LBFactory in time
Once getMain() was called in setSchemaAliases(), the ChronologyProtector
was initialized and the setRequestInfo() call in Setup.php had no effect.
Only the request values read in LBFactory::__construct() were used, which
reflect $_GET but not cookie values.

Use the $wgDBtype variable to avoid this and add an exception when that
sort of thing happens.

Further defer instantiation of ChronologyProtector so that methods like
ILBFactory::getMainLB() do not trigger construction.

Bug: T192611
Change-Id: I735d3ade5cd12a5d609f4dae19ac88fec4b18b51
2018-04-23 15:44:02 +00:00
Max Semenik
ba35762773 Log DefaultPreferencesFactory usage
Bug: T190425
Change-Id: I17e4792501811787ce90195c07915876d6c233e8
2018-04-09 14:45:11 -07:00
Max Semenik
0216bd4871 Switch ServiceWiring to the new execution framework
To test:

$wgMimeDetectorCommand = 'file -bi';
$services = \MediaWiki\MediaWikiServices::getInstance();
echo $services->getMimeAnalyzer()->guessMimeType('/vagrant/mediawiki/README');

Change-Id: Iaf124901c68292736e5588636f5ec746147f6a54
2018-04-04 13:53:28 +00:00
Aaron Schulz
4ccb228bde rdbms: inject the mysql index name aliases into Database
Also added LBFactory::setTableAlias() for consistency with this

Change-Id: Ie49003ff8fd5b99f75db9fae8fe0a184444254d4
2018-03-12 18:51:53 +00:00
addshore
4d3549ad71 [MCR] NameTableStore
General purpose cached store for things like:
 - content_models (id,name)
 - slot_roles (id,name)
And in the future possibly namespaces & content_formats
as mentioned at:
https://www.mediawiki.org/wiki/Multi-Content_Revisions/Schema_Migration#Name_tables

Bug: T188518
Change-Id: Ia550ef7fe30af25ac3fee5ac8a89d032544563bf
2018-03-02 19:48:15 +00:00
Brad Jorsch
27c61fb1e9 Add actor table and code to start using it
Storing the user name or IP in every row in large tables like revision
and logging takes up space and makes operations on these tables slower.
This patch begins the process of moving those into one "actor" table
which other tables can reference with a single integer field.

A subsequent patch will remove the old columns.

Bug: T167246
Depends-On: I9293fd6e0f958d87e52965de925046f1bb8f8a50
Change-Id: I8d825eb02c69cc66d90bd41325133fd3f99f0226
2018-02-23 10:06:20 -08:00
addshore
e6c0dcc02e Factor OldRevisionImporter & ImportableOldRevision out of WikiRevision
This is to be used within the FileImporter extension to allow
adding custom loggers to this import process.

Change-Id: Ib094d4829764ccc8e5bd2619fb827d701ae06d43
2018-02-20 10:26:47 +00:00
addshore
25fbfd9b9c Factor UploadRevisionImporter & ImportableUploadRevision out of WikiRevision
This is to be used within the FileImporter extension to allow
adding custom loggers to this import process.

Change-Id: I4a6c573fc0a69b06d696cd2afca9226fb492a9bc
2018-02-20 10:26:42 +00:00
addshore
6cf900ffb0 Add clearWatchedItems to WatchedItemStore
Change-Id: I67d1057c76ddccece4727f4df701a3ad14c3bbaa
2018-02-09 11:38:47 -08:00
addshore
423ba71f42 DI for CommentStore in RevisionStore
Change-Id: I527388514489e79c53b6016a8bd3119ee1750c83
2018-02-08 18:09:41 +00:00
Chad Horohoe
5c93fabafd Drop XCache support
It was never super popular anyway, APC was always the best option.
The project has no plans to move to PHP7, so it's quickly reaching
its end of life. Oh, and Fedora dropped it from their repos 2 years
ago.

Change-Id: Ia3257e86a6323d8943f04a5c05c72c0bd4c4b0a9
2018-02-07 13:45:40 -08:00
addshore
d9c25c2f47 DI for CommentStore in WatchedItemQueryService
Change-Id: I93d9ed5f66297da7009d5b99aa9ed48e1b10582f
2018-02-06 16:50:16 +00:00
jenkins-bot
bbedc24556 Merge "Pass $key into CommentStore methods and use MediawikiServices" 2018-02-06 15:31:59 +00:00
jenkins-bot
92571d7c1a Merge "[MCR] RevisionStore::getTitle final logged fallback to master" 2018-02-06 11:42:52 +00:00