| Commit message (Collapse) | Author | Age | Files | Lines |
|\
| |
| |
| | |
ParserCache"
|
| |
| |
| |
| |
| |
| | |
In particular, add content model and render reason statistics.
Change-Id: I5286425794cc7827705bfc0e7f004543e383443c
|
|\ \ |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Given the constraints that the PHPUnit test classes need to be run
in their original order, that we might have incomplete information
about the test duration, and that the test durations vary significantly
(from 0 seconds to many tens of seconds), we want to make best efforts
to create split_groups with similar durations (and in so doing,
minimise the duration of the split_group with the longest runtime).
The existing algorithm takes the number of tests and the total
duration of tests and tries to create an even split by either duration
or test count (assuming that the zero-duration tests actually take a
similar, non-zero time to execute). This algorithm can potentially
place two long-running tests into the same group - the group might be
close to its duration limit, and the next test may be a long-running
test. In such a case, the group can end up significantly bigger than
desired.
Change the group-splitting algorithm to chunk the tests into up to
200 chunks, and assign the chunks to split_groups using a dynamic
programming algorithm that uses backtracking to find an optimal
allocation of chunks to split_groups.
Bug: T389189
Change-Id: I61ae44f3fca4a890947ea1499a99690a4fcc2bb8
|
|\ \ \
| |/ /
|/| | |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Why:
* ManualLogEntry::publish causes an entry to be added to the
recentchanges table as well as other publishing actions for
the log entry.
* This is done in a DeferredUpdate to avoid writes that block
the response to the user unnecessarily.
* However, doing this means that if we assign a temporary user
right during the course of the POST request (such as in the
case of an extension wanting to make lots of log entries)
this is not seen in the RecentChanges object created at the
POSTSEND stage.
* Creating the RecentChanges entry at the time of calling ::publish
allows temporary user rights, such as 'bot', to take effect
and mark the log entries as bot actions.
** We still put the writes to the DB POSTSEND as we only need to
create the RecentChanges object to get the bot flag set
correctly.
What:
* Update ManualLogEntry::publish to create the RecentChanges
object outside the POSTSEND DeferredUpdate.
* Add tests for ManualLogEntry which was previously completely
untested (though likely indirectly tested through code which
uses this class).
** Adding the tests allows verification that the change performed
actually does what we want it to do.
Bug: T387659
Change-Id: I80d906bbc1cad180a815477477d9081f9775a197
|
|\ \ \ |
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
* Write short one sentence standalone "brief", written in the imperative mood,
separate from longer description,
* Promote the `$statsHelper` variable name for newUnitTestingHelper,
which emerged in usage and seems clearer in context (context by
the caller is not limited to stats, but has various things, so
leading with "stats..." helps).
* Mark UnitTestingHelper constructor as internal, and point to
the public entry point.
Ref https://www.mediawiki.org/wiki/Manual:Coding_conventions/Documentation.
Change-Id: I9ede1c3ff25f53690f07dbd4043927b68629044e
|
|\ \ \ \ |
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
If the user's date option is not available in the selected user
language, fall back to the site default and then to "dmy", the last
being guaranteed to exist since all languages are merged with
MessagesEn.php.
Add test.
Change-Id: I9ccc6ebe747070fec2b80398a8251924c9a28fbc
|
|\ \ \ \ \ |
|
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
Thanks to Krinkle's research:
https://gerrit.wikimedia.org/r/c/mediawiki/core/+/1113193/comment/f2487490_d85e5600/
Change-Id: If0299825f3f784503d42fb2ae8fd2b1072c6ab62
|
|\ \ \ \ \ \ |
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
A crude solution for the acquireTarget() race condition. Use SQL
GET_LOCK() to lock the target from the acquireTarget() call until the
transaction is committed.
Add FOR UPDATE to the acquireTarget() SELECT, otherwise it just sees the
snapshot version of the row and inserts a new row anyway.
Add a test which reliably failed prior to the change.
Reword the ipb-block-not-found message. This is normal for simultaneous
blocks of the same target. Don't contact us. In the API, remap it to
"alreadyblocked".
Bug: T389028
Change-Id: I1fa35bf08d456a93930194786f77df389217ba61
|
|\ \ \ \ \ \ \
| |/ / / / / /
|/| | | | | | |
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
Why:
- BlockIpComplete informs subscribers when a block is placed
or updated.
- With CONFLICT_NEW, a block can be just inserted, never updated.
However, the loop over prior blocks can set $priorBlock to
an arbitrary block or keep it null, possibly confusing
subscribers of the hook (e.g., by claiming a block is not
active anymore).
What:
- Make sure $priorBlock is always null in this code path.
- Also reuse the $priorBlocks array in the loop.
Change-Id: I7e6b55a50cb78f77dedc074689dc3fe3b3484a2f
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
Change-Id: I4b171bedf3a9ef1df7bd11f86c5d7404bd695929
|
|\ \ \ \ \ \ \ |
|
| | |/ / / / /
| |/| | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
Five new locales, two of which map to supported languages in core
(ku-kmr -> ku, and tk -> tk), and three of which don't but are added
in for future support and for languages that might be configured in
production systems (ar-ps, bn-bd, and es-mx).
Bug: T389416
Change-Id: Ic69ddf92f922515bf36a2ea1770b2c8ebd2c46b2
|
|\ \ \ \ \ \ \
| | | | | | | |
| | | | | | | |
| | | | | | | | |
Authority"
|
| |/ / / / / /
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
Replace EditRightConstraint, UserBlockConstraint, and most of
UserRateLimitConstraint with the new AuthorizationConstraint.
Instead of many separate checks, everything is now handled by
one authorizeWrite() call.
Move 'editcontentmodel' rate limit to ContentModelChangeConstraint
(by making it use authorizeWrite()). Keep 'linkpurge' rate limit
in a separate check, renamed from UserRateLimitConstraint to
LinkPurgeRateLimitConstraint, since the way it works in unusual
and not portable to Authority without more refactoring in EditPage.
AuthorizationConstraint needs some special handling to produce
the idiosyncratic result codes required by EditPage, but luckily
PermissionStatus gives us everything we need for that.
Bug: T271975
Bug: T386346
Change-Id: Ic9f6f2fbd29efa3e349517013da540a363c263b5
|
|\ \ \ \ \ \ \ |
|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | |
The "version" page lists all the version*s* of MediaWiki and its
dependencies, installed extensions, etc. I always mistype this,
and it's simple enough to make both the plural and the singular
form work.
Change-Id: Ib14c2f25920e79a30078b44a6b8eb9c8dd1e9bc0
|
|\ \ \ \ \ \ \ \
| |_|/ / / / / /
|/| | | | | | | |
|
| |/ / / / / /
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
This method was already deprecated, and mentioned in the RELEASE-NOTES.
This patch just removes use of the method in core; it does not
seem to be used outside core:
https://codesearch.wmcloud.org/deployed/?q=-%3EsetRevisionTimestamp%5C%28
Bug: T301020
Follows-Up: Iee09b1591bfa11142686c9043a8294e7e77d2b61
Change-Id: I7528b9bc3522ed05f41f0915e38940b4a1fd48ce
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
Added in 2022 with I7d97c9e2d4 (c6a0d433ec) for Ie430acd075
(e82f11c246) which was (after a revert and re-apply) eventually
removed after the warmup completed (I852060c8a4, 3df4952385).
Bug: T322672
Bug: T387478
Change-Id: I1921b4f985fb27b2227aef4a0eba6751c1c0b8d5
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
This now aligns with Parsoid commit 0965c908f046d659aab16b4023cc8de9ded1fce7
Change-Id: Ic007c7b4a893329de8499a88bb0edcb4b04d0905
|
|\ \ \ \ \ \ \
| |_|_|/ / / /
|/| | | | | | |
|
| | |_|_|_|/
| |/| | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
We converted most of the LinksUpdate tasks to use ::getLinkList()
in I32df68714ffdf2f0745b974f47bc3ccceef1f41c but CategoryLinksTable
got overlooked.
Follows-Up: I32df68714ffdf2f0745b974f47bc3ccceef1f41c
Change-Id: I2953947e2b0a3c05dcba89d798c6b977113c3dc0
|
|\ \ \ \ \ \
| | | | | | |
| | | | | | |
| | | | | | | |
modules"
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
We can improve this, but this is a start.
Change-Id: Ibd2e3987921b06955f1186ce5ce10b42104886ec
|
|/ / / / / /
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
This is used by the Parsoid library when an asynchronous fragment
is present in the wikitext content and it is not yet ready to
render.
Bug: T390341
Change-Id: Ic996f7b0c891338f8d4605a1789bf389e075e239
|
|\ \ \ \ \ \ |
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
Why:
- Currently, the list of changes provided by ContributionsPager has
links to user pages that start with a separator, then followed by a
link to the user page, then followed by a link to the user talk
page.
- For each row, the link to the user talk page is wrapped in
parenthesis by explicitly adding them to the HTML code. However, that
doesn't work as expected when using the the Minerva skin: The CSS
rules for that skin make the link to be shown out of the parenthesis.
- Moreover, the different parts of each line do not provide CSS classes
indicating their semantic meaning, making it difficult for skins to
modify their appearance.
What:
- Stop providing the parenthesis as part of the HTML output, replacing
them by the usage of semantic CSS classes 'mw-usertoollinks',
'mw-changeslist-links' and 'mw-usertoollinks-talk'.
Bug: T389478
Change-Id: I44cc510eb37458b03c217b91f24eeaa8866e6cfd
|
|\ \ \ \ \ \ \
| |_|/ / / / /
|/| | | | | | |
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
The domain events framework is ready for release in 1.44.
The modeling of specific events is still experimental and should become
stable in 1.45.
Change-Id: Id53040c28ad559de4271f42f7403e39434f4ae0e
|
|\ \ \ \ \ \ \ |
|
| | |/ / / / /
| |/| | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
Why:
- As suggested on I14944639e00407f59380c8787fd2810c7d24a5c9,
ChangeTrackingUpdateSpyTrait is a better place to assert on operations
performed by ChangeTrackingEventIngress than
DerivedPageDataUpdaterTest.
What:
- Add an expected number of enqueued CategoryMembershipChangeJobs to
ChangeTrackingUpdateSpyTrait.
- Update tests using the trait to specify the expected number of jobs.
- Clear hooks in relevant tests to avoid test failures when extensions
are loaded that attempt to call methods on the mocks set by
ChangeTrackingUpdateSpyTrait. These tests currently fail if
e.g. PageTriage, Echo or EventBus are loaded.
Bug: T390636
Change-Id: I6fe6cb87cd5a16b1ed39e0998c49713704633d71
|
|\ \ \ \ \ \ \
| |/ / / / / /
|/| | | | | | |
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
I found this relevant in the context of OutputPage::parserOptions()
being deprecated. Is the replacement safe to be used even in old
versions? Yes, it is.
Bug: T350626
Change-Id: Id67c9df8f149d247fb6a3e0a113095eed3e727b1
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
Why:
- CategoryMembershipChangeJob is currently enqueued in
DerivedPageDataUpdater.
- This job is responsible for creating RC entries for category
membership changes that resulted from an edit, so it is semantically a
better fit for ChangeTrackingEventIngress instead.
- Idf6625d3e737e4a225648b0fd81cc929b095d315 unintentionally changed the
logic to enqueue this job for both direct content changes and
reconciliation requests, rather than only direct content changes.
Since the job creates RC entries, it should only be enqueued
as a result of direct content changes.
What:
- Move the logic of enqueueing CategoryMembershipChangeJobs into
ChangeTrackingEventIngress.
- Only enqueue CategoryMembershipChangeJobs for direct content changes
and update tests accordingly.
- Resolve the old TODO of making this logic MCR-aware by checking
whether any changed content slot supports categories as a precondition
of enqueueing the job, rather than only checking the main slot.
Bug: T390636
Change-Id: Icfe33ccc6cfa391e65ecae21d8c1d575dc247ee3
|
| |_|/ / / /
|/| | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
Why:
- Idf6625d3e737e4a225648b0fd81cc929b095d315 changed
DerivedPageDataUpdater to enqueue CategoryMembershipChangeJobs for
"nominal content changes", i.e. if the current change actually changed
the page content or was a "reconciliation request".
- In DE parlance, null edits are considered to be a form of
"reconciliation request".
- CategoryMembershipChangeJob is responsible for generating RC entries
for each category membership change that resulted from an edit, with
some added heavy lifting to handle multiple edits that occurred in
quick succession inside a single job. It therefore is not intended to
run in the context of a reconciliation request, be it a null edit or
something else, and is better suited to be enqueued from
ChangeTrackingEventIngress rather than DerivedPageDataUpdater.
- Before we make this change, it would be valuable to add test coverage
around null edit handling in DerivedPageDataUpdater and to assert on a
CategoryMembershipChangeJob being enqueued as needed.
What:
- Expand DerivedPageDataUpdater integration tests to cover page creation
and null edits.
- Add an assertion checking that a CategoryMembershipChangeJob is
enqueued (or not) as needed.
Bug: T390636
Change-Id: I14944639e00407f59380c8787fd2810c7d24a5c9
|
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
Contains tweaks to keep phan happy with the more precise property
types introduced in Parsoid upstream in this release.
Bug: T391042
Depends-On: Ibcf6d7ae272a27905f80390a1b8e2a609d31f6ab
Change-Id: Ib475a2b82d9faccec1c5752fa6d941f8cc849ed7
|
|\ \ \ \ \ \ |
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
Follows-up I1b9435dcdacd952b, which introduced this and silenced the
warning, but it appears this warning is spot-on:
> $ composer phpcs
> …
> assertEquals accepts many non-zero values, please use strict alternatives like
> assertSame (MediaWiki.PHPUnit.AssertEquals.Int)
We don't want to tolerate something like this:
```
var_dump(1 == true);
class Foo{}
var_dump(1 == new Foo());
var_dump(1 == (object)[]);
var_dump(1 == new stdClass);
var_dump(1 == '01.0');
var_dump(1 == '01.');
var_dump(1 == '01');
var_dump(1 == '1');
```
Bug: T368740
Change-Id: Ib3966b96f65d41b1d320ae043dcbea1a445a55f5
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
WANObjectCache
Change-Id: I9977d80bbbff215b18c9f099f0bef0865a3d1ac5
|
|\ \ \ \ \ \ \ |
|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | |
These .htaccess files are intended to prohibit all web access. But if
the user sets "Satisfy Any" on a parent directory, in conjunction with
any permissive require directive like "Require all granted", access will
be allowed despite "Require all denied" in .htaccess.
So, override Satisfy so that the "Require all denied" will reliably take
effect.
Note that "Satisfy All" is the default. This only affects non-default
installations.
Change-Id: Ia5862fb69e439b7ea2ed7af011e1ebf8f1b1f6d6
|
|\ \ \ \ \ \ \ \
| |_|_|/ / / / /
|/| | | | | | | |
|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | |
Mistaking getDimensionsString() for another HTML-returning method has
now caused two separate security vulnerabilities, so let’s try to make
it clearer that it returns plain text that a caller might have to escape
themselves.
Bug: T297543
Bug: T389369
Change-Id: I567f78c60e38ce0fa9d9ad6312860baec559c00f
|