Page MenuHomePhabricator
Paste P13092

Files changed due to incidents over the last year
ActivePublic

Authored by daniel on Oct 28 2020, 6:32 PM.
Tags
None
Referenced Files
F32417954: Files changed due to incidents over the last year
Oct 28 2020, 6:32 PM
Subscribers
None
{
"includes/Revision/RevisionStore.php": {
"File": "includes/Revision/RevisionStore.php",
"TicketCount": 10,
"CommitCount": 5,
"Tickets": [
"T139012",
"T239772",
"T246720",
"T204793",
"T221763",
"T225366",
"T212428",
"T252156",
"T258666",
"T259738"
],
"Commits": [
{
"message": "RevisionStoreCacheRecord: Fallback to master for update callback.\n\nBug: T259738\nChange-Id: Id76f7c5179fa351a4aba4d5226437ef6338bbdce\n",
"bugs": [
"T259738"
],
"subject": "RevisionStoreCacheRecord: Fallback to master for update callback.",
"hash": "b961feca6a8983f20cda9e7ef834056a1ff07880",
"date": "2020-08-05T19:27:29"
},
{
"message": "RevisionStore: fall back to master if no revision rows were found.\n\nThe fallback was previously done too late, re-trying based on the\nsame (empty) list of rows from the slots table.\n\nBug: T212428\nBug: T258666\nChange-Id: Ie4aa2be8d73e597e79b7e0c3e12a539acee427a0\n",
"bugs": [
"T212428",
"T258666"
],
"subject": "RevisionStore: fall back to master if no revision rows were found.",
"hash": "9bd04f78456623b3e8dded2f644560d0f8c84ef1",
"date": "2020-07-27T20:26:12"
},
{
"message": "RevisionStore: fall back to master db if main slot is missing.\n\nThis is to protect against race conditions. There may be situations\nwhere we already got the revision itself, but information is still\nmissing from the slots or content tables.\n\nBug: T212428\nBug: T252156\nChange-Id: Id0cd85ae93616ad91b07afeccb766e8345fa7c9c\n",
"bugs": [
"T212428",
"T252156"
],
"subject": "RevisionStore: fall back to master db if main slot is missing.",
"hash": "767aee7bb162c97644be3730a8f8afc5233a7a56",
"date": "2020-05-08T10:04:19"
},
{
"message": "RevisionStore and PageUpdater: handle stale page ID\n\nSometimes, an edit is done with a Title object that has gone\nout of sync with the database after a page move. In this case,\nwe should re-load the current page ID from the database,\ninstead of failing the update hard.\n\nBug: T246720\nBug: T204793\nBug: T221763\nBug: T225366\nChange-Id: If7701205ec2bf4d4495349d3e67cf53d32ee8357\n",
"bugs": [
"T246720",
"T204793",
"T221763",
"T225366"
],
"subject": "RevisionStore and PageUpdater: handle stale page ID",
"hash": "1fcd23878cfad4a40429aacec5381ad711d9bbe7",
"date": "2020-04-20T16:11:45"
},
{
"message": "Remove hacks for lack of index on rc_this_oldid\n\nIn several places, we're including rc_timestamp or other fields in a\nquery selecting on rc_this_oldid because there was historically no index\non the column.\n\nThe needed index was created by I0ccfd26d and deployed by T202167, so\nlet's remove the hacks.\n\nBug: T139012\nBug: T239772\nChange-Id: Ic99760075bde6603c9f2ab3ee262f5a2878205c7\n",
"bugs": [
"T139012",
"T239772"
],
"subject": "Remove hacks for lack of index on rc_this_oldid",
"hash": "152376376e6ef60c7169e31582db2be78194b0d4",
"date": "2019-12-04T21:00:02"
}
]
},
"includes/parser/CoreParserFunctions.php": {
"File": "includes/parser/CoreParserFunctions.php",
"TicketCount": 3,
"CommitCount": 5,
"Tickets": {
"0": "T251952",
"2": "T253725",
"3": "T237467"
},
"Commits": [
{
"message": "CoreParserFunctions: ensure formatNum is only called on numeric strings\n\nThe {{formatnum}} parser function can take anything, not just numeric\nstrings. We'd like to restrict Language::commafy() to operate only on\nnumeric strings, however (see T237467). Split the argument to the\n{{formatnum}} parser function so that we only invoke\nLanguage::commafy() on numeric strings. Add a tracking category so we\ncan (gradually) lint our content appropriately.\n\nBug: T237467\nChange-Id: Ib6c832df1f69aa4579402701fad1f77e548291ee\n",
"bugs": [
"T237467"
],
"subject": "CoreParserFunctions: ensure formatNum is only called on numeric strings",
"hash": "bfa4357d9184c978b4c7b674d4efa7da3b116959",
"date": "2020-09-15T20:23:41"
},
{
"message": "Fix impedance mismatch with Parser::fetchCurrentRevisionRecordOfTitle\n\nThis newly-added method returns `false` on error; the caller expects\nit to return `null`.\n\nBug: T253725\nFollowup-To: If36b35391f7833a1aded8b5a0de706d44187d423\nChange-Id: I6af7aeabbba9f95338497026fd08d9ae23f75c22\n",
"bugs": [
"T253725"
],
"subject": "Fix impedance mismatch with Parser::fetchCurrentRevisionRecordOfTitle",
"hash": "1113039771d85526c1763ab1e88e4f2670bfb4f1",
"date": "2020-05-27T16:10:27"
},
{
"message": "Partially revert \"Fix impedance mismatch with Parser::getRevisionRecordObject()\"\n\nReason for revert: issue arose again when deployed with wmf.34\n\nPartial revert: keep the intended fix in Parser.php, revert\nremoval of fail-safe logic in CoreParserFunctions.hp\n\nThis reverts commit 2712cb8330d8e9b4755d89b6909c5589ee6da8d3.\n\nBug: T253725\nChange-Id: I06266ca8bd29520b2c8f86c430d0f1e2d5dd20c0\n",
"bugs": [
"T253725"
],
"subject": "Partially revert \"Fix impedance mismatch with Parser::getRevisionRecordObject()\"",
"hash": "c45ccd7ca8e6f2f643c3c89cf8a2bd1e936e6dea",
"date": "2020-05-27T08:10:50"
},
{
"message": "Fix impedance mismatch with Parser::getRevisionRecordObject()\n\nParser::getRevisionRecordObject() returns `null` if the revision is\nmissing, but it invokes ParserOptions::getCurrentRevisionRecordCallback()\n(ie, Parser::statelessFetchRevisionRecord() by default) which returns\n`false` as its error condition.\n\nThis reverts commit ae74a29af3116eb73a4cb775736b3acee0a65c59, and instead\nfixes the bug at its root.\n\nBug: T251952\nChange-Id: If36b35391f7833a1aded8b5a0de706d44187d423\n",
"bugs": [
"T251952"
],
"subject": "Fix impedance mismatch with Parser::getRevisionRecordObject()",
"hash": "2712cb8330d8e9b4755d89b6909c5589ee6da8d3",
"date": "2020-05-06T16:44:05"
},
{
"message": "CoreParserFunctions::revisionuser - only call getUser on RevisionRecord\n\nBug: T251952\nChange-Id: Ib74f8546a955a41b119fce00ccaa9a0b635245ef\n",
"bugs": [
"T251952"
],
"subject": "CoreParserFunctions::revisionuser - only call getUser on RevisionRecord",
"hash": "ae74a29af3116eb73a4cb775736b3acee0a65c59",
"date": "2020-05-05T21:11:40"
}
]
},
"includes/MovePage.php": {
"File": "includes/MovePage.php",
"TicketCount": 4,
"CommitCount": 4,
"Tickets": [
"T248789",
"T255608",
"T250023",
"T265779"
],
"Commits": [
{
"message": "MovePage: Handle target page deletion failure gracefully.\n\nThrowing exception is not appropriate here and will prevent proper usage\nof ArticleDeleteHook, which is ostensibly meant to allow extensions to\ncleanly abort the deletion if they need to.\n\nWhen the target page deletion fails, instead of blowing everything up\nwith exception, just cancel the open atomic section and return the\nuser-friendly deletion error back to the user.\n\nBug: T265779\nChange-Id: I66b4458a103f1274715e22a784344c55a62a59ac\n",
"bugs": [
"T265779"
],
"subject": "MovePage: Handle target page deletion failure gracefully.",
"hash": "db20453b0ae3c97860a68a6673b84d3ad215639d",
"date": "2020-10-21T01:07:36"
},
{
"message": "Add PageMoveCompleting hook, to replace TitleMoveCompleting\n\nWe intially thought we wouldn't need this and would only need\nPageMoveComplete, but it turns out Flow does need it.\n\nBug: T250023\nBug: T255608\nChange-Id: I8e7308541d2fe6d02b9dad63e1c86c89f6e7cf53\n",
"bugs": [
"T250023",
"T255608"
],
"subject": "Add PageMoveCompleting hook, to replace TitleMoveCompleting",
"hash": "c8b9d849fc2ef302ec2adf5ec3bdb647d176c2ab",
"date": "2020-06-17T05:27:28"
},
{
"message": "Revert \"Hard deprecate the `TitleMoveCompleting` hook\"\n\nThis reverts commit 8f7f133ccfaaaa45b7c00835d3d64884bde0c5c3.\n\nPer I8cdef229bf0a3, we still need this in Flow for now, to fix a UBN.\n\nBug: T255608\nChange-Id: Id414c98161b9f560b14d4eaec8aedeec4659df27\n",
"bugs": [
"T255608"
],
"subject": "Revert \"Hard deprecate the `TitleMoveCompleting` hook\"",
"hash": "6fc783ad2b3ef92d4a160dc97e7896fea3904247",
"date": "2020-06-17T04:09:34"
},
{
"message": "MovePage: Use correct Title when creating the null revision\n\nPrior to I4a5fe41fe, the call to Revision::newNullRevision() would load\nthe Title from the database and use that to create the null revision.\n\nI4a5fe41fe, in removing uses of the deprecated Revision, changed that to\ncall RevisionStore::newNullRevision() directly. Instead of loading the\nTitle, that takes one as a parameter. $this->oldTitle was being passed,\nwhich at this point in the execution contains the correct page_id but\nthe *old* page_namespace/page_title. Passing $nt would also not work,\nsince that contains the target page's old page_id (likely 0).\n\nThe solution is to reset the ID in $nt (so it contains both the correct\nID and name), so we can then pass it to RevisionStore::newNullRevision().\n\nBug: T248789\nChange-Id: I8e0ae616006c0cebde60cfa53c0a842bd2cc1545\n",
"bugs": [
"T248789"
],
"subject": "MovePage: Use correct Title when creating the null revision",
"hash": "3309ead776b092a824793d0bb10e2cec5e584989",
"date": "2020-04-02T15:59:08"
}
]
},
"includes/api/ApiEditPage.php": {
"File": "includes/api/ApiEditPage.php",
"TicketCount": 3,
"CommitCount": 4,
"Tickets": [
"T255700",
"T261030",
"T264200"
],
"Commits": [
{
"message": "Revert \"Revert \"ApiEditPage: Show existing watchlist expiry if status\nis not being changed.\"\"\n\nThis reverts commit 149e99f07230d041945871ddb6e0647ccc83dc21.\n\nIt's not necessary to change the constructor now, the module is already\nusing service locator to fetch RevisionLookup and ContentHandlerFactory.\n\nThe WatchedItemStore can also be gotten from there, voiding the need for\naltering the constructor now. As Daniel said in T259960#6380471 dependency\ninjection for API modules is good but not urgent.\n\nBug: T261030\nBug: T264200\nChange-Id: I16aa942cc800cd66a2cd538680a02b10cb0b1bfe\n",
"bugs": [
"T261030",
"T264200"
],
"subject": "Revert \"Revert \"ApiEditPage: Show existing watchlist expiry if status\nis not being changed.\"\"",
"hash": "30b947ad5f9ab9249b800f22873fe07a25ca147c",
"date": "2020-09-30T19:28:47"
},
{
"message": "ApiEditPage: Document that it is extended\n\nTo avoid future issues like T264200\n\nBug: T264200\nChange-Id: I0eafbad96be5037fb7795559fe6a62e69d54f0c5\n",
"bugs": [
"T264200"
],
"subject": "ApiEditPage: Document that it is extended",
"hash": "bd7ecc3b06b63f1afa6655ff16f39f6089ac6143",
"date": "2020-09-30T16:47:11"
},
{
"message": "Revert \"ApiEditPage: Show existing watchlist expiry if status is not being changed.\"\n\nThis reverts commit 07e547f47cae761489a33e9ebb8a9b108298f34e.\n\nReason for revert: LiquidThreads extends the ApiEditPage class,\neven though it shouldn't, and thus fails when the dependencies\nare not injected.\n\nBug: T261030\nBug: T264200\nChange-Id: Ib14f8a04bb6c723aa502a47ef9ccde6fe96a0ac7\n",
"bugs": [
"T261030",
"T264200"
],
"subject": "Revert \"ApiEditPage: Show existing watchlist expiry if status is not being changed.\"",
"hash": "149e99f07230d041945871ddb6e0647ccc83dc21",
"date": "2020-09-30T15:29:59"
},
{
"message": "API: Handle ContentHandler exception for content model mismatch\n\nEnsure the content we are trying to save and the base content have\nidentical content models before proceeding to save so as to forestall\nException that may be thrown by ContentHandler if it founds they're not.\n\nThere are two cases where the models are allowed to differ: Edit that\nundoes content model change or edit that's meant to explicitly change\nthe model. The logic for these is handled separately and may succeed\nor fail, but exception will not be thrown.\n\nBug: T255700\nChange-Id: I8782732bb0fc3059693cd7035b7ebb43fd71d333\n",
"bugs": [
"T255700"
],
"subject": "API: Handle ContentHandler exception for content model mismatch",
"hash": "7af5678847cc64c0030a717121775ea041a28819",
"date": "2020-09-04T02:41:58"
}
]
},
"includes/specials/SpecialBlock.php": {
"File": "includes/specials/SpecialBlock.php",
"TicketCount": 3,
"CommitCount": 4,
"Tickets": {
"0": "T259212",
"2": "T263642",
"3": "T265552"
},
"Commits": [
{
"message": "Revert \"Hard deprecate SpecialBlock::canBlockEmail\"\n\nThis reverts commit d1784d139a29f294e6b396b59d8b9c37b7e71eb0.\n\nReason for revert: per T265552\n\nBug: T265552\nChange-Id: I2c25c81d2e7820d91175373a49bb1fe52228321e\n",
"bugs": [
"T265552"
],
"subject": "Revert \"Hard deprecate SpecialBlock::canBlockEmail\"",
"hash": "a4a706524951d26c6b095bcb79736367fe7f9f8e",
"date": "2020-10-15T12:06:29"
},
{
"message": "SpecialUnblock: Allow getTargetAndType to accept null $par\n\nAlso add documentation and type hinting for\nSpecialBlock::getTargetAndType\n\nBug: T263642\nChange-Id: If3e78537cd813d8aabbc6ba53c4d0be949ede9a1\n",
"bugs": [
"T263642"
],
"subject": "SpecialUnblock: Allow getTargetAndType to accept null $par",
"hash": "7432a7c7ad8e1ff077e9e20f19279057f139c40d",
"date": "2020-09-23T14:00:34"
},
{
"message": "SpecialBlock: Make error more generic if block not inserted/found\n\nIf a block cannot be inserted, but no existing block can be found\nagainst the target, display a generic error explaining this, and\nasking the user to report the problem. Also log a warning.\n\nFollow up to I1737e3a69748ebaa743e87b185ba1e3b92afec8c, which\nassumed the error was caused by the databases being out of sync.\nWe have since seen other causes.\n\nBug: T259212\nChange-Id: If0ddbc2de3855c3c7e6c9d78875cbc47a81fddc5\n",
"bugs": [
"T259212"
],
"subject": "SpecialBlock: Make error more generic if block not inserted/found",
"hash": "1c7b878c99cc9d55d30a2244e2a424923b3ffb42",
"date": "2020-08-20T10:43:34"
},
{
"message": "SpecialBlock: Show error if a block could not be inserted or found\n\nIf a block cannot be inserted, it is assumed that there is an\nexisting block against the target. That block is then retrieved\nfrom a replica database using DatabaseBlock::newFromTarget. We are\nseeing errors as a result of assuming that newFromTarget always\nreturns a block object in this situation.\n\nSometimes a block could not be inserted because there is an existing\nblock, but the existing block could not be retrieved. This could\nhappen if:\n* there is an existing block but it is not in the replicas yet\n* an existing block was removed after the insert attempt, but before\n the retrieve attempt\n\nCheck whether DatabaseBlock::newFromTarget returns a block object,\nand display a message explaining the situation if not.\n\nBug: T259212\nChange-Id: I1737e3a69748ebaa743e87b185ba1e3b92afec8c\n",
"bugs": [
"T259212"
],
"subject": "SpecialBlock: Show error if a block could not be inserted or found",
"hash": "d17af1729063be27f0d1a69cce23e42416903e51",
"date": "2020-08-11T07:19:45"
}
]
},
"includes/diff/DifferenceEngine.php": {
"File": "includes/diff/DifferenceEngine.php",
"TicketCount": 4,
"CommitCount": 4,
"Tickets": [
"T237709",
"T139012",
"T239772",
"T256298"
],
"Commits": [
{
"message": "DifferenceEngine: Don't pass false to DiffTools hook\n\nBug: T256298\nChange-Id: I2aeb96a63c30ed226d8d2f05a78baf37c50c6f4e\n",
"bugs": [
"T256298"
],
"subject": "DifferenceEngine: Don't pass false to DiffTools hook",
"hash": "1359f1533c5afb3ea0b7edb882d784a045e80c9a",
"date": "2020-06-25T01:20:03"
},
{
"message": "DifferenceEngine: Call DiffTools hook with correct parameter order\n\nmNewRevisionRecord is meant to be the first parameter, and\nmOldRevisionRecord the third, not the other way around\n\nBug: T256298\nChange-Id: I030a9834635a85ad464e5826926c26b41a9c31b0\n",
"bugs": [
"T256298"
],
"subject": "DifferenceEngine: Call DiffTools hook with correct parameter order",
"hash": "72010ca8186b8b8cac26bbf1ae29b5cdba1d2306",
"date": "2020-06-24T22:05:55"
},
{
"message": "Remove hacks for lack of index on rc_this_oldid\n\nIn several places, we're including rc_timestamp or other fields in a\nquery selecting on rc_this_oldid because there was historically no index\non the column.\n\nThe needed index was created by I0ccfd26d and deployed by T202167, so\nlet's remove the hacks.\n\nBug: T139012\nBug: T239772\nChange-Id: Ic99760075bde6603c9f2ab3ee262f5a2878205c7\n",
"bugs": [
"T139012",
"T239772"
],
"subject": "Remove hacks for lack of index on rc_this_oldid",
"hash": "152376376e6ef60c7169e31582db2be78194b0d4",
"date": "2019-12-04T21:00:02"
},
{
"message": "DifferenceEngine: Don't try counting revs between deleted revs with different page IDs\n\nRecent changes have caused the method for counting the number of\nrevisions in between the two sides of a diff to throw an error when the\nrevisions have different page IDs.\n\nThis blows up some cases of trying to get a difference between deleted\nrevisions, as the page IDs on the deleted revisions might not match\nand/or might not match the current ID returned by the Title object.\n\nBug: T237709\nChange-Id: I415f7ebb57fa4e879396b0db0e3a79edc2880be5\n",
"bugs": [
"T237709"
],
"subject": "DifferenceEngine: Don't try counting revs between deleted revs with different page IDs",
"hash": "a8cbf85d1ded885b7d4a2891d99732d5bd8f3024",
"date": "2019-11-20T18:21:46"
}
]
},
"includes/EditPage.php": {
"File": "includes/EditPage.php",
"TicketCount": 4,
"CommitCount": 4,
"Tickets": [
"T237570",
"T251404",
"T262463",
"T237467"
],
"Commits": [
{
"message": "EditPage: ensure we only try to formatNum() numeric strings\n\nBug: T237467\nChange-Id: I03ffa99f7de1dcc48535ba1e1251567dbf3db116\n",
"bugs": [
"T237467"
],
"subject": "EditPage: ensure we only try to formatNum() numeric strings",
"hash": "1dd1958929193d724998ce8a17b99c741aef273b",
"date": "2020-09-18T02:42:55"
},
{
"message": "EditPage: Fix member call on boolean when undo is impossible\n\nUgh, my mistake.\nAlso added a test that should cover this. It fails on the previous\nversion of code, succeeds after applying this patch.\n\nBug: T262463\nChange-Id: Ifda30daadea5a908505423caaf818b9f88f989ad\n",
"bugs": [
"T262463"
],
"subject": "EditPage: Fix member call on boolean when undo is impossible",
"hash": "603cf919ee4a2e12b7999d24bc779c5c5fe2fceb",
"date": "2020-09-09T20:59:00"
},
{
"message": "EditPage::showHeader - only warn editing an old revision if it exists\n\nCaused by ca8aa4d6b25eca09fd60b0c29974d2be9e54dcbd\n\nBug: T251404\nChange-Id: I772c322cfe9450e1bc444a32753c81f48a1f3210\n",
"bugs": [
"T251404"
],
"subject": "EditPage::showHeader - only warn editing an old revision if it exists",
"hash": "c757ec5fd9277bfe9feeef8e87953b284c60eb78",
"date": "2020-04-29T12:47:32"
},
{
"message": "EditPage: Improve handling of missing revision contents\n\nHistorically, if the content of a revision was missing (e.g. a bad entry\nin the `text` table), EditPage would display an empty textarea.\nIa94521b7 accidentally broke that, causing an uncaught exception.\n\nThis patch restores the previous behavior, with the addition of a notice\nat the top of the page that the content couldn't be loaded.\n\nThis also cleans up the missing section handling so it isn't so easily\nconfused with other failures (and also so it doesn't pass false to a\nmethod declared as taking Content|null).\n\nBug: T237570\nChange-Id: Ia70de11c2e4833b202fde3028a1a94dfc741f0a5\n",
"bugs": [
"T237570"
],
"subject": "EditPage: Improve handling of missing revision contents",
"hash": "6070db31402cfbccb09a67932675b1ce622d0f15",
"date": "2019-11-07T16:47:59"
}
]
},
"includes/page/WikiPage.php": {
"File": "includes/page/WikiPage.php",
"TicketCount": 4,
"CommitCount": 4,
"Tickets": [
"T240083",
"T257499",
"T259181",
"T187731"
],
"Commits": [
{
"message": "Introduce and apply NonSerializableTrait\n\nThe NonSerializableTrait prevents object serialization via php's native\nserialization mechanism. Most objects are not safe to serialize, and\nNonSerializableTrait provides a covenient and uniform way to protect\nagainst serialization attempts.\n\nThis patch applies the NonSerializableTrait to some key classes in\nMediaWiki.\n\nBug: T187731\nBug: T259181\nChange-Id: I0c3b558d97e3415413bbaa3d98f6ebd5312c4a67\n",
"bugs": [
"T187731",
"T259181"
],
"subject": "Introduce and apply NonSerializableTrait",
"hash": "dc436c3cff5f41bf8f22e0a3d19fa86a1c86b7dd",
"date": "2020-09-28T19:55:49"
},
{
"message": "Allow for safe deserialization of WikiPage objects.\n\nWikiPage and Revision obejcts really shouldn't be serialized,\nbut we still need to support unserializing them, to prevent errors with\nold data.\n\nBug: T259181\nChange-Id: I0a75c1a4e8ee9c458c048fd18306a4d4d13a9b5a\n",
"bugs": [
"T259181"
],
"subject": "Allow for safe deserialization of WikiPage objects.",
"hash": "8a0eb03b2e26cd8b3fe77946137364e12dd11db7",
"date": "2020-09-07T20:15:13"
},
{
"message": "Make EditResult::getRevertTags() call to be only when the update\nwas successful\n\nWe are calling the method too early even though there are many\nreturn statements before we reach where we need the value of the call.\n\nThis patch simply move the call after $updater->wasSuccessful() call.\nIf we did not return after $updater->wasSuccessful() then\n$updater->getEditResult() will not be null\n\nBug: T257499\nChange-Id: Ib59cd1d0cde0118f2a9299f777077ab77f3d5d19\n",
"bugs": [
"T257499"
],
"subject": "Make EditResult::getRevertTags() call to be only when the update\nwas successful",
"hash": "7fa5ce21af35dffd8565f7274cb2d06e611251c8",
"date": "2020-07-10T17:35:25"
},
{
"message": "CdnCacheUpdate: Accept Titles in addition to strings\n\nThe class was already documented as \"given a list of URLs or Title\ninstances\", this makes that work.\n\nTitle objects will have ->getCdnUrls() called when the update is\nresolved, which avoids problems like those encountered in T240083 where\nthat was being called too early.\n\nBug: T240083\nChange-Id: I30b29a7359a8f393fb19ffc199211a421d3ea4d9\n",
"bugs": [
"T240083"
],
"subject": "CdnCacheUpdate: Accept Titles in addition to strings",
"hash": "d83e00cb92f2c850dfe8ad7f31c65f8db78e47b7",
"date": "2020-03-19T13:56:19"
}
]
},
"includes/Title.php": {
"File": "includes/Title.php",
"TicketCount": 6,
"CommitCount": 3,
"Tickets": [
"T244300",
"T240083",
"T246720",
"T204793",
"T221763",
"T225366"
],
"Commits": [
{
"message": "RevisionStore and PageUpdater: handle stale page ID\n\nSometimes, an edit is done with a Title object that has gone\nout of sync with the database after a page move. In this case,\nwe should re-load the current page ID from the database,\ninstead of failing the update hard.\n\nBug: T246720\nBug: T204793\nBug: T221763\nBug: T225366\nChange-Id: If7701205ec2bf4d4495349d3e67cf53d32ee8357\n",
"bugs": [
"T246720",
"T204793",
"T221763",
"T225366"
],
"subject": "RevisionStore and PageUpdater: handle stale page ID",
"hash": "1fcd23878cfad4a40429aacec5381ad711d9bbe7",
"date": "2020-04-20T16:11:45"
},
{
"message": "CdnCacheUpdate: Accept Titles in addition to strings\n\nThe class was already documented as \"given a list of URLs or Title\ninstances\", this makes that work.\n\nTitle objects will have ->getCdnUrls() called when the update is\nresolved, which avoids problems like those encountered in T240083 where\nthat was being called too early.\n\nBug: T240083\nChange-Id: I30b29a7359a8f393fb19ffc199211a421d3ea4d9\n",
"bugs": [
"T240083"
],
"subject": "CdnCacheUpdate: Accept Titles in addition to strings",
"hash": "d83e00cb92f2c850dfe8ad7f31c65f8db78e47b7",
"date": "2020-03-19T13:56:19"
},
{
"message": "language: remove Language hints for type check as it breaks using of StubUserLang\n\nBug: T244300\nChange-Id: Iec1b5629617f1c171e8af507dc1dcebfef0666eb\n",
"bugs": [
"T244300"
],
"subject": "language: remove Language hints for type check as it breaks using of StubUserLang",
"hash": "ed18dba8f403377ebe6f6a69893eae098b77cf59",
"date": "2020-02-05T14:11:31"
}
]
},
"includes/resourceloader/ResourceLoaderSkinModule.php": {
"File": "includes/resourceloader/ResourceLoaderSkinModule.php",
"TicketCount": 4,
"CommitCount": 3,
"Tickets": [
"T244405",
"T245778",
"T245182",
"T262507"
],
"Commits": [
{
"message": "resourceloader: Fix incorrect order of feature stylesheets\n\nFollow up to I755e5e6784481b419e35, which used array_unshift\nto prepend the 'feature' stylesheets. This works as expected when\nthere is only one 'feature' enabled.\n\nWhen there are multiple, use of unshift will effectivel reverse\nthe order as it unshifts then one at a time.\n\nTo mitigate this, collect them normally in the correct order,\nand then prepend them all at once with array_merge.\n\nBug: T262507\nChange-Id: Ibe2c9f8d024f6be06588a59df10a37681b60d6bc\n",
"bugs": [
"T262507"
],
"subject": "resourceloader: Fix incorrect order of feature stylesheets",
"hash": "f12e35012db7140980c185b641c12637550f9ca1",
"date": "2020-09-10T16:20:10"
},
{
"message": "ResourceLoaderSkinModule: Don't hard-deprecate wgLogoHD just now\n\nBug: T245778\nBug: T245182\nChange-Id: I5f6773516134651ee88079c3f5a7c12d9f3d4f31\n",
"bugs": [
"T245778",
"T245182"
],
"subject": "ResourceLoaderSkinModule: Don't hard-deprecate wgLogoHD just now",
"hash": "56fd5aaaeb77d33f5aa3c25f3b63a56104854caf",
"date": "2020-02-21T13:18:22"
},
{
"message": "ResourceLoaderSkinModule: Restore previous behavior in getLogoData()\n\ngetAvailableLogos() can now also return multiple items if a 'wordmark'\nlogo is defined, but this method only cares about the DPI variants\n('1x'/'1.5x'/'2x') and should return a string if there's only '1x'.\n\nBug: T244405\nChange-Id: I69ddb1f9f97d06253b661caf112b48343cd2453f\n",
"bugs": [
"T244405"
],
"subject": "ResourceLoaderSkinModule: Restore previous behavior in getLogoData()",
"hash": "68d10ec12dc62b5084891a8052015824116877cb",
"date": "2020-02-07T02:10:26"
}
]
},
"includes/specials/SpecialUserrights.php": {
"File": "includes/specials/SpecialUserrights.php",
"TicketCount": 4,
"CommitCount": 3,
"Tickets": [
"T240574",
"T253909",
"T254417",
"T251534"
],
"Commits": [
{
"message": "Revert \"Don't show email link if the user cannot be emailed.\"\n\nReason for revert: UserRightsProxy lacks `canReceiveEmail`\nmethod, and thus Special:GlobalUserRights fails\n\nThis reverts commit a6ad9a3b231b6ca48c7cdebfa1adbe5122cb5a76.\n\nBug: T254417\nBug: T251534\nChange-Id: Ic0f9fbb8eff18fedffd22cf3faffebccface753a\n",
"bugs": [
"T254417",
"T251534"
],
"subject": "Revert \"Don't show email link if the user cannot be emailed.\"",
"hash": "bde3f75a31cca5c5e12f658dbe61f2f12d32e906",
"date": "2020-06-04T00:02:23"
},
{
"message": "UserrightsPage: Restore visibility (previously implicitely public)\n\nMethods had no visibility specified and were made private in\n1c009dffe49a13ee66ac1bf30bbe2df0eed5ec9d, but are\noverriden by CentralAuth's SpecialGlobalGroupMembership.\n\nMake protected so that the overrides work.\n\nBug: T253909\nChange-Id: Ib57237c2398ac91f8cebb5fe254ec5b28bac9255\n",
"bugs": [
"T253909"
],
"subject": "UserrightsPage: Restore visibility (previously implicitely public)",
"hash": "3618aac953a8baea68e4d81b7e5fb6c441fe34fd",
"date": "2020-05-28T20:46:04"
},
{
"message": "Prevent Call to undefined method CentralAuthGroupMembershipProxy::isSystemUser()\n\nBug: T240574\nChange-Id: Ie7a3e246563fb3d114b03d43944f52a6f39737d3\n",
"bugs": [
"T240574"
],
"subject": "Prevent Call to undefined method CentralAuthGroupMembershipProxy::isSystemUser()",
"hash": "3081e157b7051402d1c1bd0e3a6d6cc1d158ad92",
"date": "2019-12-12T14:20:16"
}
]
},
"includes/api/ApiWatchlistTrait.php": {
"File": "includes/api/ApiWatchlistTrait.php",
"TicketCount": 2,
"CommitCount": 2,
"Tickets": [
"T261030",
"T264200"
],
"Commits": [
{
"message": "Revert \"Revert \"ApiEditPage: Show existing watchlist expiry if status\nis not being changed.\"\"\n\nThis reverts commit 149e99f07230d041945871ddb6e0647ccc83dc21.\n\nIt's not necessary to change the constructor now, the module is already\nusing service locator to fetch RevisionLookup and ContentHandlerFactory.\n\nThe WatchedItemStore can also be gotten from there, voiding the need for\naltering the constructor now. As Daniel said in T259960#6380471 dependency\ninjection for API modules is good but not urgent.\n\nBug: T261030\nBug: T264200\nChange-Id: I16aa942cc800cd66a2cd538680a02b10cb0b1bfe\n",
"bugs": [
"T261030",
"T264200"
],
"subject": "Revert \"Revert \"ApiEditPage: Show existing watchlist expiry if status\nis not being changed.\"\"",
"hash": "30b947ad5f9ab9249b800f22873fe07a25ca147c",
"date": "2020-09-30T19:28:47"
},
{
"message": "Revert \"ApiEditPage: Show existing watchlist expiry if status is not being changed.\"\n\nThis reverts commit 07e547f47cae761489a33e9ebb8a9b108298f34e.\n\nReason for revert: LiquidThreads extends the ApiEditPage class,\neven though it shouldn't, and thus fails when the dependencies\nare not injected.\n\nBug: T261030\nBug: T264200\nChange-Id: Ib14f8a04bb6c723aa502a47ef9ccde6fe96a0ac7\n",
"bugs": [
"T261030",
"T264200"
],
"subject": "Revert \"ApiEditPage: Show existing watchlist expiry if status is not being changed.\"",
"hash": "149e99f07230d041945871ddb6e0647ccc83dc21",
"date": "2020-09-30T15:29:59"
}
]
},
"includes/parser/Parser.php": {
"File": "includes/parser/Parser.php",
"TicketCount": 2,
"CommitCount": 2,
"Tickets": [
"T251952",
"T264257"
],
"Commits": [
{
"message": "Revert \"Revert \"Revert \"Hard deprecate all public properties in CacheTime and ParserOutput\"\"\"\n\nThis reverts commit deacee9088948e074722af0148000ad9455b07df.\n\nBug: T264257\nChange-Id: Ie68d8081a42e7d8103e287b6d6857a30dc522f75\n",
"bugs": [
"T264257"
],
"subject": "Revert \"Revert \"Revert \"Hard deprecate all public properties in CacheTime and ParserOutput\"\"\"",
"hash": "3254e41a4cc0bcf85b5b0de3e3d237d4ebd7a987",
"date": "2020-10-01T18:03:41"
},
{
"message": "Fix impedance mismatch with Parser::getRevisionRecordObject()\n\nParser::getRevisionRecordObject() returns `null` if the revision is\nmissing, but it invokes ParserOptions::getCurrentRevisionRecordCallback()\n(ie, Parser::statelessFetchRevisionRecord() by default) which returns\n`false` as its error condition.\n\nThis reverts commit ae74a29af3116eb73a4cb775736b3acee0a65c59, and instead\nfixes the bug at its root.\n\nBug: T251952\nChange-Id: If36b35391f7833a1aded8b5a0de706d44187d423\n",
"bugs": [
"T251952"
],
"subject": "Fix impedance mismatch with Parser::getRevisionRecordObject()",
"hash": "2712cb8330d8e9b4755d89b6909c5589ee6da8d3",
"date": "2020-05-06T16:44:05"
}
]
},
"includes/user/User.php": {
"File": "includes/user/User.php",
"TicketCount": 3,
"CommitCount": 2,
"Tickets": [
"T187731",
"T259181",
"T264363"
],
"Commits": [
{
"message": "Remove NonSerializableTrait from User object\n\nUser objects are apparently serialized somewhere, removing\nthe trait until this gets fixed.\n\nRemove UserTest::testSerialization_fails to\nallow this change for now.\n\nBug: T264363\nChange-Id: Id804755653452dc94184e5e481efcac3053e6535\n",
"bugs": [
"T264363"
],
"subject": "Remove NonSerializableTrait from User object",
"hash": "016d2e401c763c4df7ebe5b2eb2455562daabe2b",
"date": "2020-10-01T21:16:08"
},
{
"message": "Introduce and apply NonSerializableTrait\n\nThe NonSerializableTrait prevents object serialization via php's native\nserialization mechanism. Most objects are not safe to serialize, and\nNonSerializableTrait provides a covenient and uniform way to protect\nagainst serialization attempts.\n\nThis patch applies the NonSerializableTrait to some key classes in\nMediaWiki.\n\nBug: T187731\nBug: T259181\nChange-Id: I0c3b558d97e3415413bbaa3d98f6ebd5312c4a67\n",
"bugs": [
"T187731",
"T259181"
],
"subject": "Introduce and apply NonSerializableTrait",
"hash": "dc436c3cff5f41bf8f22e0a3d19fa86a1c86b7dd",
"date": "2020-09-28T19:55:49"
}
]
},
"includes/Setup.php": {
"File": "includes/Setup.php",
"TicketCount": 3,
"CommitCount": 2,
"Tickets": [
"T232140",
"T244370",
"T264799"
],
"Commits": [
{
"message": "Log IP/device changes within the same session\n\nStore IP and device information in the session and log when\nit changes. The goal is to detect session leakage when the\nsession is accidentally sent to another user, which is a\nhypothetical cause of T264370. The log will be noisy since\nusers do change IP addresses for a number of reasons,\nbut we are mainly interested in the ability of correlating\nuser-reported incidents where we have a username to filter\nby, so that's OK.\n\nBased on I27468a3f6d58.\n\nBug: T264799\nChange-Id: Ifa14fa637c1b199159ea11e983a25212ae005565\n",
"bugs": [
"T264799"
],
"subject": "Log IP/device changes within the same session",
"hash": "d5d3c90152299abf73f7747d5c53984d9fb53ea1",
"date": "2020-10-08T20:13:25"
},
{
"message": "Follow-up 8cd2e13: Setup: Check that 1x key has been set in wgLogos before using\n\nBug: T232140\nBug: T244370\nChange-Id: If1e0a384db6584d8854d7f39313ee62ae8423a7f\n",
"bugs": [
"T232140",
"T244370"
],
"subject": "Follow-up 8cd2e13: Setup: Check that 1x key has been set in wgLogos before using",
"hash": "ec60dbbaea660fa747fc99da7c73f3aae3f8be2e",
"date": "2020-02-05T15:44:16"
}
]
},
"includes/session/SessionManager.php": {
"File": "includes/session/SessionManager.php",
"TicketCount": 1,
"CommitCount": 2,
"Tickets": [
"T264799"
],
"Commits": [
{
"message": "SessionManager: Always log IP/UA in session-ip\n\nBug: T264799\nChange-Id: I25257cde897db684a8438923487f80b09abe16c0\n",
"bugs": [
"T264799"
],
"subject": "SessionManager: Always log IP/UA in session-ip",
"hash": "56aacd44675c63ba93509d8f2e938cb492a7b496",
"date": "2020-10-09T16:45:22"
},
{
"message": "Log IP/device changes within the same session\n\nStore IP and device information in the session and log when\nit changes. The goal is to detect session leakage when the\nsession is accidentally sent to another user, which is a\nhypothetical cause of T264370. The log will be noisy since\nusers do change IP addresses for a number of reasons,\nbut we are mainly interested in the ability of correlating\nuser-reported incidents where we have a username to filter\nby, so that's OK.\n\nBased on I27468a3f6d58.\n\nBug: T264799\nChange-Id: Ifa14fa637c1b199159ea11e983a25212ae005565\n",
"bugs": [
"T264799"
],
"subject": "Log IP/device changes within the same session",
"hash": "d5d3c90152299abf73f7747d5c53984d9fb53ea1",
"date": "2020-10-08T20:13:25"
}
]
},
"includes/content/ContentHandler.php": {
"File": "includes/content/ContentHandler.php",
"TicketCount": 2,
"CommitCount": 2,
"Tickets": [
"T244300",
"T247859"
],
"Commits": [
{
"message": "contenthandler: Load revision from PAGE_LATEST when not found\n\nWhen retrieving indexable content for a WikiPage the page may be\nbrand new and not replicated yet. When no revision is found try\nagain reading from the master, then fail with a clear message instead\nof the previous behaviour of dereferencing null.\n\nBug: T247859\nChange-Id: Iab93984b26d40de00f3331ee1bbdde46b3370733\n",
"bugs": [
"T247859"
],
"subject": "contenthandler: Load revision from PAGE_LATEST when not found",
"hash": "6c73dd25487eccae89063c0e7cb7eab92c436d0f",
"date": "2020-03-17T22:48:09"
},
{
"message": "language: remove Language hints for type check as it breaks using of StubUserLang\n\nBug: T244300\nChange-Id: Iec1b5629617f1c171e8af507dc1dcebfef0666eb\n",
"bugs": [
"T244300"
],
"subject": "language: remove Language hints for type check as it breaks using of StubUserLang",
"hash": "ed18dba8f403377ebe6f6a69893eae098b77cf59",
"date": "2020-02-05T14:11:31"
}
]
},
"includes/api/ApiStashEdit.php": {
"File": "includes/api/ApiStashEdit.php",
"TicketCount": 2,
"CommitCount": 2,
"Tickets": [
"T245928",
"T255700"
],
"Commits": [
{
"message": "API: Handle ContentHandler exception for content model mismatch\n\nEnsure the content we are trying to save and the base content have\nidentical content models before proceeding to save so as to forestall\nException that may be thrown by ContentHandler if it founds they're not.\n\nThere are two cases where the models are allowed to differ: Edit that\nundoes content model change or edit that's meant to explicitly change\nthe model. The logic for these is handled separately and may succeed\nor fail, but exception will not be thrown.\n\nBug: T255700\nChange-Id: I8782732bb0fc3059693cd7035b7ebb43fd71d333\n",
"bugs": [
"T255700"
],
"subject": "API: Handle ContentHandler exception for content model mismatch",
"hash": "7af5678847cc64c0030a717121775ea041a28819",
"date": "2020-09-04T02:41:58"
},
{
"message": "stashedit: Ensure that $summary is a string\n\nIt's only documented as string.\n\nBug: T245928\nChange-Id: I8fa287f335e90a59ac18365e7401a5cf703130a3\n",
"bugs": [
"T245928"
],
"subject": "stashedit: Ensure that $summary is a string",
"hash": "60dc4b41f833ae036c1d34e9399a4b1b1b1ca33a",
"date": "2020-02-22T19:55:28"
}
]
},
"includes/Rest/RequestFromGlobals.php": {
"File": "includes/Rest/RequestFromGlobals.php",
"TicketCount": 2,
"CommitCount": 2,
"Tickets": {
"0": "T256831",
"2": "T261344"
},
"Commits": [
{
"message": "Rest: Use try/catch to handle URIs with embedded colon\n\nThis is a follow up to a previous fix in\n4079d328e7d4cd689f1d73e38f2b1584cec13d81 which used parse_url()==false\nas an indirect test to see if `new Uri()` would throw. Avoid the\nindirection and use a try/catch instead to be more robust against\nfixes in the Uri library and/or the parse_url() implementation.\n\nBug: T256831\nBug: T261344\nChange-Id: Ia52c5b2c77a4481afd82b468c2f7fb3c05996a91\n",
"bugs": [
"T256831",
"T261344"
],
"subject": "Rest: Use try/catch to handle URIs with embedded colon",
"hash": "4a1b4aeb2aaf22039ca8e0be242b8a2fa763165d",
"date": "2020-09-04T13:50:28"
},
{
"message": "Rest: Handle Uri constructor exception\n\nAll titles that contain a colon followed by a number cannot, currently,\nbe accessed via the Rest endpoint.\n\nFor example https://en.wikipedia.org/wiki/3:33 is a valid title/article\non English Wikipedia and can be accessed there the index/api.php entry\npoints. But the rest endpoint will fatal:\nhttps://en.wikipedia.org/w/rest.php/v1/page/3:33/history\n\nThe exception is thrown in Uri constructor of GuzzleHttp library\nif parse_url() failed to parse the request URL. But parse_url() has\nan open bug of failing to parse URLs that contain the above pattern.\nThe function returns false in such cases, (it previously raised warning\nsee I2715607);\n\nTo make our titles with this pattern accessible, we have to forestall\nthis exception.\n\nBug: T256831\nChange-Id: Ib829afc7b33419b01e69ababa147d33b30c0fbcb\n",
"bugs": [
"T256831"
],
"subject": "Rest: Handle Uri constructor exception",
"hash": "4079d328e7d4cd689f1d73e38f2b1584cec13d81",
"date": "2020-07-14T16:54:29"
}
]
},
"includes/skins/Skin.php": {
"File": "includes/skins/Skin.php",
"TicketCount": 2,
"CommitCount": 2,
"Tickets": [
"T258001",
"T257996"
],
"Commits": [
{
"message": "Deprecate Skin::mainPageLink\n\nBug: T257996\nDepends-On: I892b3180949383e47f0cf0f2826c82fe9f9756ac\nChange-Id: If3a68cc4e41a56ad94abce8db409830ed7ee3afc\n",
"bugs": [
"T257996"
],
"subject": "Deprecate Skin::mainPageLink",
"hash": "dcc88f70f414afbdb52c901960aacc112f18770d",
"date": "2020-09-09T17:25:50"
},
{
"message": "Deprecate Skin methods that are aliases for footerLink\n\nThese methods are deprecated.\n* Skin::aboutLink()\n* Skin::disclaimerLink()\n* Skin::privacyLink()\n\nTheir usages can be replaced with Skin::footerLink() by providing relevant keys.\n\nBug: T258001\nChange-Id: Ib0b0a3be52f09e43e70a333672a1429b0ad926b4\n",
"bugs": [
"T258001"
],
"subject": "Deprecate Skin methods that are aliases for footerLink",
"hash": "85aaf46160a4147e65588ff0be46ae00213b0ac8",
"date": "2020-09-03T19:20:48"
}
]
},
"includes/parser/ParserCache.php": {
"File": "includes/parser/ParserCache.php",
"TicketCount": 1,
"CommitCount": 2,
"Tickets": [
"T264257"
],
"Commits": [
{
"message": "HACK/ParserCache: Force cache-miss if mUsedOptions is undefined\n\nThese are causing thousands of errors from wmf.11-cached pages\nsince we rolled back to wmf.10.\n\nBug: T264257\nChange-Id: Ia3357b2f593ca16fc12241d7ea22bbfd222f2536\n(cherry picked from commit 71ee44aabba5c10187ad6d5cb26b5ef072cbf9b2)\n",
"bugs": [
"T264257"
],
"subject": "HACK/ParserCache: Force cache-miss if mUsedOptions is undefined",
"hash": "b52660a1f1a330d0bb5270df74cbf46abb61a255",
"date": "2020-10-01T18:25:47"
},
{
"message": "Revert \"Revert \"Revert \"Hard deprecate all public properties in CacheTime and ParserOutput\"\"\"\n\nThis reverts commit deacee9088948e074722af0148000ad9455b07df.\n\nBug: T264257\nChange-Id: Ie68d8081a42e7d8103e287b6d6857a30dc522f75\n",
"bugs": [
"T264257"
],
"subject": "Revert \"Revert \"Revert \"Hard deprecate all public properties in CacheTime and ParserOutput\"\"\"",
"hash": "3254e41a4cc0bcf85b5b0de3e3d237d4ebd7a987",
"date": "2020-10-01T18:03:41"
}
]
},
"includes/filerepo/file/File.php": {
"File": "includes/filerepo/file/File.php",
"TicketCount": 1,
"CommitCount": 2,
"Tickets": [
"T263014"
],
"Commits": [
{
"message": "Hard deprecate File::userCan() with $user=null\n\nThe ArchivedFile::userCan and OldLocalFile::userCan() methods, along\nwith a number of other methods where the user parameter was optional,\nwere deprecated in 1.35, but this case was overlooked. This patch is\nintended for backport to 1.35, so that the $user parameter can be\nremoved in 1.36 in accordance with the deprecation policy.\n\nThis path is known to be used by LocalRepo::findFile(),\nFileRepo::findFile(), and FileRepo::findFileFromKey(), so hacky\nworkarounds have been added in this patch to avoid triggering\ndeprecation warnings in 1.35. T263033 has been filed to fix these\n'correctly' in 1.36.\n\nBug: T263014\nChange-Id: I17cab8ce043a5965aeab089392068b91c686025e\n",
"bugs": [
"T263014"
],
"subject": "Hard deprecate File::userCan() with $user=null",
"hash": "5e703cdf669f85e2924dee76c5a8831633259ce0",
"date": "2020-09-16T16:27:51"
},
{
"message": "Revert \"Remove support for (Archived|OldLocal)File::userCan without a user\"\n\nThis reverts commit 264d043d0400d4a0353df03eb5b431dcf25ad0ae.\n\nReason for revert: Parsoid is still using this.\n\nBug: T263014\nChange-Id: I9d6b65b319a45bbdbd479eda0d0580296ceb7f62\n",
"bugs": [
"T263014"
],
"subject": "Revert \"Remove support for (Archived|OldLocal)File::userCan without a user\"",
"hash": "a66e7a6b0c7c1cc46af9c938355e04d955d0d29a",
"date": "2020-09-16T10:47:49"
}
]
},
"includes/title/NamespaceInfo.php": {
"File": "includes/title/NamespaceInfo.php",
"TicketCount": 1,
"CommitCount": 2,
"Tickets": [
"T253098"
],
"Commits": [
{
"message": "NamespaceInfo::makeValidNamespace: Don't throw for -1 or -2\n\nBug: T253098\nChange-Id: Ifa5a3d587fe8298d356f513bcbf2a432cc70712b\n",
"bugs": [
"T253098"
],
"subject": "NamespaceInfo::makeValidNamespace: Don't throw for -1 or -2",
"hash": "d443d5e114034ab63317be4db87b073d7528b390",
"date": "2020-06-10T20:37:52"
},
{
"message": "NamespaceInfo: Throw specifically if called on a non-int/non-int-like namespace\n\nMostly just for debugging purposes; later we can enforce this with a type hint,\nbut first I want to track down the uses.\n\nBug: T253098\nDepends-On: Ieecbc91a8f26076775149a96fbe1b19a7f39dcef\nChange-Id: I66ea07f1acf6db2d13de488b775361f45b69020c\n",
"bugs": [
"T253098"
],
"subject": "NamespaceInfo: Throw specifically if called on a non-int/non-int-like namespace",
"hash": "0349fc8b4a3bb5ec90725193cf3d69fbdff27cee",
"date": "2020-06-03T19:55:44"
}
]
},
"includes/filerepo/FileRepo.php": {
"File": "includes/filerepo/FileRepo.php",
"TicketCount": 2,
"CommitCount": 2,
"Tickets": [
"T253922",
"T263014"
],
"Commits": [
{
"message": "Hard deprecate File::userCan() with $user=null\n\nThe ArchivedFile::userCan and OldLocalFile::userCan() methods, along\nwith a number of other methods where the user parameter was optional,\nwere deprecated in 1.35, but this case was overlooked. This patch is\nintended for backport to 1.35, so that the $user parameter can be\nremoved in 1.36 in accordance with the deprecation policy.\n\nThis path is known to be used by LocalRepo::findFile(),\nFileRepo::findFile(), and FileRepo::findFileFromKey(), so hacky\nworkarounds have been added in this patch to avoid triggering\ndeprecation warnings in 1.35. T263033 has been filed to fix these\n'correctly' in 1.36.\n\nBug: T263014\nChange-Id: I17cab8ce043a5965aeab089392068b91c686025e\n",
"bugs": [
"T263014"
],
"subject": "Hard deprecate File::userCan() with $user=null",
"hash": "5e703cdf669f85e2924dee76c5a8831633259ce0",
"date": "2020-09-16T16:27:51"
},
{
"message": "Mark two FileRepo functions public\n\nFunctions references as callbacks are passed outside the class\n\nBug: T253922\nChange-Id: I301283aeb814b558d338e600390b8af5679d7f70\nFollows-Up: I44cd7ba39a898a27f0f66cf34238ab95370d2279\n",
"bugs": [
"T253922"
],
"subject": "Mark two FileRepo functions public",
"hash": "693df22570dfbd399a8d1bf4d822e01089d5829f",
"date": "2020-05-28T21:03:02"
}
]
},
"includes/specials/pagers/NewPagesPager.php": {
"File": "includes/specials/pagers/NewPagesPager.php",
"TicketCount": 2,
"CommitCount": 2,
"Tickets": [
"T240924",
"T263655"
],
"Commits": [
{
"message": "NewPagesPager: Ignore nonexistent namespaces\n\nBug: T263655\nChange-Id: I65d8f049f065d08e168a3ae411a500065830c11f\n",
"bugs": [
"T263655"
],
"subject": "NewPagesPager: Ignore nonexistent namespaces",
"hash": "a6767fc35e7fb6663f0f7226e59b030565173079",
"date": "2020-09-23T17:58:31"
},
{
"message": "NewPagesPager: Fix namespace query conditions\n\nBug: T240924\nChange-Id: I28d276cae0518386cac3f9d571ba09e9eff6678b\n",
"bugs": [
"T240924"
],
"subject": "NewPagesPager: Fix namespace query conditions",
"hash": "b390ef6e5825e8906667d7a755d70b3478ce47b7",
"date": "2019-12-17T06:26:33"
}
]
},
"includes/user/UserNameUtils.php": {
"File": "includes/user/UserNameUtils.php",
"TicketCount": 1,
"CommitCount": 2,
"Tickets": [
"T249045"
],
"Commits": [
{
"message": "UserNameUtils: use ITextFormatter instead of MessageLocalizer\n\nBug: T249045\nChange-Id: Ica1e1e4788d4b9f9dfcf9f8c8b4136147d92b32e\n",
"bugs": [
"T249045"
],
"subject": "UserNameUtils: use ITextFormatter instead of MessageLocalizer",
"hash": "7f643f2ab6ea5c8e3734adbcefbf6f4d01787de0",
"date": "2020-04-13T16:28:02"
},
{
"message": "Use wfMessage in UserNameUtils::isUsable for now\n\nUntil a MessageFactory can be properly created without the time pressure\nof holding the train\n\nBug: T249045\nChange-Id: I7474c4aaaaaa095abeb697b3a0c9a6bba2f67633\n",
"bugs": [
"T249045"
],
"subject": "Use wfMessage in UserNameUtils::isUsable for now",
"hash": "f7366e197954fdde1e9340907238922a748968ea",
"date": "2020-03-31T20:53:10"
}
]
},
"includes/parser/ParserOutput.php": {
"File": "includes/parser/ParserOutput.php",
"TicketCount": 2,
"CommitCount": 2,
"Tickets": [
"T261347",
"T264257"
],
"Commits": [
{
"message": "Revert \"Revert \"Revert \"Hard deprecate all public properties in CacheTime and ParserOutput\"\"\"\n\nThis reverts commit deacee9088948e074722af0148000ad9455b07df.\n\nBug: T264257\nChange-Id: Ie68d8081a42e7d8103e287b6d6857a30dc522f75\n",
"bugs": [
"T264257"
],
"subject": "Revert \"Revert \"Revert \"Hard deprecate all public properties in CacheTime and ParserOutput\"\"\"",
"hash": "3254e41a4cc0bcf85b5b0de3e3d237d4ebd7a987",
"date": "2020-10-01T18:03:41"
},
{
"message": "ParserOutput: don't throw on bad editsection\n\nWhen ParserOutput encounters a bad page title in an editsection\nplaceholder, this should not cause a fatal error. We can just not\nproduce an edit link and continue.\n\nIt's still worth logging though, since the parser shouldn't be putting\ninvalid links into editsection placeholders.\n\nBug: T261347\nChange-Id: I154e85aec4b408e659e6281b02473c51f370865d\n",
"bugs": [
"T261347"
],
"subject": "ParserOutput: don't throw on bad editsection",
"hash": "e6f37dc1d8a642d865ec0923ef2a50cd7042d6a3",
"date": "2020-09-23T22:30:59"
}
]
},
"includes/libs/rdbms/database/DatabaseMysqlBase.php": {
"File": "includes/libs/rdbms/database/DatabaseMysqlBase.php",
"TicketCount": 2,
"CommitCount": 2,
"Tickets": [
"T247865",
"T251457"
],
"Commits": [
{
"message": "rdbms: don't treat lock() as a write operation\n\nI8ac4bc4d6 caused lock() to be counted as a write operation. Since\nacquiring a lock may by design take a long time (e.g. PageEditStash),\nthis was causing transactions to be flagged as problematic due to the\nlarge amount of time spent in this \"write query\".\n\nBug: T251457\nChange-Id: Ic54d6c78b43a463c8f6edc6d65baa671a39ee39c\n",
"bugs": [
"T251457"
],
"subject": "rdbms: don't treat lock() as a write operation",
"hash": "4b5984bcca66424f58abda0569d9adc842725d77",
"date": "2020-05-01T16:55:25"
},
{
"message": "rdbms: Don't silence errors in DatabaseMysqlBase::serverIsReadOnly()\n\nIt's highly unlikely that that query would ever error, but if it does\n(and apparently it does sometimes somehow) we need to either handle the\nerror or let it be raised.\n\nSince there doesn't seem to be any particularly sane thing to assume if\nthere is an error, let's go with \"let it be raised\".\n\nBug: T247865\nChange-Id: I6c0e08df90eb46953ba5eb6b5a3e8c6f52929564\n",
"bugs": [
"T247865"
],
"subject": "rdbms: Don't silence errors in DatabaseMysqlBase::serverIsReadOnly()",
"hash": "1ba4d0ccd4bb86bf836cb07c9917f5dd31df2a53",
"date": "2020-03-25T19:09:06"
}
]
},
"includes/OutputPage.php": {
"File": "includes/OutputPage.php",
"TicketCount": 2,
"CommitCount": 2,
"Tickets": [
"T248049",
"T254079"
],
"Commits": [
{
"message": "OutputPage: Temporary hack to avoid taint-check crash\n\nBug: T254079\nChange-Id: Ic4dbba20d5be43d49a39f6a09a734fab6722c44f\n",
"bugs": [
"T254079"
],
"subject": "OutputPage: Temporary hack to avoid taint-check crash",
"hash": "dad17c82da0dfba8348fb03ec8b58202a4860d5d",
"date": "2020-05-31T10:04:13"
},
{
"message": "OutputPage: Fix warning when setting wgUserNewMsgRevisionId\n\nFollow-up to e08e9609ffa0cc8b52a5752acf665861e3857603, which contained a\ntypo ($$ instead of $)\n\nBug: T248049\nChange-Id: I7206cb61a61cad528ece880cffcbdd7b4e04e935\n",
"bugs": [
"T248049"
],
"subject": "OutputPage: Fix warning when setting wgUserNewMsgRevisionId",
"hash": "f160f71823107d028efb94d57627e561d4ff15b7",
"date": "2020-03-19T03:27:14"
}
]
},
"includes/specials/pagers/DeletedContribsPager.php": {
"File": "includes/specials/pagers/DeletedContribsPager.php",
"TicketCount": 2,
"CommitCount": 2,
"Tickets": [
"T252043",
"T252052"
],
"Commits": [
{
"message": "Complete required fields for RevisionFactory::newRevisionFromArchiveRow\n\nRevisionFactory::newRevisionFromArchiveRow requires 'ar_id' field and this will generate undefined property notice once I3baf3de is deployed. The error was previously masked because of mistaken use of RevisionFactory::newRevisionFromRow which does not require this field.\n\nBug: T252052\nChange-Id: I2b8449d117f1cd8ee9abce49ab5b0ebd163f29e9\n",
"bugs": [
"T252052"
],
"subject": "Complete required fields for RevisionFactory::newRevisionFromArchiveRow",
"hash": "820ca474d057c4f36d7cc65bc448e51c21980653",
"date": "2020-05-06T18:33:21"
},
{
"message": "DeletedContribsPager: Revision rows are from the archive table\n\nNeed to use newRevisionFromArchiveRow, not newRevisionFromRow\n\nBroken by 49707c59da2c4776b7752a5f2d5710f772c8d541\n\nBug: T252043\nChange-Id: I3baf3de96cf0ed4981950a8fd7c7944ae72d074b\n",
"bugs": [
"T252043"
],
"subject": "DeletedContribsPager: Revision rows are from the archive table",
"hash": "49a16709773a7d6159960c978682394edc79a1f7",
"date": "2020-05-06T16:29:47"
}
]
},
"includes/Storage/PageEditStash.php": {
"File": "includes/Storage/PageEditStash.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T245928"
],
"Commits": [
{
"message": "stashedit: Ensure that $summary is a string\n\nIt's only documented as string.\n\nBug: T245928\nChange-Id: I8fa287f335e90a59ac18365e7401a5cf703130a3\n",
"bugs": [
"T245928"
],
"subject": "stashedit: Ensure that $summary is a string",
"hash": "60dc4b41f833ae036c1d34e9399a4b1b1b1ca33a",
"date": "2020-02-22T19:55:28"
}
]
},
"includes/Message/MessageFormatterFactory.php": {
"File": "includes/Message/MessageFormatterFactory.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T249045"
],
"Commits": [
{
"message": "UserNameUtils: use ITextFormatter instead of MessageLocalizer\n\nBug: T249045\nChange-Id: Ica1e1e4788d4b9f9dfcf9f8c8b4136147d92b32e\n",
"bugs": [
"T249045"
],
"subject": "UserNameUtils: use ITextFormatter instead of MessageLocalizer",
"hash": "7f643f2ab6ea5c8e3734adbcefbf6f4d01787de0",
"date": "2020-04-13T16:28:02"
}
]
},
"includes/libs/rdbms/loadmonitor/LoadMonitor.php": {
"File": "includes/libs/rdbms/loadmonitor/LoadMonitor.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T245280"
],
"Commits": [
{
"message": "rdbms: Avoid using reserved word \"host\" in Monolog context keys\n\nBug: T245280\nChange-Id: Iee9814aa59e84b4156bf42df43a9ffa5c20bc704\n",
"bugs": [
"T245280"
],
"subject": "rdbms: Avoid using reserved word \"host\" in Monolog context keys",
"hash": "d155717434eda39e872a43186fe510a7f16cc30f",
"date": "2020-02-29T19:15:57"
}
]
},
"includes/Message/TextFormatter.php": {
"File": "includes/Message/TextFormatter.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T249045"
],
"Commits": [
{
"message": "UserNameUtils: use ITextFormatter instead of MessageLocalizer\n\nBug: T249045\nChange-Id: Ica1e1e4788d4b9f9dfcf9f8c8b4136147d92b32e\n",
"bugs": [
"T249045"
],
"subject": "UserNameUtils: use ITextFormatter instead of MessageLocalizer",
"hash": "7f643f2ab6ea5c8e3734adbcefbf6f4d01787de0",
"date": "2020-04-13T16:28:02"
}
]
},
"includes/ServiceWiring.php": {
"File": "includes/ServiceWiring.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T249045"
],
"Commits": [
{
"message": "UserNameUtils: use ITextFormatter instead of MessageLocalizer\n\nBug: T249045\nChange-Id: Ica1e1e4788d4b9f9dfcf9f8c8b4136147d92b32e\n",
"bugs": [
"T249045"
],
"subject": "UserNameUtils: use ITextFormatter instead of MessageLocalizer",
"hash": "7f643f2ab6ea5c8e3734adbcefbf6f4d01787de0",
"date": "2020-04-13T16:28:02"
}
]
},
"includes/actions/Action.php": {
"File": "includes/actions/Action.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T249162"
],
"Commits": [
{
"message": "Revert \"WikiPage/Article split. Rely on Article inside Action\"\n\nThis partialy reverts commit 07f57bd2715634c906065dce1bbd619b39633578.\n\nReason for revert: Article::newFromWikiPage causes an infinite loop\nif 'ArticleFromTitle' hook handler ends up calling Action::getActionName.\n\nThe revert preserves new getArticle and getWikiPage methods since there\nare a few extension changes merged dependent on these. Alternatively this partial revert, we could do a full revert with all the dependencies https://gerrit.wikimedia.org/r/c/mediawiki/core/+/585343\n\nBug: T249162\nChange-Id: Ifa642a631caa2d265ee097711dc8727f84435ef0\n",
"bugs": [
"T249162"
],
"subject": "Revert \"WikiPage/Article split. Rely on Article inside Action\"",
"hash": "64650aaba9aea9b44ab25c2f206cc7e2793eb661",
"date": "2020-04-01T22:30:51"
}
]
},
"includes/deferred/RefreshSecondaryDataUpdate.php": {
"File": "includes/deferred/RefreshSecondaryDataUpdate.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T248003"
],
"Commits": [
{
"message": "RefreshSecondaryDataUpdate: Commit before running sub-updates\n\nThe call to `$this->updater->getSecondaryDataUpdates()` probably started\nan implicit transaction, and a sub-update may have tried to register a\ncallback to watch for a rollback which would make that implicit\ntransaction non-empty.\n\nBug: T248003\nChange-Id: Ib9db8ec9c43c8b2871f283733ed6a05d2dec6dd1\n",
"bugs": [
"T248003"
],
"subject": "RefreshSecondaryDataUpdate: Commit before running sub-updates",
"hash": "b8858d6d5bf43a785b39d0ba1eb8f177cb7d7444",
"date": "2020-04-09T15:17:00"
}
]
},
"includes/deferred/CdnCacheUpdate.php": {
"File": "includes/deferred/CdnCacheUpdate.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T240083"
],
"Commits": [
{
"message": "CdnCacheUpdate: Accept Titles in addition to strings\n\nThe class was already documented as \"given a list of URLs or Title\ninstances\", this makes that work.\n\nTitle objects will have ->getCdnUrls() called when the update is\nresolved, which avoids problems like those encountered in T240083 where\nthat was being called too early.\n\nBug: T240083\nChange-Id: I30b29a7359a8f393fb19ffc199211a421d3ea4d9\n",
"bugs": [
"T240083"
],
"subject": "CdnCacheUpdate: Accept Titles in addition to strings",
"hash": "d83e00cb92f2c850dfe8ad7f31c65f8db78e47b7",
"date": "2020-03-19T13:56:19"
}
]
},
"includes/objectcache/ObjectCache.php": {
"File": "includes/objectcache/ObjectCache.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T247562"
],
"Commits": [
{
"message": "objectcache: Restore 'keyspace' for LocalServerCache service\n\nFollows-up 746d67f5fcc5 which implicitly caused the APCUBagOStuff\nobject to no longer have a wiki-dependent keyspace. This meant\nthat all cache keys were shared across wikis, even if they used\nmakeKey() instead of makeGlobalKey() because the keyspace was\nnot defined (e.g. it was the string \"local\" for all wikis, instead\nof a string like \"enwiki\").\n\nBug: T247562\nChange-Id: I469e107a54aae91b8782a4dd9a2f1390ab9df2e5\n",
"bugs": [
"T247562"
],
"subject": "objectcache: Restore 'keyspace' for LocalServerCache service",
"hash": "ae6b99bf657698cb6ac60c9c5dbb7685e5ee5e8e",
"date": "2020-03-18T01:44:19"
}
]
},
"includes/registration/ExtensionRegistry.php": {
"File": "includes/registration/ExtensionRegistry.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T245629"
],
"Commits": [
{
"message": "ExtensionRegistry: Avoid losing 'defines' when loading lazy-loaded attributes\n\nWhen fetching lazy-loaded attributes in ExtensionRegistry to cache, we are saving all the values\nfrom extension.json a second time. In doing so, we are wrongfully omitting the values\npreviously being defined for the \"defines\" attribute\n(the attribute that is responsible for setting namespace constants).\nThis patch will make sure that we keep the value set in the \"defines\" attribute\nso that the constants are defined when we load from cache the second time.\n\nBug: T245629\nChange-Id: I4f151f88ece56cf718749b9de11fc8e204ccf29d\n",
"bugs": [
"T245629"
],
"subject": "ExtensionRegistry: Avoid losing 'defines' when loading lazy-loaded attributes",
"hash": "478f7e032da6cb7cadf07b40e8ca62eee06285a0",
"date": "2020-03-18T17:32:48"
}
]
},
"includes/registration/ExtensionProcessor.php": {
"File": "includes/registration/ExtensionProcessor.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T245629"
],
"Commits": [
{
"message": "ExtensionRegistry: Avoid losing 'defines' when loading lazy-loaded attributes\n\nWhen fetching lazy-loaded attributes in ExtensionRegistry to cache, we are saving all the values\nfrom extension.json a second time. In doing so, we are wrongfully omitting the values\npreviously being defined for the \"defines\" attribute\n(the attribute that is responsible for setting namespace constants).\nThis patch will make sure that we keep the value set in the \"defines\" attribute\nso that the constants are defined when we load from cache the second time.\n\nBug: T245629\nChange-Id: I4f151f88ece56cf718749b9de11fc8e204ccf29d\n",
"bugs": [
"T245629"
],
"subject": "ExtensionRegistry: Avoid losing 'defines' when loading lazy-loaded attributes",
"hash": "478f7e032da6cb7cadf07b40e8ca62eee06285a0",
"date": "2020-03-18T17:32:48"
}
]
},
"includes/TemplateParser.php": {
"File": "includes/TemplateParser.php",
"TicketCount": 2,
"CommitCount": 1,
"Tickets": [
"T113095",
"T248010"
],
"Commits": [
{
"message": "TemplateParser: Include template dir in cache key\n\nTemplate names aren't expected to be globally unique. Template paths are\nby construction.\n\nInclude the template directory in the cache key in order to avoid the\ncache keys of ambiguosly-named templates - e.g. index.mustache -\noverriding one another.\n\nBug: T113095\nBug: T248010\nChange-Id: I3196967ec2a7a5cec409a0c7ce4471a7d8773978\n",
"bugs": [
"T113095",
"T248010"
],
"subject": "TemplateParser: Include template dir in cache key",
"hash": "d4be8b9c08b839f92530998fa67bacbd9ed007cd",
"date": "2020-03-18T21:57:34"
}
]
},
"includes/libs/StatusValue.php": {
"File": "includes/libs/StatusValue.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T245155"
],
"Commits": [
{
"message": "StatusValue: Fix __toString() to not choke on special parameters\n\ne.g. nested messages, Message::plaintextParam(), and so on.\n\nI'm not inclined to do too much here, since long term we should replace\nMessage with MessageValue and that will likely require reworking or\nreplacing StatusValue too.\n\nBug: T245155\nChange-Id: Ie727de19162467574815853d2584c472a9171240\n",
"bugs": [
"T245155"
],
"subject": "StatusValue: Fix __toString() to not choke on special parameters",
"hash": "c7e451ce95de8731d0054b8ae41f1e2fa3251892",
"date": "2020-02-14T21:51:31"
}
]
},
"includes/actions/HistoryAction.php": {
"File": "includes/actions/HistoryAction.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T248672"
],
"Commits": [
{
"message": "Reintroduce accidentally dropped referenceness\n\nBug: T248672\nChange-Id: I6a82b2e2c1fda7ee362903641d59673bf75912f7\n",
"bugs": [
"T248672"
],
"subject": "Reintroduce accidentally dropped referenceness",
"hash": "fe257bd4e1c6cdfe325039504f6ee5d0c389332f",
"date": "2020-03-27T13:28:27"
}
]
},
"includes/resourceloader/dependencystore/SqlModuleDependencyStore.php": {
"File": "includes/resourceloader/dependencystore/SqlModuleDependencyStore.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T245570"
],
"Commits": [
{
"message": "resourceloader: fix SqlDependencyModuleStore::setMulti() to use upsert()\n\nFollow-up to 5282a02961913cceb8\n\nBug: T245570\nChange-Id: I16c45d389f10b237c649aff34e3a2eaf40464757\n",
"bugs": [
"T245570"
],
"subject": "resourceloader: fix SqlDependencyModuleStore::setMulti() to use upsert()",
"hash": "b6473c3efdf615438e1aa55459baa9e386d67f68",
"date": "2020-02-19T18:30:39"
}
]
},
"includes/api/ApiRollback.php": {
"File": "includes/api/ApiRollback.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T245159"
],
"Commits": [
{
"message": "ApiRollback: Properly deal with UserIdentity\n\nFollow-up I1462edc170127, which enabled the\nUserDef::PARAM_RETURN_OBJECT flag for the 'user' parameter,\nso that it returns UserIdentityValue objects instead of string\nvalues, but the internal use of that value was still expecting\na string\n\n\nBug: T245159\nChange-Id: I2f8d8c406ab81b6d5dc19a1fff389646af61001e\n",
"bugs": [
"T245159"
],
"subject": "ApiRollback: Properly deal with UserIdentity",
"hash": "7bf077baf5503e00902adc3505116d380266c0f5",
"date": "2020-02-13T18:11:04"
}
]
},
"includes/api/ApiLogin.php": {
"File": "includes/api/ApiLogin.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T245280"
],
"Commits": [
{
"message": "Don't use 'message' as a logging key\n\nBug: T245280\nChange-Id: I5904fe7539322c4d923bc8b8c88fda272d7dff8b\n",
"bugs": [
"T245280"
],
"subject": "Don't use 'message' as a logging key",
"hash": "4f98a95aa1e5a88b09b0f186909022992d6e9be1",
"date": "2020-02-14T20:31:29"
}
]
},
"includes/watcheditem/WatchedItemStoreInterface.php": {
"File": "includes/watcheditem/WatchedItemStoreInterface.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T243449"
],
"Commits": [
{
"message": "When clearing don't load the watchlist if we must clear through a job\n\nIt looks like this bug has existed in the special page since before the\ntime of the refactoring into WatchedItemStore although apparently\nit has only just surfaced now!\n\nThis adds a new method into WatchedItemStore that decides if the\nwatchlist can be cleared interactively or must use the job queue.\nThis can then be used in the special page instead of the old logic\nwhich would load the watchlist and then count the loaded items\n(inefficient if you know your clearing the list anyway)\n\nBug: T243449\nChange-Id: I810d89e3e1142a223430f7fc5f8598a493637a72\n",
"bugs": [
"T243449"
],
"subject": "When clearing don't load the watchlist if we must clear through a job",
"hash": "8d3f6b417f2baece555d365dc518ebaf9bcbd7bd",
"date": "2020-01-29T18:36:47"
}
]
},
"includes/Status.php": {
"File": "includes/Status.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T237559"
],
"Commits": [
{
"message": "Do not run wfEscapeWikiText on array in Status class\n\nMessage params could be more complex than a string\nFor example by use of Message::numParam()\n\nBug: T237559\nChange-Id: I1be2ad3f73f189f69f955d1c4e1da75652e5e8ff\n",
"bugs": [
"T237559"
],
"subject": "Do not run wfEscapeWikiText on array in Status class",
"hash": "c4d4d81ae4b376c8865eda18970701675ac1a3fc",
"date": "2019-12-02T12:51:11"
}
]
},
"includes/revisiondelete/RevDelRevisionItem.php": {
"File": "includes/revisiondelete/RevDelRevisionItem.php",
"TicketCount": 2,
"CommitCount": 1,
"Tickets": [
"T139012",
"T239772"
],
"Commits": [
{
"message": "Remove hacks for lack of index on rc_this_oldid\n\nIn several places, we're including rc_timestamp or other fields in a\nquery selecting on rc_this_oldid because there was historically no index\non the column.\n\nThe needed index was created by I0ccfd26d and deployed by T202167, so\nlet's remove the hacks.\n\nBug: T139012\nBug: T239772\nChange-Id: Ic99760075bde6603c9f2ab3ee262f5a2878205c7\n",
"bugs": [
"T139012",
"T239772"
],
"subject": "Remove hacks for lack of index on rc_this_oldid",
"hash": "152376376e6ef60c7169e31582db2be78194b0d4",
"date": "2019-12-04T21:00:02"
}
]
},
"includes/jobqueue/jobs/CategoryMembershipChangeJob.php": {
"File": "includes/jobqueue/jobs/CategoryMembershipChangeJob.php",
"TicketCount": 2,
"CommitCount": 1,
"Tickets": [
"T139012",
"T239772"
],
"Commits": [
{
"message": "Remove hacks for lack of index on rc_this_oldid\n\nIn several places, we're including rc_timestamp or other fields in a\nquery selecting on rc_this_oldid because there was historically no index\non the column.\n\nThe needed index was created by I0ccfd26d and deployed by T202167, so\nlet's remove the hacks.\n\nBug: T139012\nBug: T239772\nChange-Id: Ic99760075bde6603c9f2ab3ee262f5a2878205c7\n",
"bugs": [
"T139012",
"T239772"
],
"subject": "Remove hacks for lack of index on rc_this_oldid",
"hash": "152376376e6ef60c7169e31582db2be78194b0d4",
"date": "2019-12-04T21:00:02"
}
]
},
"includes/changetags/ChangeTags.php": {
"File": "includes/changetags/ChangeTags.php",
"TicketCount": 2,
"CommitCount": 1,
"Tickets": [
"T139012",
"T239772"
],
"Commits": [
{
"message": "Remove hacks for lack of index on rc_this_oldid\n\nIn several places, we're including rc_timestamp or other fields in a\nquery selecting on rc_this_oldid because there was historically no index\non the column.\n\nThe needed index was created by I0ccfd26d and deployed by T202167, so\nlet's remove the hacks.\n\nBug: T139012\nBug: T239772\nChange-Id: Ic99760075bde6603c9f2ab3ee262f5a2878205c7\n",
"bugs": [
"T139012",
"T239772"
],
"subject": "Remove hacks for lack of index on rc_this_oldid",
"hash": "152376376e6ef60c7169e31582db2be78194b0d4",
"date": "2019-12-04T21:00:02"
}
]
},
"includes/api/ApiQueryUserContribs.php": {
"File": "includes/api/ApiQueryUserContribs.php",
"TicketCount": 2,
"CommitCount": 1,
"Tickets": [
"T139012",
"T239772"
],
"Commits": [
{
"message": "Remove hacks for lack of index on rc_this_oldid\n\nIn several places, we're including rc_timestamp or other fields in a\nquery selecting on rc_this_oldid because there was historically no index\non the column.\n\nThe needed index was created by I0ccfd26d and deployed by T202167, so\nlet's remove the hacks.\n\nBug: T139012\nBug: T239772\nChange-Id: Ic99760075bde6603c9f2ab3ee262f5a2878205c7\n",
"bugs": [
"T139012",
"T239772"
],
"subject": "Remove hacks for lack of index on rc_this_oldid",
"hash": "152376376e6ef60c7169e31582db2be78194b0d4",
"date": "2019-12-04T21:00:02"
}
]
},
"includes/ActorMigration.php": {
"File": "includes/ActorMigration.php",
"TicketCount": 2,
"CommitCount": 1,
"Tickets": [
"T239772",
"T207217"
],
"Commits": [
{
"message": "ActorMigration: Improve getWhere() handling of $users\n\nSome callers, when provided an invalid user name, will wind up passing\nnull or false. This raises a PHP warning and winds up treating it as the\nempty array. In this case, it seems best to DWIM and continue that\nbehavior without the warning.\n\nAt the same time, let's more explicitly reject other values for $users.\n\nBug: T239772\nBug: T207217\nChange-Id: I6027481f6cad222369911d5053fecc06c92b36ea\n",
"bugs": [
"T239772",
"T207217"
],
"subject": "ActorMigration: Improve getWhere() handling of $users",
"hash": "531399f5c74803d52f552eacd05f5e22cfc9db87",
"date": "2019-12-04T21:00:02"
}
]
},
"includes/libs/rdbms/database/IDatabase.php": {
"File": "includes/libs/rdbms/database/IDatabase.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T239877"
],
"Commits": [
{
"message": "rdbms: Have Database::makeWhereFrom2d assume $subKey is string-based\n\nUntil I70473280, integer literals were always quoted as strings, because\nthe databases we support all have no problem with casting\nstring-literals for comparisons and such.\n\nBut it turned out that gave MySQL/MariaDB's planner problems in some\nqueries, so we changed it to not quote actual PHP integers.\n\nBut then we run into the fact that PHP associative arrays don't preserve\nthe types of keys, it converts integer-like strings into actual\nintegers. And when those are passed to the DB unquoted for comparison\nwith a string-typed column, MySQL/MariaDB's planner has problems again\nwhile PostgreSQL simply throws an error. Sigh.\n\nThis patch adjusts Database::makeWhereFrom2d to assume that the $subKey\ncolumn is going to need all values quoted, as is the case for all\ncallers in MediaWiki.\n\nBug: T239877\nChange-Id: I69c125e8ab9e4d463eab35c6833aabdc436d7674\n",
"bugs": [
"T239877"
],
"subject": "rdbms: Have Database::makeWhereFrom2d assume $subKey is string-based",
"hash": "9a1ecf2efdb7fa31a8be85ef18c80299da071ed3",
"date": "2019-12-06T11:55:31"
}
]
},
"includes/libs/rdbms/database/Database.php": {
"File": "includes/libs/rdbms/database/Database.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T239877"
],
"Commits": [
{
"message": "rdbms: Have Database::makeWhereFrom2d assume $subKey is string-based\n\nUntil I70473280, integer literals were always quoted as strings, because\nthe databases we support all have no problem with casting\nstring-literals for comparisons and such.\n\nBut it turned out that gave MySQL/MariaDB's planner problems in some\nqueries, so we changed it to not quote actual PHP integers.\n\nBut then we run into the fact that PHP associative arrays don't preserve\nthe types of keys, it converts integer-like strings into actual\nintegers. And when those are passed to the DB unquoted for comparison\nwith a string-typed column, MySQL/MariaDB's planner has problems again\nwhile PostgreSQL simply throws an error. Sigh.\n\nThis patch adjusts Database::makeWhereFrom2d to assume that the $subKey\ncolumn is going to need all values quoted, as is the case for all\ncallers in MediaWiki.\n\nBug: T239877\nChange-Id: I69c125e8ab9e4d463eab35c6833aabdc436d7674\n",
"bugs": [
"T239877"
],
"subject": "rdbms: Have Database::makeWhereFrom2d assume $subKey is string-based",
"hash": "9a1ecf2efdb7fa31a8be85ef18c80299da071ed3",
"date": "2019-12-06T11:55:31"
}
]
},
"includes/api/ApiQueryInfo.php": {
"File": "includes/api/ApiQueryInfo.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T239451"
],
"Commits": [
{
"message": "Avoid master connections for prop=info and intestactionsdetail=full\n\nThere is no security issue using RIGOR_FULL here, because the\ninformation is not used to take an action. It is used for information to\nthe caller and the caller may not allow the action.\nBut even the caller allows the action, the action api code would check\npermission with RIGOR_SECURE before doing the action.\n\nAlso use the constant to make clear which string is from api and which\none is from the PermissionManager\n\nBug: T239451\nChange-Id: If182f0e967187704ba3fdd14592a0badff097571\n",
"bugs": [
"T239451"
],
"subject": "Avoid master connections for prop=info and intestactionsdetail=full",
"hash": "7286cf1c96082fa0ffdffc90a7fd3562d61eae5c",
"date": "2019-12-06T20:29:15"
}
]
},
"includes/watcheditem/WatchedItemStore.php": {
"File": "includes/watcheditem/WatchedItemStore.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T243449"
],
"Commits": [
{
"message": "When clearing don't load the watchlist if we must clear through a job\n\nIt looks like this bug has existed in the special page since before the\ntime of the refactoring into WatchedItemStore although apparently\nit has only just surfaced now!\n\nThis adds a new method into WatchedItemStore that decides if the\nwatchlist can be cleared interactively or must use the job queue.\nThis can then be used in the special page instead of the old logic\nwhich would load the watchlist and then count the loaded items\n(inefficient if you know your clearing the list anyway)\n\nBug: T243449\nChange-Id: I810d89e3e1142a223430f7fc5f8598a493637a72\n",
"bugs": [
"T243449"
],
"subject": "When clearing don't load the watchlist if we must clear through a job",
"hash": "8d3f6b417f2baece555d365dc518ebaf9bcbd7bd",
"date": "2020-01-29T18:36:47"
}
]
},
"includes/libs/rdbms/loadbalancer/LoadBalancer.php": {
"File": "includes/libs/rdbms/loadbalancer/LoadBalancer.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T245280"
],
"Commits": [
{
"message": "Don't use 'host' as a log parameter\n\nBug: T245280\nChange-Id: Ic765677ea9171672bc99913f45ab7d585981e1ed\n",
"bugs": [
"T245280"
],
"subject": "Don't use 'host' as a log parameter",
"hash": "69988cea16b6c51f96e5936221171b9291729dbe",
"date": "2020-02-14T17:59:44"
}
]
},
"includes/watcheditem/NoWriteWatchedItemStore.php": {
"File": "includes/watcheditem/NoWriteWatchedItemStore.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T243449"
],
"Commits": [
{
"message": "When clearing don't load the watchlist if we must clear through a job\n\nIt looks like this bug has existed in the special page since before the\ntime of the refactoring into WatchedItemStore although apparently\nit has only just surfaced now!\n\nThis adds a new method into WatchedItemStore that decides if the\nwatchlist can be cleared interactively or must use the job queue.\nThis can then be used in the special page instead of the old logic\nwhich would load the watchlist and then count the loaded items\n(inefficient if you know your clearing the list anyway)\n\nBug: T243449\nChange-Id: I810d89e3e1142a223430f7fc5f8598a493637a72\n",
"bugs": [
"T243449"
],
"subject": "When clearing don't load the watchlist if we must clear through a job",
"hash": "8d3f6b417f2baece555d365dc518ebaf9bcbd7bd",
"date": "2020-01-29T18:36:47"
}
]
},
"includes/specials/SpecialEditWatchlist.php": {
"File": "includes/specials/SpecialEditWatchlist.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T243449"
],
"Commits": [
{
"message": "When clearing don't load the watchlist if we must clear through a job\n\nIt looks like this bug has existed in the special page since before the\ntime of the refactoring into WatchedItemStore although apparently\nit has only just surfaced now!\n\nThis adds a new method into WatchedItemStore that decides if the\nwatchlist can be cleared interactively or must use the job queue.\nThis can then be used in the special page instead of the old logic\nwhich would load the watchlist and then count the loaded items\n(inefficient if you know your clearing the list anyway)\n\nBug: T243449\nChange-Id: I810d89e3e1142a223430f7fc5f8598a493637a72\n",
"bugs": [
"T243449"
],
"subject": "When clearing don't load the watchlist if we must clear through a job",
"hash": "8d3f6b417f2baece555d365dc518ebaf9bcbd7bd",
"date": "2020-01-29T18:36:47"
}
]
},
"includes/skins/SkinTemplate.php": {
"File": "includes/skins/SkinTemplate.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T244300"
],
"Commits": [
{
"message": "language: remove Language hints for type check as it breaks using of StubUserLang\n\nBug: T244300\nChange-Id: Iec1b5629617f1c171e8af507dc1dcebfef0666eb\n",
"bugs": [
"T244300"
],
"subject": "language: remove Language hints for type check as it breaks using of StubUserLang",
"hash": "ed18dba8f403377ebe6f6a69893eae098b77cf59",
"date": "2020-02-05T14:11:31"
}
]
},
"includes/Rest/Handler/PageHistoryHandler.php": {
"File": "includes/Rest/Handler/PageHistoryHandler.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T244184"
],
"Commits": [
{
"message": "PageHistoryHandler: Undefined index 'query'\n\nBug: T244184\nChange-Id: Ida350938d2a3cbc7be936763108253efb188c42c\n",
"bugs": [
"T244184"
],
"subject": "PageHistoryHandler: Undefined index 'query'",
"hash": "e79b72beebbe4b80ba5206196919f614a876caa1",
"date": "2020-02-10T16:21:08"
}
]
},
"includes/pager/IndexPager.php": {
"File": "includes/pager/IndexPager.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T244937"
],
"Commits": [
{
"message": "ImageHistoryPseudoPager: Update doQuery() for IndexPager changes\n\nThis class duplicates a bunch of code from IndexPager, and that code was\nchanged in 6786aa5d8e2e87f00a3b1f81d9684ff4eac676ef in a way that broke\nthis code. Update it to account for the fact that mFirstShown,\nmLastShown and mPastTheEndIndex are now arrays. Also update the\ndocumentation in IndexPager to reflect that.\n\nBug: T244937\nChange-Id: I51a50b6d3be1467f4ee399446d1d12cfed71a06c\n",
"bugs": [
"T244937"
],
"subject": "ImageHistoryPseudoPager: Update doQuery() for IndexPager changes",
"hash": "bf9ae0768d99a9e19533cc845a87dd182b1fb63f",
"date": "2020-02-11T23:36:28"
}
]
},
"includes/page/ImageHistoryPseudoPager.php": {
"File": "includes/page/ImageHistoryPseudoPager.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T244937"
],
"Commits": [
{
"message": "ImageHistoryPseudoPager: Update doQuery() for IndexPager changes\n\nThis class duplicates a bunch of code from IndexPager, and that code was\nchanged in 6786aa5d8e2e87f00a3b1f81d9684ff4eac676ef in a way that broke\nthis code. Update it to account for the fact that mFirstShown,\nmLastShown and mPastTheEndIndex are now arrays. Also update the\ndocumentation in IndexPager to reflect that.\n\nBug: T244937\nChange-Id: I51a50b6d3be1467f4ee399446d1d12cfed71a06c\n",
"bugs": [
"T244937"
],
"subject": "ImageHistoryPseudoPager: Update doQuery() for IndexPager changes",
"hash": "bf9ae0768d99a9e19533cc845a87dd182b1fb63f",
"date": "2020-02-11T23:36:28"
}
]
},
"includes/logging/LogPage.php": {
"File": "includes/logging/LogPage.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T245178"
],
"Commits": [
{
"message": "LogPage: Unstub $wgLang before use\n\nThe code using $wgLang is also moved inside a conditional, to avoid\nunstubbing $wgLang when unnecessary.\n\nA possible improvement is to use Skin::getLanguage() instead of $wgLang,\nbut that's not guaranteed to be safe, and we want to unblock the train\nwithout introducing new issues.\n\nBug: T245178\nChange-Id: Ifb06d9b890456092633e38b14674cc3ef48690e3\n",
"bugs": [
"T245178"
],
"subject": "LogPage: Unstub $wgLang before use",
"hash": "1967ba0ad6db90788fd86aafe34689d1b0173eb7",
"date": "2020-02-13T17:44:15"
}
]
},
"includes/api/ApiBase.php": {
"File": "includes/api/ApiBase.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T245280"
],
"Commits": [
{
"message": "Don't pass 'ip' through to logging\n\nBug: T245280\nChange-Id: Ib89be9f799e79f46dab661a387822cab43703f61\n",
"bugs": [
"T245280"
],
"subject": "Don't pass 'ip' through to logging",
"hash": "511f9b5d95ebfb3e0f073ebc9a137b564bfd28ff",
"date": "2020-02-14T17:46:10"
}
]
},
"includes/auth/AuthManager.php": {
"File": "includes/auth/AuthManager.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T245280"
],
"Commits": [
{
"message": "Don't pass 'ip' through to logging\n\nBug: T245280\nChange-Id: I2a64b12647631c773099602b8c3264a3fa0f1f85\n",
"bugs": [
"T245280"
],
"subject": "Don't pass 'ip' through to logging",
"hash": "30ad44a1f39517f2d2da228e2da15092841961ac",
"date": "2020-02-14T17:48:55"
}
]
},
"includes/externalstore/ExternalStoreAccess.php": {
"File": "includes/externalstore/ExternalStoreAccess.php",
"TicketCount": 2,
"CommitCount": 1,
"Tickets": [
"T247429",
"T228088"
],
"Commits": [
{
"message": "ExternalStore: report cause of non-exception failure\n\nThis should help with investigating the cause of some errors we have\nbeen seeing sporadically.\n\nBug: T247429\nBug: T228088\nChange-Id: Ibdb48cac447315ed6f37a9cd0e7c05deefc76a28\n",
"bugs": [
"T247429",
"T228088"
],
"subject": "ExternalStore: report cause of non-exception failure",
"hash": "74aba39e34c9cb4d5d91f36e7666bd2d589c0be6",
"date": "2020-04-17T16:00:28"
}
]
},
"includes/export/XmlDumpWriter.php": {
"File": "includes/export/XmlDumpWriter.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T253468"
],
"Commits": [
{
"message": "Xml dumps should not die when the page redirect target cannot be determined\n\nBug: T253468\nChange-Id: I4212073df993d60669d199c254fec242bde653d7\n",
"bugs": [
"T253468"
],
"subject": "Xml dumps should not die when the page redirect target cannot be determined",
"hash": "29992f25271983bc0fe22a1fd7471d11d40d5059",
"date": "2020-05-24T14:33:33"
}
]
},
"includes/Storage/PageUpdater.php": {
"File": "includes/Storage/PageUpdater.php",
"TicketCount": 4,
"CommitCount": 1,
"Tickets": [
"T246720",
"T204793",
"T221763",
"T225366"
],
"Commits": [
{
"message": "RevisionStore and PageUpdater: handle stale page ID\n\nSometimes, an edit is done with a Title object that has gone\nout of sync with the database after a page move. In this case,\nwe should re-load the current page ID from the database,\ninstead of failing the update hard.\n\nBug: T246720\nBug: T204793\nBug: T221763\nBug: T225366\nChange-Id: If7701205ec2bf4d4495349d3e67cf53d32ee8357\n",
"bugs": [
"T246720",
"T204793",
"T221763",
"T225366"
],
"subject": "RevisionStore and PageUpdater: handle stale page ID",
"hash": "1fcd23878cfad4a40429aacec5381ad711d9bbe7",
"date": "2020-04-20T16:11:45"
}
]
},
"includes/TrackingCategories.php": {
"File": "includes/TrackingCategories.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T237467"
],
"Commits": [
{
"message": "Register 'nonnumeric-formatnum' in TrackingCategories::$coreTrackingCategories\n\nBug: T237467\nFollows-Up: Ib6c832df1f69aa4579402701fad1f77e548291ee\nChange-Id: I08df861ec6c93ee9b2b02843c667854a3e017270\n",
"bugs": [
"T237467"
],
"subject": "Register 'nonnumeric-formatnum' in TrackingCategories::$coreTrackingCategories",
"hash": "9ebd96acda20fe6cfd95b64dd04568b0b4757fec",
"date": "2020-09-27T15:00:05"
}
]
},
"includes/api/i18n/qqq.json": {
"File": "includes/api/i18n/qqq.json",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T255700"
],
"Commits": [
{
"message": "API: Handle ContentHandler exception for content model mismatch\n\nEnsure the content we are trying to save and the base content have\nidentical content models before proceeding to save so as to forestall\nException that may be thrown by ContentHandler if it founds they're not.\n\nThere are two cases where the models are allowed to differ: Edit that\nundoes content model change or edit that's meant to explicitly change\nthe model. The logic for these is handled separately and may succeed\nor fail, but exception will not be thrown.\n\nBug: T255700\nChange-Id: I8782732bb0fc3059693cd7035b7ebb43fd71d333\n",
"bugs": [
"T255700"
],
"subject": "API: Handle ContentHandler exception for content model mismatch",
"hash": "7af5678847cc64c0030a717121775ea041a28819",
"date": "2020-09-04T02:41:58"
}
]
},
"includes/api/i18n/en.json": {
"File": "includes/api/i18n/en.json",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T255700"
],
"Commits": [
{
"message": "API: Handle ContentHandler exception for content model mismatch\n\nEnsure the content we are trying to save and the base content have\nidentical content models before proceeding to save so as to forestall\nException that may be thrown by ContentHandler if it founds they're not.\n\nThere are two cases where the models are allowed to differ: Edit that\nundoes content model change or edit that's meant to explicitly change\nthe model. The logic for these is handled separately and may succeed\nor fail, but exception will not be thrown.\n\nBug: T255700\nChange-Id: I8782732bb0fc3059693cd7035b7ebb43fd71d333\n",
"bugs": [
"T255700"
],
"subject": "API: Handle ContentHandler exception for content model mismatch",
"hash": "7af5678847cc64c0030a717121775ea041a28819",
"date": "2020-09-04T02:41:58"
}
]
},
"includes/parser/CacheTime.php": {
"File": "includes/parser/CacheTime.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T264257"
],
"Commits": [
{
"message": "Revert \"Revert \"Revert \"Hard deprecate all public properties in CacheTime and ParserOutput\"\"\"\n\nThis reverts commit deacee9088948e074722af0148000ad9455b07df.\n\nBug: T264257\nChange-Id: Ie68d8081a42e7d8103e287b6d6857a30dc522f75\n",
"bugs": [
"T264257"
],
"subject": "Revert \"Revert \"Revert \"Hard deprecate all public properties in CacheTime and ParserOutput\"\"\"",
"hash": "3254e41a4cc0bcf85b5b0de3e3d237d4ebd7a987",
"date": "2020-10-01T18:03:41"
}
]
},
"includes/filerepo/file/OldLocalFile.php": {
"File": "includes/filerepo/file/OldLocalFile.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T263014"
],
"Commits": [
{
"message": "Revert \"Remove support for (Archived|OldLocal)File::userCan without a user\"\n\nThis reverts commit 264d043d0400d4a0353df03eb5b431dcf25ad0ae.\n\nReason for revert: Parsoid is still using this.\n\nBug: T263014\nChange-Id: I9d6b65b319a45bbdbd479eda0d0580296ceb7f62\n",
"bugs": [
"T263014"
],
"subject": "Revert \"Remove support for (Archived|OldLocal)File::userCan without a user\"",
"hash": "a66e7a6b0c7c1cc46af9c938355e04d955d0d29a",
"date": "2020-09-16T10:47:49"
}
]
},
"includes/filerepo/file/ArchivedFile.php": {
"File": "includes/filerepo/file/ArchivedFile.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T263014"
],
"Commits": [
{
"message": "Revert \"Remove support for (Archived|OldLocal)File::userCan without a user\"\n\nThis reverts commit 264d043d0400d4a0353df03eb5b431dcf25ad0ae.\n\nReason for revert: Parsoid is still using this.\n\nBug: T263014\nChange-Id: I9d6b65b319a45bbdbd479eda0d0580296ceb7f62\n",
"bugs": [
"T263014"
],
"subject": "Revert \"Remove support for (Archived|OldLocal)File::userCan without a user\"",
"hash": "a66e7a6b0c7c1cc46af9c938355e04d955d0d29a",
"date": "2020-09-16T10:47:49"
}
]
},
"includes/filerepo/LocalRepo.php": {
"File": "includes/filerepo/LocalRepo.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T263014"
],
"Commits": [
{
"message": "Hard deprecate File::userCan() with $user=null\n\nThe ArchivedFile::userCan and OldLocalFile::userCan() methods, along\nwith a number of other methods where the user parameter was optional,\nwere deprecated in 1.35, but this case was overlooked. This patch is\nintended for backport to 1.35, so that the $user parameter can be\nremoved in 1.36 in accordance with the deprecation policy.\n\nThis path is known to be used by LocalRepo::findFile(),\nFileRepo::findFile(), and FileRepo::findFileFromKey(), so hacky\nworkarounds have been added in this patch to avoid triggering\ndeprecation warnings in 1.35. T263033 has been filed to fix these\n'correctly' in 1.36.\n\nBug: T263014\nChange-Id: I17cab8ce043a5965aeab089392068b91c686025e\n",
"bugs": [
"T263014"
],
"subject": "Hard deprecate File::userCan() with $user=null",
"hash": "5e703cdf669f85e2924dee76c5a8831633259ce0",
"date": "2020-09-16T16:27:51"
}
]
},
"includes/xml/Xml.php": {
"File": "includes/xml/Xml.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T251351"
],
"Commits": [
{
"message": "Drop down lists: Do not use the value for 'other' as option group\n\nInstead use them as groupless reason list\n\nBug: T251351\nChange-Id: Id691d97e3e6f205615f639e051619f3d0f67c7ba\n",
"bugs": [
"T251351"
],
"subject": "Drop down lists: Do not use the value for 'other' as option group",
"hash": "e878341bfcd9960a238aacf478551de88ed98fc6",
"date": "2020-09-16T19:30:43"
}
]
},
"includes/specials/SpecialUnblock.php": {
"File": "includes/specials/SpecialUnblock.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T263642"
],
"Commits": [
{
"message": "SpecialUnblock: Allow getTargetAndType to accept null $par\n\nAlso add documentation and type hinting for\nSpecialBlock::getTargetAndType\n\nBug: T263642\nChange-Id: If3e78537cd813d8aabbc6ba53c4d0be949ede9a1\n",
"bugs": [
"T263642"
],
"subject": "SpecialUnblock: Allow getTargetAndType to accept null $par",
"hash": "7432a7c7ad8e1ff077e9e20f19279057f139c40d",
"date": "2020-09-23T14:00:34"
}
]
},
"includes/page/Article.php": {
"File": "includes/page/Article.php",
"TicketCount": 2,
"CommitCount": 1,
"Tickets": [
"T187731",
"T259181"
],
"Commits": [
{
"message": "Introduce and apply NonSerializableTrait\n\nThe NonSerializableTrait prevents object serialization via php's native\nserialization mechanism. Most objects are not safe to serialize, and\nNonSerializableTrait provides a covenient and uniform way to protect\nagainst serialization attempts.\n\nThis patch applies the NonSerializableTrait to some key classes in\nMediaWiki.\n\nBug: T187731\nBug: T259181\nChange-Id: I0c3b558d97e3415413bbaa3d98f6ebd5312c4a67\n",
"bugs": [
"T187731",
"T259181"
],
"subject": "Introduce and apply NonSerializableTrait",
"hash": "dc436c3cff5f41bf8f22e0a3d19fa86a1c86b7dd",
"date": "2020-09-28T19:55:49"
}
]
},
"includes/actions/CreditsAction.php": {
"File": "includes/actions/CreditsAction.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T259962"
],
"Commits": [
{
"message": "Revert \"Handle interwiki usernames in action=credits\"\n\nThis reverts commit 6fbddcec19913cdf3e55fcb667f25d6a1b9f44aa.\n\nReason for revert: Caused T259962\n\nBug: T259962\nChange-Id: Ida2c64d5d27b293f13c2f1f6c35672c6c0f7cb0b\n",
"bugs": [
"T259962"
],
"subject": "Revert \"Handle interwiki usernames in action=credits\"",
"hash": "c80e4a33757eaa6366ab6231bc63a8eb51e32422",
"date": "2020-08-08T11:07:14"
}
]
},
"includes/libs/NonSerializableTrait.php": {
"File": "includes/libs/NonSerializableTrait.php",
"TicketCount": 2,
"CommitCount": 1,
"Tickets": [
"T187731",
"T259181"
],
"Commits": [
{
"message": "Introduce and apply NonSerializableTrait\n\nThe NonSerializableTrait prevents object serialization via php's native\nserialization mechanism. Most objects are not safe to serialize, and\nNonSerializableTrait provides a covenient and uniform way to protect\nagainst serialization attempts.\n\nThis patch applies the NonSerializableTrait to some key classes in\nMediaWiki.\n\nBug: T187731\nBug: T259181\nChange-Id: I0c3b558d97e3415413bbaa3d98f6ebd5312c4a67\n",
"bugs": [
"T187731",
"T259181"
],
"subject": "Introduce and apply NonSerializableTrait",
"hash": "dc436c3cff5f41bf8f22e0a3d19fa86a1c86b7dd",
"date": "2020-09-28T19:55:49"
}
]
},
"includes/context/RequestContext.php": {
"File": "includes/context/RequestContext.php",
"TicketCount": 2,
"CommitCount": 1,
"Tickets": [
"T187731",
"T259181"
],
"Commits": [
{
"message": "Introduce and apply NonSerializableTrait\n\nThe NonSerializableTrait prevents object serialization via php's native\nserialization mechanism. Most objects are not safe to serialize, and\nNonSerializableTrait provides a covenient and uniform way to protect\nagainst serialization attempts.\n\nThis patch applies the NonSerializableTrait to some key classes in\nMediaWiki.\n\nBug: T187731\nBug: T259181\nChange-Id: I0c3b558d97e3415413bbaa3d98f6ebd5312c4a67\n",
"bugs": [
"T187731",
"T259181"
],
"subject": "Introduce and apply NonSerializableTrait",
"hash": "dc436c3cff5f41bf8f22e0a3d19fa86a1c86b7dd",
"date": "2020-09-28T19:55:49"
}
]
},
"includes/context/ContextSource.php": {
"File": "includes/context/ContextSource.php",
"TicketCount": 2,
"CommitCount": 1,
"Tickets": [
"T187731",
"T259181"
],
"Commits": [
{
"message": "Introduce and apply NonSerializableTrait\n\nThe NonSerializableTrait prevents object serialization via php's native\nserialization mechanism. Most objects are not safe to serialize, and\nNonSerializableTrait provides a covenient and uniform way to protect\nagainst serialization attempts.\n\nThis patch applies the NonSerializableTrait to some key classes in\nMediaWiki.\n\nBug: T187731\nBug: T259181\nChange-Id: I0c3b558d97e3415413bbaa3d98f6ebd5312c4a67\n",
"bugs": [
"T187731",
"T259181"
],
"subject": "Introduce and apply NonSerializableTrait",
"hash": "dc436c3cff5f41bf8f22e0a3d19fa86a1c86b7dd",
"date": "2020-09-28T19:55:49"
}
]
},
"includes/Revision/SlotRecord.php": {
"File": "includes/Revision/SlotRecord.php",
"TicketCount": 2,
"CommitCount": 1,
"Tickets": [
"T187731",
"T259181"
],
"Commits": [
{
"message": "Introduce and apply NonSerializableTrait\n\nThe NonSerializableTrait prevents object serialization via php's native\nserialization mechanism. Most objects are not safe to serialize, and\nNonSerializableTrait provides a covenient and uniform way to protect\nagainst serialization attempts.\n\nThis patch applies the NonSerializableTrait to some key classes in\nMediaWiki.\n\nBug: T187731\nBug: T259181\nChange-Id: I0c3b558d97e3415413bbaa3d98f6ebd5312c4a67\n",
"bugs": [
"T187731",
"T259181"
],
"subject": "Introduce and apply NonSerializableTrait",
"hash": "dc436c3cff5f41bf8f22e0a3d19fa86a1c86b7dd",
"date": "2020-09-28T19:55:49"
}
]
},
"includes/Revision/RevisionSlots.php": {
"File": "includes/Revision/RevisionSlots.php",
"TicketCount": 2,
"CommitCount": 1,
"Tickets": [
"T187731",
"T259181"
],
"Commits": [
{
"message": "Introduce and apply NonSerializableTrait\n\nThe NonSerializableTrait prevents object serialization via php's native\nserialization mechanism. Most objects are not safe to serialize, and\nNonSerializableTrait provides a covenient and uniform way to protect\nagainst serialization attempts.\n\nThis patch applies the NonSerializableTrait to some key classes in\nMediaWiki.\n\nBug: T187731\nBug: T259181\nChange-Id: I0c3b558d97e3415413bbaa3d98f6ebd5312c4a67\n",
"bugs": [
"T187731",
"T259181"
],
"subject": "Introduce and apply NonSerializableTrait",
"hash": "dc436c3cff5f41bf8f22e0a3d19fa86a1c86b7dd",
"date": "2020-09-28T19:55:49"
}
]
},
"includes/Revision/RevisionRecord.php": {
"File": "includes/Revision/RevisionRecord.php",
"TicketCount": 2,
"CommitCount": 1,
"Tickets": [
"T187731",
"T259181"
],
"Commits": [
{
"message": "Introduce and apply NonSerializableTrait\n\nThe NonSerializableTrait prevents object serialization via php's native\nserialization mechanism. Most objects are not safe to serialize, and\nNonSerializableTrait provides a covenient and uniform way to protect\nagainst serialization attempts.\n\nThis patch applies the NonSerializableTrait to some key classes in\nMediaWiki.\n\nBug: T187731\nBug: T259181\nChange-Id: I0c3b558d97e3415413bbaa3d98f6ebd5312c4a67\n",
"bugs": [
"T187731",
"T259181"
],
"subject": "Introduce and apply NonSerializableTrait",
"hash": "dc436c3cff5f41bf8f22e0a3d19fa86a1c86b7dd",
"date": "2020-09-28T19:55:49"
}
]
},
"includes/MediaWikiServices.php": {
"File": "includes/MediaWikiServices.php",
"TicketCount": 2,
"CommitCount": 1,
"Tickets": [
"T187731",
"T259181"
],
"Commits": [
{
"message": "Introduce and apply NonSerializableTrait\n\nThe NonSerializableTrait prevents object serialization via php's native\nserialization mechanism. Most objects are not safe to serialize, and\nNonSerializableTrait provides a covenient and uniform way to protect\nagainst serialization attempts.\n\nThis patch applies the NonSerializableTrait to some key classes in\nMediaWiki.\n\nBug: T187731\nBug: T259181\nChange-Id: I0c3b558d97e3415413bbaa3d98f6ebd5312c4a67\n",
"bugs": [
"T187731",
"T259181"
],
"subject": "Introduce and apply NonSerializableTrait",
"hash": "dc436c3cff5f41bf8f22e0a3d19fa86a1c86b7dd",
"date": "2020-09-28T19:55:49"
}
]
},
"includes/HookContainer/HookContainer.php": {
"File": "includes/HookContainer/HookContainer.php",
"TicketCount": 2,
"CommitCount": 1,
"Tickets": [
"T187731",
"T259181"
],
"Commits": [
{
"message": "Introduce and apply NonSerializableTrait\n\nThe NonSerializableTrait prevents object serialization via php's native\nserialization mechanism. Most objects are not safe to serialize, and\nNonSerializableTrait provides a covenient and uniform way to protect\nagainst serialization attempts.\n\nThis patch applies the NonSerializableTrait to some key classes in\nMediaWiki.\n\nBug: T187731\nBug: T259181\nChange-Id: I0c3b558d97e3415413bbaa3d98f6ebd5312c4a67\n",
"bugs": [
"T187731",
"T259181"
],
"subject": "Introduce and apply NonSerializableTrait",
"hash": "dc436c3cff5f41bf8f22e0a3d19fa86a1c86b7dd",
"date": "2020-09-28T19:55:49"
}
]
},
"includes/parser/Sanitizer.php": {
"File": "includes/parser/Sanitizer.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T251506"
],
"Commits": [
{
"message": "Sanitizer: Truncate IDs to a reasonable length; deprecate escapeIdReferenceList\n\nOverly-long anchors can cause OOMs later on during TOC processing, and\nare needless.\n\nThe method Sanitizer::escapeIdReferenceList() is also deprecated in\nthis patch, since it is a way to get around the ID length limit and\nappears to be unused outside the Sanitizer class. Since the use\nwithin Sanitizer (for ARIA attributes) appears safe, we'll just make\nthis private in a future release and avoid the potential that someone\nwill misuse this.\n\nBug: T251506\nChange-Id: Ifce057b0c436eabec310f812394e86ee7123e7c8\n",
"bugs": [
"T251506"
],
"subject": "Sanitizer: Truncate IDs to a reasonable length; deprecate escapeIdReferenceList",
"hash": "0de9d89e3727ab17f08158600428dad6c678ff83",
"date": "2020-08-13T15:33:16"
}
]
},
"includes/libs/filebackend/SwiftFileBackend.php": {
"File": "includes/libs/filebackend/SwiftFileBackend.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T259023"
],
"Commits": [
{
"message": "filebackend: Fix index error in SwiftFileBackend\n\nThis fixes a regression introduced by If3d2f18.\n\nBug: T259023\nChange-Id: I654b1bcf0ff65f68ed7d92d51a6b39325da731f3\n",
"bugs": [
"T259023"
],
"subject": "filebackend: Fix index error in SwiftFileBackend",
"hash": "81362c930fc2472f87748a5d653c3924d501111d",
"date": "2020-07-28T13:30:53"
}
]
},
"includes/changes/ChangesList.php": {
"File": "includes/changes/ChangesList.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T251386"
],
"Commits": [
{
"message": "ChangesList::insertRollback - Force rc_this_oldid to integer before use\n\nSame for the other fields that needed to be integers\n\nFollow up to 71b64e46e4b3c5f194597236018756dbab375302\n\nBug: T251386\nChange-Id: Idf4cc7d3cc54a98e46619c0996f8109bc1e88620\n",
"bugs": [
"T251386"
],
"subject": "ChangesList::insertRollback - Force rc_this_oldid to integer before use",
"hash": "3d4fb45f96b98d985759f87122b661ae7246b478",
"date": "2020-04-29T10:56:51"
}
]
},
"includes/DefaultSettings.php": {
"File": "includes/DefaultSettings.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T264799"
],
"Commits": [
{
"message": "Log IP/device changes within the same session\n\nStore IP and device information in the session and log when\nit changes. The goal is to detect session leakage when the\nsession is accidentally sent to another user, which is a\nhypothetical cause of T264370. The log will be noisy since\nusers do change IP addresses for a number of reasons,\nbut we are mainly interested in the ability of correlating\nuser-reported incidents where we have a username to filter\nby, so that's OK.\n\nBased on I27468a3f6d58.\n\nBug: T264799\nChange-Id: Ifa14fa637c1b199159ea11e983a25212ae005565\n",
"bugs": [
"T264799"
],
"subject": "Log IP/device changes within the same session",
"hash": "d5d3c90152299abf73f7747d5c53984d9fb53ea1",
"date": "2020-10-08T20:13:25"
}
]
},
"includes/deferred/LinksUpdate.php": {
"File": "includes/deferred/LinksUpdate.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T250551"
],
"Commits": [
{
"message": "LinksUpdate: report title when no page ID found\n\nBug: T250551\nChange-Id: I97fac4cb4094195d79ad1569d73a77e5805573f3\n",
"bugs": [
"T250551"
],
"subject": "LinksUpdate: report title when no page ID found",
"hash": "7bf7022c54b26777ff2b6fe9e1020e887afd87fd",
"date": "2020-04-30T17:24:39"
}
]
},
"includes/specials/SpecialNewpages.php": {
"File": "includes/specials/SpecialNewpages.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T251950"
],
"Commits": [
{
"message": "SpecialNewpages::revisionFromRcResult - cast visibility as integer\n\nSame with user and actor ids just in case\n\nBug: T251950\nChange-Id: I2713e819153e85ce28f7451b659acb50c68df949\n",
"bugs": [
"T251950"
],
"subject": "SpecialNewpages::revisionFromRcResult - cast visibility as integer",
"hash": "4ca8c99864241133471c9cccdaa394adebec4dff",
"date": "2020-05-05T21:17:22"
}
]
},
"includes/revisionlist/RevisionItem.php": {
"File": "includes/revisionlist/RevisionItem.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T252072"
],
"Commits": [
{
"message": "RevisionItem: Fix providing timestamp in getRevisionLink\n\nCaused by: 49707c59da2c4776b7752a5f2d5710f772c8d541\n\nBug: T252072\nChange-Id: I801c6c07283f220ad5bac828d8204e600ba1db1f\n",
"bugs": [
"T252072"
],
"subject": "RevisionItem: Fix providing timestamp in getRevisionLink",
"hash": "9753db190925363f68f570a5207656b16958c224",
"date": "2020-05-06T21:10:01"
}
]
},
"includes/page/WikiFilePage.php": {
"File": "includes/page/WikiFilePage.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T250767"
],
"Commits": [
{
"message": "Typehint WikiFilePage::setFile\n\nBug: T250767\nChange-Id: I3ac4c4db6c630f5983c93e1c98363f5256ae7326\n",
"bugs": [
"T250767"
],
"subject": "Typehint WikiFilePage::setFile",
"hash": "6b7ab1e09292be72d4a5b94acfbb9e010cb3427e",
"date": "2020-05-11T10:46:53"
}
]
},
"includes/api/ApiMain.php": {
"File": "includes/api/ApiMain.php",
"TicketCount": 2,
"CommitCount": 1,
"Tickets": [
"T261030",
"T264200"
],
"Commits": [
{
"message": "Revert \"ApiEditPage: Show existing watchlist expiry if status is not being changed.\"\n\nThis reverts commit 07e547f47cae761489a33e9ebb8a9b108298f34e.\n\nReason for revert: LiquidThreads extends the ApiEditPage class,\neven though it shouldn't, and thus fails when the dependencies\nare not injected.\n\nBug: T261030\nBug: T264200\nChange-Id: Ib14f8a04bb6c723aa502a47ef9ccde6fe96a0ac7\n",
"bugs": [
"T261030",
"T264200"
],
"subject": "Revert \"ApiEditPage: Show existing watchlist expiry if status is not being changed.\"",
"hash": "149e99f07230d041945871ddb6e0647ccc83dc21",
"date": "2020-09-30T15:29:59"
}
]
},
"includes/specials/SpecialChangeContentModel.php": {
"File": "includes/specials/SpecialChangeContentModel.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T252963"
],
"Commits": [
{
"message": "SpecialChangeContentModel: Only call spam checks on non-empty reasons\n\nThis fixes a fatal error thrown since I12120b51073c, when opening the\nSpecial:ChangeContentModel form, due to a strict string typehint\nfor SpamChecker.\n\nBug: T252963\nChange-Id: Ie29d7bf5cda4a86321a08a76fb18d747a055420f\n",
"bugs": [
"T252963"
],
"subject": "SpecialChangeContentModel: Only call spam checks on non-empty reasons",
"hash": "b1df01900971537ad04fd5a937e03ddd177377b1",
"date": "2020-05-25T00:12:04"
}
]
},
"includes/upload/UploadStash.php": {
"File": "includes/upload/UploadStash.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T254078"
],
"Commits": [
{
"message": "Stop throwing an exception in UploadStash::getExtensionForPath\n\nThe exception serves no purpose, and can only really be triggered via\na test. The API prevents no file extension at all, as does UW js.\n\nThis function (for whatever reason, probably a seperate bug) cannot\nget the extension from a stashed stl file (seems to work fine for\nother types).\n\nWith what/how it's actually used, it doens't really matter if\nwe can't get the extension, we get it by more robust methods later\non.\n\nThis partially reverts 0a82600a27. Before the changes in that commit,\nthe exception was unreachable.\n\nBug: T254078\nChange-Id: I0a7bd13fe8e08c7d4a75b4a3709661dbbf53d6cb\n",
"bugs": [
"T254078"
],
"subject": "Stop throwing an exception in UploadStash::getExtensionForPath",
"hash": "d0d4d903ccbdd2cf9a574735975e67b40835b639",
"date": "2020-05-31T02:02:35"
}
]
},
"includes/Revision/RevisionStoreRecord.php": {
"File": "includes/Revision/RevisionStoreRecord.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T254210"
],
"Commits": [
{
"message": "Add more data to the rev_timestamp assertion error for debugging\n\nBug: T254210\nChange-Id: Icd4595fdddd68191382bb2651ba111b4cef49eeb\n",
"bugs": [
"T254210"
],
"subject": "Add more data to the rev_timestamp assertion error for debugging",
"hash": "0a2ab7c33c8ca4d28e6f116506db2d2239db732c",
"date": "2020-06-03T22:43:19"
}
]
},
"includes/HookContainer/DeprecatedHooks.php": {
"File": "includes/HookContainer/DeprecatedHooks.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T255608"
],
"Commits": [
{
"message": "Revert \"Hard deprecate the `TitleMoveCompleting` hook\"\n\nThis reverts commit 8f7f133ccfaaaa45b7c00835d3d64884bde0c5c3.\n\nPer I8cdef229bf0a3, we still need this in Flow for now, to fix a UBN.\n\nBug: T255608\nChange-Id: Id414c98161b9f560b14d4eaec8aedeec4659df27\n",
"bugs": [
"T255608"
],
"subject": "Revert \"Hard deprecate the `TitleMoveCompleting` hook\"",
"hash": "6fc783ad2b3ef92d4a160dc97e7896fea3904247",
"date": "2020-06-17T04:09:34"
}
]
},
"includes/import/ImportableOldRevisionImporter.php": {
"File": "includes/import/ImportableOldRevisionImporter.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T258666"
],
"Commits": [
{
"message": "Import: use master DB for loading slots.\n\nWe were using the master to load revision data from the revision\ntable, but not when loading slot data. We should use the master DB for\nboth, consistently.\n\nBug: T258666\nChange-Id: I800adb852ec690b63fa926f40428de3272d69584\n",
"bugs": [
"T258666"
],
"subject": "Import: use master DB for loading slots.",
"hash": "cd6d423eefe36bb88a68caf49ad02e006b3fd1f4",
"date": "2020-07-23T16:34:34"
}
]
},
"includes/HookContainer/HookRunner.php": {
"File": "includes/HookContainer/HookRunner.php",
"TicketCount": 2,
"CommitCount": 1,
"Tickets": [
"T250023",
"T255608"
],
"Commits": [
{
"message": "Add PageMoveCompleting hook, to replace TitleMoveCompleting\n\nWe intially thought we wouldn't need this and would only need\nPageMoveComplete, but it turns out Flow does need it.\n\nBug: T250023\nBug: T255608\nChange-Id: I8e7308541d2fe6d02b9dad63e1c86c89f6e7cf53\n",
"bugs": [
"T250023",
"T255608"
],
"subject": "Add PageMoveCompleting hook, to replace TitleMoveCompleting",
"hash": "c8b9d849fc2ef302ec2adf5ec3bdb647d176c2ab",
"date": "2020-06-17T05:27:28"
}
]
},
"includes/Hook/TitleMoveCompletingHook.php": {
"File": "includes/Hook/TitleMoveCompletingHook.php",
"TicketCount": 2,
"CommitCount": 1,
"Tickets": [
"T250023",
"T255608"
],
"Commits": [
{
"message": "Add PageMoveCompleting hook, to replace TitleMoveCompleting\n\nWe intially thought we wouldn't need this and would only need\nPageMoveComplete, but it turns out Flow does need it.\n\nBug: T250023\nBug: T255608\nChange-Id: I8e7308541d2fe6d02b9dad63e1c86c89f6e7cf53\n",
"bugs": [
"T250023",
"T255608"
],
"subject": "Add PageMoveCompleting hook, to replace TitleMoveCompleting",
"hash": "c8b9d849fc2ef302ec2adf5ec3bdb647d176c2ab",
"date": "2020-06-17T05:27:28"
}
]
},
"includes/Hook/PageMoveCompletingHook.php": {
"File": "includes/Hook/PageMoveCompletingHook.php",
"TicketCount": 2,
"CommitCount": 1,
"Tickets": [
"T250023",
"T255608"
],
"Commits": [
{
"message": "Add PageMoveCompleting hook, to replace TitleMoveCompleting\n\nWe intially thought we wouldn't need this and would only need\nPageMoveComplete, but it turns out Flow does need it.\n\nBug: T250023\nBug: T255608\nChange-Id: I8e7308541d2fe6d02b9dad63e1c86c89f6e7cf53\n",
"bugs": [
"T250023",
"T255608"
],
"subject": "Add PageMoveCompleting hook, to replace TitleMoveCompleting",
"hash": "c8b9d849fc2ef302ec2adf5ec3bdb647d176c2ab",
"date": "2020-06-17T05:27:28"
}
]
},
"includes/Hook/PageMoveCompleteHook.php": {
"File": "includes/Hook/PageMoveCompleteHook.php",
"TicketCount": 2,
"CommitCount": 1,
"Tickets": [
"T250023",
"T255608"
],
"Commits": [
{
"message": "Add PageMoveCompleting hook, to replace TitleMoveCompleting\n\nWe intially thought we wouldn't need this and would only need\nPageMoveComplete, but it turns out Flow does need it.\n\nBug: T250023\nBug: T255608\nChange-Id: I8e7308541d2fe6d02b9dad63e1c86c89f6e7cf53\n",
"bugs": [
"T250023",
"T255608"
],
"subject": "Add PageMoveCompleting hook, to replace TitleMoveCompleting",
"hash": "c8b9d849fc2ef302ec2adf5ec3bdb647d176c2ab",
"date": "2020-06-17T05:27:28"
}
]
},
"includes/MediaWiki.php": {
"File": "includes/MediaWiki.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T255620"
],
"Commits": [
{
"message": "Fix redirects using Special:MyLanguage etc. when using a mobile domain\n\n'wgInternalRedirectTargetUrl' should be set using getLinkURL()\n(which doesn't contain the domain) instead of getFullURL().\nThis is already the case for normal article redirects (see how\n'wgInternalRedirectTargetUrl' is set in Article.php).\n\nBug: T255620\nChange-Id: I77473bedd52bc51c8ef53d6bc695b6bf2ebd0bfd\n",
"bugs": [
"T255620"
],
"subject": "Fix redirects using Special:MyLanguage etc. when using a mobile domain",
"hash": "7f0be4f03b20ae93aba2dd5b20eb6d07837cd622",
"date": "2020-06-17T22:41:49"
}
]
},
"includes/specials/SpecialDiff.php": {
"File": "includes/specials/SpecialDiff.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T239265"
],
"Commits": [
{
"message": "Allow to select next/prev/cur on Special:Diff\n\nValidate the used other field for unsigned int manually.\nThe widget does not support setting a type (Requested with T256425)\n\nBug: T239265\nChange-Id: I9b5fa299c370872bb9228d1ba1cdb8cae44cb04a\n",
"bugs": [
"T239265"
],
"subject": "Allow to select next/prev/cur on Special:Diff",
"hash": "057aab5c0c328d72f3176fb5ad63536a5e14a506",
"date": "2020-06-30T19:19:43"
}
]
},
"includes/specialpage/ChangesListSpecialPage.php": {
"File": "includes/specialpage/ChangesListSpecialPage.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T253098"
],
"Commits": [
{
"message": "Filter invalid namespace on Special:RecentChanges and friend\n\nThis removes invalid values from the query and cast everything to int\nThe database field is known as integer and there is no need to pass\nstrings to the database\n\nIn case of all namespaces are invalid the parameter is ignored and all\nnamespaces are returned\n\nBug: T253098\nChange-Id: I166ef53aed669de61c20db42e3da75783ebc3970\n",
"bugs": [
"T253098"
],
"subject": "Filter invalid namespace on Special:RecentChanges and friend",
"hash": "faaee68c418990fa7a4f5ecb181f18e1a439598e",
"date": "2020-07-10T19:42:51"
}
]
},
"includes/media/FormatMetadata.php": {
"File": "includes/media/FormatMetadata.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T257497"
],
"Commits": [
{
"message": "Typehint FormatMetadata::collapseContactInfO()\n\nThe method expects array, but was given a string.\nSince there's only one caller, the caller is fixed\nand the method typehinted.\n\nAlso fix doc comment\n\nBug: T257497\nChange-Id: I67c337c4ee95ca30d968b89251dbbe077d2110e3\n",
"bugs": [
"T257497"
],
"subject": "Typehint FormatMetadata::collapseContactInfO()",
"hash": "a31b63824507f8194cd4f333375e30c54de75534",
"date": "2020-07-14T20:26:47"
}
]
},
"includes/media/ExifBitmapHandler.php": {
"File": "includes/media/ExifBitmapHandler.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T257497"
],
"Commits": [
{
"message": "Typehint FormatMetadata::collapseContactInfO()\n\nThe method expects array, but was given a string.\nSince there's only one caller, the caller is fixed\nand the method typehinted.\n\nAlso fix doc comment\n\nBug: T257497\nChange-Id: I67c337c4ee95ca30d968b89251dbbe077d2110e3\n",
"bugs": [
"T257497"
],
"subject": "Typehint FormatMetadata::collapseContactInfO()",
"hash": "a31b63824507f8194cd4f333375e30c54de75534",
"date": "2020-07-14T20:26:47"
}
]
},
"includes/libs/objectcache/wancache/WANObjectCache.php": {
"File": "includes/libs/objectcache/wancache/WANObjectCache.php",
"TicketCount": 1,
"CommitCount": 1,
"Tickets": [
"T238197"
],
"Commits": [
{
"message": "Add more logging to getWithSetCallback()\n\nTo help isolate the referenced bug, which is a sporadic test failure\nin testGetWithSetCallback().\n\nBug: T238197\nChange-Id: If35d60340c804b6bfe1e9ddfcf53c76373c794b1\n",
"bugs": [
"T238197"
],
"subject": "Add more logging to getWithSetCallback()",
"hash": "24812e409670e31d048314f0f3551538fba8c234",
"date": "2019-11-18T05:32:47"
}
]
}
}