(Go: >> BACK << -|- >> HOME <<)

Page MenuHomePhabricator

Make $wgHooks a regular configuration variable
Open, Needs TriagePublic

Description

In the past, $wgHooks could be manipulated to register and unregister hook handlers dynamically. This greatly complicate the logic in HookContainer. Code that needs to register hooks dynamically should use HookContainer::register or HookContainer::scopedRegister instead.

Event Timeline

Change 850669 had a related patch set uploaded (by Daniel Kinzler; author: Daniel Kinzler):

[mediawiki/core@master] Make $wgHooks trigger deprecation warnings.

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

Change 849177 had a related patch set uploaded (by Daniel Kinzler; author: Daniel Kinzler):

[mediawiki/core@master] Treat $wgHooks as a regular setting

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

Change 849177 merged by jenkins-bot:

[mediawiki/core@master] Treat $wgHooks as a regular setting

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

Change 850669 merged by jenkins-bot:

[mediawiki/core@master] Make $wgHooks trigger deprecation warnings.

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

Krinkle subscribed.

This has caused CI jobs to fail, in for example, https://gerrit.wikimedia.org/r/c/mediawiki/extensions/MathSearch/+/902490/ with:

2023-03-29 22:36:06 a6088546b491 wikidb: [8cf9bb9c28c17f5756087930]
PHP Deprecated: Accessing $wgHooks directly is deprecated, use HookContainer::getHandlers() or HookContainer::register() instead. [Called from MediaWiki\Extension\CentralAuth\CentralAuthHooks::onRunExtensionFunctions]

Change 904453 had a related patch set uploaded (by Daniel Kinzler; author: Daniel Kinzler):

[mediawiki/extensions/CentralAuth@master] Use HookContainer to register hooks

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

This has caused CI jobs to fail, in for example, https://gerrit.wikimedia.org/r/c/mediawiki/extensions/MathSearch/+/902490/ with:

2023-03-29 22:36:06 a6088546b491 wikidb: [8cf9bb9c28c17f5756087930]
PHP Deprecated: Accessing $wgHooks directly is deprecated, use HookContainer::getHandlers() or HookContainer::register() instead. [Called from MediaWiki\Extension\CentralAuth\CentralAuthHooks::onRunExtensionFunctions]

Looks like I missed a couple of places. I pushed a patch for CentralAuth. I'll make one for CentralNotice in a bit. Turns out CentralNotice doesn't need fixing.

Access to $wgHooks is still ok in settings files, in Maintenance::finalSetup, and in extension callbacks, because they all execute before MediaWikiServices is initialized. Extension functions are run after, this is why CentralAuth broke.

CodeSearch isn't showing anythign else that needs fixing: https://codesearch.wmcloud.org/deployed/?q=%5E%5Cs*%5C%24wgHooks%5Cb.*%5C%5B%5C%5D&files=&excludeFiles=%5Cbtests%2F%7C%5Cbconfig%5Cb%7CSettings%5C.&repos=

...and once again, we are bitten by the fact that CI is not running all extensions we have in production...

Change 904291 had a related patch set uploaded (by Daniel Kinzler; author: Daniel Kinzler):

[mediawiki/core@REL1_40] Make $wgHooks trigger deprecation warnings.

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

...and once again, we are bitten by the fact that CI is not running all extensions we have in production...

Indeed. See T333535: SpecialPageFatalTest::testSpecialPageDoesNotFatal.

This has caused CI jobs to fail, in for example, https://gerrit.wikimedia.org/r/c/mediawiki/extensions/MathSearch/+/902490/ with:

2023-03-29 22:36:06 a6088546b491 wikidb: [8cf9bb9c28c17f5756087930]
PHP Deprecated: Accessing $wgHooks directly is deprecated, use HookContainer::getHandlers() or HookContainer::register() instead. [Called from MediaWiki\Extension\CentralAuth\CentralAuthHooks::onRunExtensionFunctions]

Looks like I missed a couple of places. I pushed a patch for CentralAuth. I'll make one for CentralNotice in a bit. Turns out CentralNotice doesn't need fixing.

Access to $wgHooks is still ok in settings files, in Maintenance::finalSetup, and in extension callbacks, because they all execute before MediaWikiServices is initialized. Extension functions are run after, this is why CentralAuth broke.

CodeSearch isn't showing anythign else that needs fixing: https://codesearch.wmcloud.org/deployed/?q=%5E%5Cs*%5C%24wgHooks%5Cb.*%5C%5B%5C%5D&files=&excludeFiles=%5Cbtests%2F%7C%5Cbconfig%5Cb%7CSettings%5C.&repos=

AFAICT, we do need the CentralAuth patch to be merged in order to unbreak PageTriage's CI.

Change 904453 merged by jenkins-bot:

[mediawiki/extensions/CentralAuth@master] Use HookContainer to register hooks

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

I had to revert the MediaWiki train (T330209) this morning because MobileFrontend relies on $wgHooks and I have filed that as T333926.

I don't know how CI did not manage to catch the issue when https://gerrit.wikimedia.org/r/c/mediawiki/core/+/850669/ has been proposed given there are at least two jobs testing it with MobileFrontend (PHPUnit extensions testsuite and the Selenium tests).

Change 905980 had a related patch set uploaded (by Jforrester; author: Daniel Kinzler):

[mediawiki/extensions/CentralAuth@REL1_40] Use HookContainer to register hooks

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

Change 905980 merged by jenkins-bot:

[mediawiki/extensions/CentralAuth@REL1_40] Use HookContainer to register hooks

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

Change 904291 merged by jenkins-bot:

[mediawiki/core@REL1_40] Make $wgHooks trigger deprecation warnings.

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

Krinkle moved this task from Untriaged to Registration on the MediaWiki-Core-Hooks board.

The hooks system doesn't have an owner, but tagging API Platform for visibility of @daniel's work on this particular task.