EntitySchema CI broken: Error: Call to undefined method DifferenceEngine::localiseLineNumbers()
Closed, ResolvedPublic3 Estimated Story Points

Description

Example CI build (gerrit change):

1) EntitySchema\Tests\Integration\MediaWiki\Actions\RestoreViewActionTest::testRestoreView
Error: Call to undefined method DifferenceEngine::localiseLineNumbers()

/workspace/src/extensions/EntitySchema/src/Presentation/DiffRenderer.php:25
/workspace/src/extensions/EntitySchema/src/MediaWiki/Actions/RestoreViewAction.php:68
/workspace/src/extensions/EntitySchema/src/MediaWiki/Actions/RestoreViewAction.php:53
/workspace/src/extensions/EntitySchema/tests/phpunit/integration/MediaWiki/Actions/RestoreViewActionTest.php:77
/workspace/src/tests/phpunit/MediaWikiIntegrationTestCase.php:527
phpvfscomposer:///workspace/src/vendor/phpunit/phpunit/phpunit:97

Apparently this method was removed earlier today in Factor out TextDiffer hierarchy from TextSlotDiffRenderer

Event Timeline

Or rather, the method was renamed (localizeLineNumbers), moved to BaseTextDiffer, and also made protected, so we can’t call it externally anymore.

Some form of this call still seems to be needed, otherwise (i.e. if I replace $diffEngine->localiseLineNumbers( $diffRowsHTML ) with just $diffRowsHTML) the line numbers are missing in the undo diff:

image.png (267×336 px, 15 KB)

<td colspan="2" class="diff-lineno" id="mw-diff-left-l1">Schema / <!--LINE 1--></td>

So far I haven’t found any public way to access this method in its new place. TextDiffer::localize() is public, but neither DifferenceEngine nor TextSlotDiffRenderer make their TextDiffer accessible, and it doesn’t seem like we’re supposed to create a new text differ ourselves (neither PhpTextDiffer nor Wikidiff2TextDiffer are newable).

Change 939648 had a related patch set uploaded (by Lucas Werkmeister (WMDE); author: Lucas Werkmeister (WMDE)):

[mediawiki/core@master] Restore DifferenceEngine::localiseLineNumbers()

https://gerrit.wikimedia.org/r/939648

Change 939649 had a related patch set uploaded (by Lucas Werkmeister (WMDE); author: Lucas Werkmeister (WMDE)):

[mediawiki/extensions/EntitySchema@master] DNM: Empty change to test CI

https://gerrit.wikimedia.org/r/939649

Since I can’t find a stable/supported way to call the method, I just uploaded a change to restore the method in its old place, and make properly deprecating it (which would include finding some alternative for EntitySchema) Somebody Else’s Problem™.

Meh, that alone doesn’t work, there’s some strange error in another test (console):

1) EntitySchema\Tests\Integration\MediaWiki\Content\EntitySchemaSlotDiffRendererTest::testGetDiff with data set "changes, removals and additions" (array(array('test label'), array('test description'), array(array('test alias', 'test alias 2')), 'test schema', 'ShExC', '3.0'), array(array('updated label'), array('Testbeschreibung'), array(array('test alias', 'test alias 3'), array('Testalias')), 'schema updated', '3.0'), '<tr>\n	<td colspan="2" class=...n</tr>')
TypeError: Return value of TextSlotDiffRenderer::getTextDiffer() must implement interface MediaWiki\Diff\TextDiffer\TextDiffer, null returned

/workspace/src/includes/diff/TextSlotDiffRenderer.php:200
/workspace/src/includes/diff/TextSlotDiffRenderer.php:324
/workspace/src/includes/diff/TextSlotDiffRenderer.php:277
/workspace/src/includes/diff/TextSlotDiffRenderer.php:305
/workspace/src/extensions/EntitySchema/src/MediaWiki/Content/EntitySchemaSlotDiffRenderer.php:159
/workspace/src/extensions/EntitySchema/src/MediaWiki/Content/EntitySchemaSlotDiffRenderer.php:102
/workspace/src/extensions/EntitySchema/src/MediaWiki/Content/EntitySchemaSlotDiffRenderer.php:75
/workspace/src/extensions/EntitySchema/tests/phpunit/integration/MediaWiki/Content/EntitySchemaSlotDiffRendererTest.php:182

Change 939657 had a related patch set uploaded (by Lucas Werkmeister (WMDE); author: Lucas Werkmeister (WMDE)):

[mediawiki/extensions/EntitySchema@master] Fix EntitySchemaSlotDiffRendererTest

https://gerrit.wikimedia.org/r/939657

Change 939649 abandoned by Lucas Werkmeister (WMDE):

[mediawiki/extensions/EntitySchema@master] DNM: Empty change to test CI

Reason:

we now have a non-empty change to test CI instead, I8af5fe9220

https://gerrit.wikimedia.org/r/939649

TheresNoTime added a subscriber: tstarling.

Just poking @tstarling to let them know I'm going to +2 939648: Restore DifferenceEngine::localiseLineNumbers() seeing as its causing CI breakage and won't drastically affect anything we're currently working on by restoring it.

We may need to review the deprecation process for DifferenceEngine::localiseLineNumbers()

Change 939657 abandoned by Lucas Werkmeister (WMDE):

[mediawiki/extensions/EntitySchema@master] Fix tests creating TextSlotDiffRenderers

Reason:

I added the Depends-On to I8912657002 instead

https://gerrit.wikimedia.org/r/939657

Change 936503 had a related patch set uploaded (by Lucas Werkmeister (WMDE); author: Tim Starling):

[mediawiki/extensions/EntitySchema@master] Avoid direct construction of TextSlotDiffRenderer

https://gerrit.wikimedia.org/r/936503

Change 939648 merged by jenkins-bot:

[mediawiki/core@master] Restore DifferenceEngine::localiseLineNumbers()

https://gerrit.wikimedia.org/r/939648

Change 936503 merged by jenkins-bot:

[mediawiki/extensions/EntitySchema@master] Avoid direct construction of TextSlotDiffRenderer

https://gerrit.wikimedia.org/r/936503

Lucas_Werkmeister_WMDE claimed this task.

Now working again.

EntitySchema CI is fixed as far as I’m concerned; y’all might want to make a follow-up task to deprecate+remove that method again. (But let’s not keep this task open, since I made it a subtask of the wmf.19 deployment blockers.)

karapayneWMDE set the point value for this task to 3.Jul 19 2023, 1:25 PM

Change 939779 had a related patch set uploaded (by Tim Starling; author: Tim Starling):

[mediawiki/core@master] Add SlotDiffRenderer::localizeDiff()

https://gerrit.wikimedia.org/r/939779

Change 939781 had a related patch set uploaded (by Tim Starling; author: Tim Starling):

[mediawiki/extensions/EntitySchema@master] Use the new SlotDiffRenderer::localizeDiff()

https://gerrit.wikimedia.org/r/939781

Change 939779 merged by jenkins-bot:

[mediawiki/core@master] Add SlotDiffRenderer::localizeDiff()

https://gerrit.wikimedia.org/r/939779

Change 939781 merged by jenkins-bot:

[mediawiki/extensions/EntitySchema@master] Use the new SlotDiffRenderer::localizeDiff()

https://gerrit.wikimedia.org/r/939781