aboutsummaryrefslogtreecommitdiffstats
path: root/includes/cache/localisation
Commit message (Collapse)AuthorAgeFilesLines
* language: Move l10n-related classes from /cache to /languageTimo Tijhof2022-06-289-1855/+0
| | | | | | | | | | | | | | | | * Make the code easier to own and maintain by being part of a topical area of expertise rather than a generic catch-all bucket. This also helps Gerrit team dashboards, [[mw:Git/Reviewers]] subscription patterns, more meaningful component prefix for [[mw:Commit_message_guidelines]]. * Prep for possible CODEOWNERS adoption. * Prep for T166010 to give us better PSR-4 namespaces that we won't have to break/migrate again shortly after for the above. Bug: T225756 Change-Id: I62c701d574d2a79365b1c5350f92bef47770e3ce
* Use MainConfigNames instead of string literals, #4Aryeh Gregor2022-04-261-5/+6
| | | | | | | | | | | | | | | | | | | | | Now largely automated: VARS=$(grep -o "'[A-Za-z0-9_]*'" includes/MainConfigNames.php | \ tr "\n" '|' | sed "s/|$/\n/;s/'//g") sed -i -E "s/'($VARS)'/MainConfigNames::\1/g" \ $(grep -ERIl "'($VARS)'" includes/) Then git add -p with lots of error-prone manual checking. Then semi-manually add all the necessary "use" lines: vim $(grep -L 'use MediaWiki\\MainConfigNames;' \ $(git diff --cached --name-only --diff-filter=M HEAD^)) I didn't bother fixing lines that were over 100 characters unless they were over 120 and triggered phpcs. Bug: T305805 Change-Id: I74e0ab511abecb276717ad4276a124760a268147
* phan: Remove PhanTypePossiblyInvalidDimOffset suppressionUmherirrender2022-03-281-0/+1
| | | | | | | | | | | Make phan stricter about array keys Remaining false positive issues are suppressed. The suppression and the setting change can only be done together Bug: T304887 Depends-On: I3105a5fd4826f8667b5232834defc5ec93be32a1 Depends-On: Ie9610a6e83731468311edb3ed17f80fc509de385 Change-Id: I701f12ab94478c3b8e7fd82110ade74a8e6b04ef
* Fix various documentation related to null typesUmherirrender2022-02-263-3/+3
| | | | | | | | The functions returning null or the class property is set explict null Found by phan strict checks Change-Id: I4a271093fb6526564d8083a08249c64cb21f2453
* Avoid references to DefaultSettings.daniel2022-02-221-2/+2
| | | | | | | | | | | | | | This replaces references to DefaultSettings with references to config-schema.yaml where appropriate. NOTE: this does not yet change Setup.php. DefaultSettings.php remains intact and is still being used. NOTE: this does not remove usages in the installer, see I5d8843a1062fbf for that. Bug: T300129 Change-Id: Ie6152cf510c3be61bc22167ca6d90dfc28910a45
* Try not to discard Excimer timeout exceptionsTim Starling2022-02-021-6/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | Don't catch and discard exceptions from the RequestTimeout library, except when the exception is properly handled and the code seems to be trying to wrap things up. In most cases the exception is rethrown. Ideally it should instead be done by narrowing the catch, and this was feasible in a few cases. But sometimes the exception being caught is an instance of the base class (notably DateTime::__construct()). Often Exception is the root of the hierarchy of exceptions being thrown and so is the obvious catch-all. Notes on specific callers: * In the case of ResourceLoader::respond(), exceptions were caught for API correctness, but processing continued. I added an outer try block for timeout handling so that termination would be more prompt. * In LCStoreCDB the Exception being caught was Cdb\Exception not \Exception. I added an alias to avoid confusion. * In ImageGallery I added a special exception class. * In Message::__toString() the rationale for catching disappears in PHP 7.4.0+, so I added a PHP version check. * In PoolCounterRedis, let the shutdown function do its thing, but rethrow the exception for logging. Change-Id: I4c3770b9efc76a1ce42ed9f59329c36de04d657c
* Fix typos in comments (L)Siddharth VP2022-01-091-1/+1
| | | | Change-Id: I3deb34aec51504e09b20a367a93ebe863335be26
* Prefer is_dir/is_file to file_existsKosta Harlan2022-01-043-6/+6
| | | | | | Mirco-optimisation for performance, part II. Change-Id: Ie8d5332a510bd18456ebc4a851f4d47f6a010dcb
* Remove or replace usages of "sanity"Reedy2021-11-211-1/+1
| | | | | | | Still some more to go... Bug: T254646 Change-Id: Ia117f01e443c35b4765f3275cab4f2707e1be96f
* docs: Fix nullable documentation for class propertiesUmherirrender2021-09-241-1/+1
| | | | Change-Id: I6d0577124d852103f485ffdc819876a13f6641c3
* localisation: Remove conditional for `plurals-mediawiki.xml` fileTimo Tijhof2021-08-051-15/+18
| | | | | | | | | | | | | Follows-up bbbcf089dbbb84d. This file always exists. If we want to support disabling this, we could introduce a configuration option rather than encouraging users to apply core hacks by modifying or removing this file. Also move the file paths into an array for re-use. Bug: T225756 Change-Id: I6c86b5b0bdc4b0242bc406599eb0a172f17f2d03
* Remove capitalize-all-nouns CSS class supportJack Phoenix2021-07-301-1/+1
| | | | | | | | Functionality has been moved to MonoBook. Bug: T97892 Change-Id: I3d4d74a2caa77f975b415af5977253ddeff6af21 Depends-On: I598c4469c46d284562ea3aec79330f9a1f40d2ce
* build: Updating dependencieslibraryupgrader2021-07-221-1/+1
| | | | | | | | | | | | | | composer: * mediawiki/mediawiki-codesniffer: 36.0.0 → 37.0.0 The following sniffs now pass and were enabled: * Generic.ControlStructures.InlineControlStructure * MediaWiki.PHPUnit.AssertCount.NotUsed npm: * svgo: 2.3.0 → 2.3.1 * https://npmjs.com/advisories/1754 (CVE-2021-33587) Change-Id: I2a9bbee2fecbf7259876d335f565ece4b3622426
* Use array_fill_keys() instead of array_flip() if that reflects the ↵Tim Starling2021-06-151-2/+2
| | | | | | | | | | | | | | | | | | developer's intention array_fill_keys() was introduced in PHP 5.2.0 and works like array_flip() except that it does only one thing (copying keys) instead of two things (copying keys and values). That makes it faster and more obvious. When array_flip() calls were paired, I left them as is, because that pattern is too cute. I couldn't kill something so cute. Sometimes it was hard to figure out whether the values in array_flip() result were used. That's the point of this change. If you use array_fill_keys(), the intention is obvious. Change-Id: If8d340a8bc816a15afec37e64f00106ae45e10ed
* Add TransactionProfiler::silenceForScope()Gergő Tisza2021-05-161-19/+16
| | | | | | | Add a helper method for the common use case of temporarily silencing transaction profiler warnings. Change-Id: I40de4daf8756da693de969e5526b471b624b2cee
* Remove unused default values from class propertiesThiemo Kreuz2021-05-121-1/+1
| | | | | | | | In all these cases the property is unconditionally set in the constructor. The extra initialisation is effectively dead code and an extra source of errors and confusion. Change-Id: Icae13390d5ca5c14e2754f3be4eb956dd7f54ac4
* Replace uses of DB_MASTER with DB_PRIMARYJames D. Forrester2021-04-291-1/+1
| | | | | | Just an auto-replace from codesniffer for now. Change-Id: I5240dc9ac5929d291b0ef1c743ea2bfd3f428266
* Use __CLASS__/::class to define callback for array_map/_filter/usortUmherirrender2021-01-221-1/+1
| | | | Change-Id: I3519dd5a1ce1ea688de602190cd74755c400c717
* Remove unneeded isset() before unset()Lucas Werkmeister2020-11-101-3/+1
| | | | | | | | unset() does not throw an error if the value to be unset does not exist in the first place, so guarding it with an isset() check is unnecessary. Remove a few ifs that didn’t do anything else. Change-Id: Ie5493c8a4c4d25e12a029d0257374527cd12303d
* Document hook names in hook interfaces.daniel2020-09-272-0/+6
| | | | | Bug: T258665 Change-Id: Ifddbf57f8aa2e3eb0d5845601376cbafa08ed407
* Mark CONSTRUCTOR_OPTIONS as internalAryeh Gregor2020-08-211-2/+1
| | | | | | | | These were never meant to be part of the public interface and should not ever have been marked with @since. They're only useful for constructing the respective objects, which no outside users should be doing. Change-Id: I86e01272d46fc72af32172d8a12b9180971d4613
* includes: Use expression assignment operator += or |= where possibleUmherirrender2020-07-311-2/+1
| | | | | | It is easier to read. Change-Id: Ia3965b80153d64f95b415c6c30f526efa252f554
* Revert "Add a new type of database to the installer from extension"Kunal Mehta2020-07-221-24/+1
| | | | | | | | | | | | | | | It caused a 20% latency regression by unconditionally parsing extension.json files on every single load instead of using the existing caching infrastructure. There are further problems with the use of parsing/loading extension.json files in a method that is incompatible with the existing architecture. This primarily reverts commit 46eabe275c923ca7827435a36d6576150cea8899. Also needed to revert 16381261ae and 7c72347ec1. Bug: T258664 Change-Id: I34a783c3f0df0447876a26441bb2d12e02368871
* Replace "@stable for implementation" with "@stable to implement"daniel2020-07-132-2/+2
| | | | | | | | | | | For compliance with the new version of the table interface policy (T255803). This patch was created by an automated search & replace operation on the includes/ directory. Bug: T257789 Change-Id: I17e5e92e24c708ffc846945a136347670a3a20c7
* Merge "phan: Enable redundant_condition_detection"jenkins-bot2020-07-021-0/+3
|\
| * phan: Enable redundant_condition_detectionUmherirrender2020-07-011-0/+3
| | | | | | | | | | | | | | | | Remove duplicate casts Suppress false positives Bug: T248438 Change-Id: I2f89664a4bcd3b39b15e7cf850adda2f0c90ae6f
* | Add a new type of database to the installer from extensionArtBaltai2020-06-261-1/+24
|/ | | | | | | | | | | | | Decouple Installer services Implement injection class Autoloader and i18n messages from extension.json Implement extension selector by type Add i18n message key `version-database` Extensions for testing: - https://github.com/MWStake/PerconaDB - real Percona extension - https://github.com/killev/mediawiki-dbext2 - fake extension for test Bug: T226857, T255151 Change-Id: I9ec8a18ad19283f6be67ac000110ac370afc0815
* Remove terminating line breaks from debug messagesTim Starling2020-06-032-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | A terminating line break has not been required in wfDebug() since 2014, however no migration was done. Some of these line breaks found their way into LoggerInterface::debug() calls, where they mess up the formatting of the debug log. So, remove terminating line breaks from wfDebug() and LoggerInterface::debug() calls. Also: * Fix the stripping of leading line breaks from the log header emitted by Setup.php. This feature, accidentally broken in 2014, allows requests to be distinguished in the log file. * Avoid using the global variable $self. * Move the logging of the client IP back to Setup.php. It was moved to WebRequest in the hopes that it would not always be needed, however $wgRequest->getIP() is now called unconditionally a few lines up in Setup.php. This means that it is put in its proper place after the "start request" message. * Wrap the log header code in a closure so that variables like $name do not leak into global scope. * In Linker.php, remove a few instances of an unnecessary second parameter to wfDebug(). Change-Id: I96651d3044a95b9d210b51cb8368edc76bebbb9e
* Hooks::run() call site migrationTim Starling2020-05-301-3/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Migrate all callers of Hooks::run() to use the new HookContainer/HookRunner system. General principles: * Use DI if it is already used. We're not changing the way state is managed in this patch. * HookContainer is always injected, not HookRunner. HookContainer is a service, it's a more generic interface, it is the only thing that provides isRegistered() which is needed in some cases, and a HookRunner can be efficiently constructed from it (confirmed by benchmark). Because HookContainer is needed for object construction, it is also needed by all factories. * "Ask your friendly local base class". Big hierarchies like SpecialPage and ApiBase have getHookContainer() and getHookRunner() methods in the base class, and classes that extend that base class are not expected to know or care where the base class gets its HookContainer from. * ProtectedHookAccessorTrait provides protected getHookContainer() and getHookRunner() methods, getting them from the global service container. The point of this is to ease migration to DI by ensuring that call sites ask their local friendly base class rather than getting a HookRunner from the service container directly. * Private $this->hookRunner. In some smaller classes where accessor methods did not seem warranted, there is a private HookRunner property which is accessed directly. Very rarely (two cases), there is a protected property, for consistency with code that conventionally assumes protected=private, but in cases where the class might actually be overridden, a protected accessor is preferred over a protected property. * The last resort: Hooks::runner(). Mostly for static, file-scope and global code. In a few cases it was used for objects with broken construction schemes, out of horror or laziness. Constructors with new required arguments: * AuthManager * BadFileLookup * BlockManager * ClassicInterwikiLookup * ContentHandlerFactory * ContentSecurityPolicy * DefaultOptionsManager * DerivedPageDataUpdater * FullSearchResultWidget * HtmlCacheUpdater * LanguageFactory * LanguageNameUtils * LinkRenderer * LinkRendererFactory * LocalisationCache * MagicWordFactory * MessageCache * NamespaceInfo * PageEditStash * PageHandlerFactory * PageUpdater * ParserFactory * PermissionManager * RevisionStore * RevisionStoreFactory * SearchEngineConfig * SearchEngineFactory * SearchFormWidget * SearchNearMatcher * SessionBackend * SpecialPageFactory * UserNameUtils * UserOptionsManager * WatchedItemQueryService * WatchedItemStore Constructors with new optional arguments: * DefaultPreferencesFactory * Language * LinkHolderArray * MovePage * Parser * ParserCache * PasswordReset * Router setHookContainer() now required after construction: * AuthenticationProvider * ResourceLoaderModule * SearchEngine Change-Id: Id442b0dbe43aba84bd5cf801d86dedc768b082c7
* Fix even more PSR12.Properties.ConstantVisibility.NotFoundReedy2020-05-161-1/+1
| | | | Change-Id: I4a30a44bc33fc98479799438d65342f6529e14f9
* Add missing public visibility on methods of cache related classesUmherirrender2020-05-091-4/+4
| | | | Change-Id: I8c85b6d7757c6b87ab0a72363c6d1571f0bfe67a
* language: Avoid LCStoreStaticArray::decode() recursion for arraysTimo Tijhof2020-05-041-13/+35
| | | | | | | | | | | | | In looking at early flame graphs and XHGui profiles, I noticed code paths like `decode -> decode@2 -> decode@3`, for example for magic words arrays and special page names. Rather than storing these as `[a, [a, [a, ..], [a, ..], [a, ..], .. ] ]` store them instead as `[v, [ .. ]]`. This makes for smaller files, but more important it further reduces runtime overhead. Bug: T218207 Change-Id: I492e5d32106ba7fd1b22075cf026fee2e3d1944e
* Automatically generated hook interfacesTim Starling2020-04-202-0/+46
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Add hook interfaces which were generated by a script which parses hooks.txt and identifies caller namespaces and directories. Hook interfaces are mostly placed in a Hook/ subdirectory relative to the caller location. When there are callers in multiple directories, a "primary" caller was manually selected. The exceptions to this are: * The source root, maintenance and tests, which use includes/Hook. Test hooks need to be autoloadable in a non-test request so that implementing test interfaces in a generic handler will not fail. * resources uses includes/resourceloader/Hook * The following third-level subdirectories had their hooks placed in the parent ../Hook: * includes/filerepo/file * includes/search/searchwidgets * includes/specials/forms * includes/specials/helpers * includes/specials/pagers Parameters marked as legacy references in hooks.txt are passed by value in the interfaces. Bug: T240307 Change-Id: I6efe2e7dd1f0c6a3d0f4d100a4c34e41f8428720
* Coding style: Auto-fix MediaWiki.Usage.IsNull.IsNullJames D. Forrester2020-01-103-10/+10
| | | | Change-Id: I90cfe8366c0245c9c67e598d17800684897a4e27
* Coding style: Auto-fix MediaWiki.Classes.UnsortedUseStatements.UnsortedUseJames D. Forrester2020-01-102-2/+2
| | | | Change-Id: I94a0ae83c65e8ee419bbd1ae1e86ab21ed4d8210
* Set method visibility for various constructorsUmherirrender2019-12-032-2/+2
| | | | Change-Id: Id3c88257e866923b06e878ccdeddded7f08f2c98
* ParamValidator: Use MessageValue!Brad Jorsch2019-11-011-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | Trying to get away with returning a single code and parameter-list that was supposed to represent both human-readable and machine-readable data was a mistake. This patch converts it to use DataMessageValue, which represents the two separately and also provides guidance for supplying translations of all the error codes. This also eliminates the "describeSettings()" method that was trying to serve multiple use cases (in terms of the Action API, action=paraminfo and action=help). It's replaced by two methods that each serve one of the use cases. Also some of the functionality was moved out of the TypeDef base class into ParamValidator, to better match where the constants themselves live. Also I wound up creating a NumericDef base class so FloatDef can share the same range-checking logic that IntegerDef has. I probably should have done that as a separate patch, but untangling it now would be too much work. Bug: T235801 Change-Id: Iea6d4a1d05bb4b92d60415b0f03ff9d3dc99a80b
* Split rest messages from the main en.jsonAmir Aharoni2019-10-221-0/+1
| | | | | Bug: T233192 Change-Id: I3990ae4e34a51e7648f74a05a4b7ac744fa9b9c4
* Merge "Split some Language methods to LanguageNameUtils"jenkins-bot2019-10-081-4/+11
|\
| * Split some Language methods to LanguageNameUtilsAryeh Gregor2019-10-071-4/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | These are static methods that have to do with processing language names and codes. I didn't include fallback behavior, because that would mean a circular dependency with LocalisationCache. In the new class, I renamed AS_AUTONYMS to AUTONYMS, and added a class constant DEFINED for 'mw' to match the existing SUPPORTED and ALL. I also renamed fetchLanguageName(s) to getLanguageName(s). There is 100% test coverage for the code in the new class. This was previously committed as 2e52f48c2ed and reverted because it depended on e4468a1d6b6, which had to be reverted for performance issues. There should be no changes other than rebasing. Bug: T201405 Change-Id: Ifa346c8a92bf1eb57dc5e79458b32b7b26f1ee8a
* | Services: Convert LocalisationCache's static to a const now HHVM is goneJames D. Forrester2019-10-081-4/+2
|/ | | | Change-Id: If5c015debed7efc034613b976bc5292ac30036d7
* Make LocalisationCache a serviceAryeh Gregor2019-10-071-65/+82
| | | | | | | | | | | | | | | | | | | | | This removes Language::$dataCache without deprecation, because 1) I don't know of a way to properly simulate it in the new paradigm, and 2) I found no direct access to the member outside of the Language and LanguageTest classes. An earlier version of this patch (e4468a1d6b6) had to be reverted because of a massive slowdown on test runs. Based on some local testing, this should fix the problem. Running all tests in languages is slowed down by only around 20% instead of a factor of five, and memory usage is actually reduced greatly (~350 MB -> ~200 MB). The slowdown is still not great, but I assume it's par for the course for converting things to services and is acceptable. If not, I can try to optimize further. Bug: T231220 Bug: T231198 Bug: T231200 Bug: T201405 Change-Id: Ieadbd820379a006d8ad2d2e4a1e96241e172ec5a
* localisation: Remove PHP5-specific perf optimisationTimo Tijhof2019-09-211-9/+0
| | | | | | | | | | | | The `apc.cache_by_default` setting is a PHP5-era setting relating to the part of php5-apc now known as opcache (as opposed to the part now known as apcu). This setting doesn't exist in PHP 7, and trying to set it doesn't do anything useful. Bug: T206986 Change-Id: I46a91897b2b33b5ce6505beb74d404982cb0641c
* Cleanup and document some LCStoreDB fieldsAaron Schulz2019-09-091-15/+17
| | | | Change-Id: I1edcfbaa0889a84803a9d66d2bc6962664867650
* localisation: Release data from memory in LCStoreStaticArray::finishWriteTimo Tijhof2019-09-041-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | With this change, the memory behaviour of LCStoreStaticArray matches the other LCStore implementations. Specifically, that when mass-rebuilding LocalisationCache entries for all language codes, the computed data should be released from memory after calling LCStore::finishWrite(). This doesn't affect user-facing web requests, even in the case of stock MW where every once in a while a user request can lazy- regenerate the LCStore, there is a process-cache in front of LCStore in the LocalisationCache class. The rebuildLocalisationCache.php clears that via LocalisationCacheBulkLoad::unload(), but due to LCStoreStaticArray internally holding on to the data, it was still leaking. The leak was found by @Nikerabbit as part of testing for T218207. To test this, amend rebuildLocalisationCache.php and add the following on line 161, as the first line of the doRebuild/foreach/if block: echo "[$code-start-mem] " . round(memory_get_usage(true)/1024/1024, 2) . " MB\n"; If you then have LocalSettings.php configured like so: $wgCacheDirectory = $wgTmpDirectory; $wgLocalisationCacheConf['store'] = 'array'; Then before this patch, running rebuildLocalisationCache.php, shows memory starting at 12 MB and growing 2-3 MB for every language until the very end, closing with 970 MB memory use. After this patch, it starts at 12 MB and stops growing at 32 MB. When configuring as `['store'] = 'files'`, which uses LCStoreCDB, the memory starts at 12 MB and stops growing at 44 MB, both before and after this patch. Bug: T218207 Change-Id: I0d215efee5b31766776a068b16811d52f9879312
* Unsuppress other phan issues (part 4)Daimona Eaytoy2019-08-311-1/+1
| | | | | | Bug: T231636 Depends-On: I58e67c2b38389df874438deada4239510d21654f Change-Id: I6e5fba7bd273219b1206559420b5bdb78734aa84
* Unsuppress more phan issues (part 3)Daimona Eaytoy2019-08-311-20/+14
| | | | | | Bug: T231636 Depends-On: I78354bf5f0c831108c8f606e50c87cf6bc00d8bd Change-Id: I58e67c2b38389df874438deada4239510d21654f
* Revert "Make LocalisationCache a service"Amir Sarabadani2019-08-261-90/+68
| | | | | | | | | | | | This reverts commits: - 76a940350d36c323ebedb4ab45cc81ed1c6b6c92 - b78b8804d076618e967c7b31ec15a1bd9e35d1d0 - 2e52f48c2ed8dcf480843e2186f685a86810e2ac - e4468a1d6b6b9fdc5b64800febdc8748d21f213d Bug: T231200 Bug: T231198 Change-Id: I1a7e46a979ae5c9c8130dd3927f6663a216ba753
* Pass correct store to rebuildLocalisationCache.phpAryeh Gregor2019-08-261-0/+32
| | | | | | | | | e4468a1d6b6 completely broke rebuildLocalisationCache.php by unconditionally passing in LCStoreDB( [] ) instead of constructing the correct object. Bug: T231183 Change-Id: I0d52662e8745cf0e10091169b3b08eff48ef2b8f
* Split some Language methods to LanguageNameUtilsAryeh Gregor2019-08-231-4/+11
| | | | | | | | | | | | | | These are static methods that have to do with processing language names and codes. I didn't include fallback behavior, because that would mean a circular dependency with LocalisationCache. In the new class, I renamed AS_AUTONYMS to AUTONYMS, and added a class constant DEFINED for 'mw' to match the existing SUPPORTED and ALL. I also renamed fetchLanguageName(s) to getLanguageName(s). There is 100% test coverage for the code in the new class. Change-Id: I245ae94bfc1f62b6af75ea57525139adf2539fe6