I just pulled in a fresh 1.27alpha (ab1e69b) and suddenly all move actions fail with:
[7468e0b6] /mw-core/index.php?title=%E7%89%B9%E5%88%A5:%E7%A7%BB%E5%8B%95&action=submit MWException from line 220 of ...mw-core\includes\Hooks.php: Detected bug in an extension! Hook hook-TitleMoveComplete-closure has invalid call signature; Parameter 3 to SMW\MediaWiki\Hooks\HookRegistry::SMW\MediaWiki\Hooks\{closure}() expected to be a reference, value given Backtrace: #0 ...mw-core\includes\MovePage.php(376): Hooks::run(string, array) #1 [internal function]: MovePage->{closure}() #2 ...mw-core\includes\db\Database.php(3310): call_user_func(Closure) #3 ...mw-core\includes\db\Database.php(3562): DatabaseBase->runOnTransactionIdleCallbacks() #4 ...mw-core\includes\db\loadbalancer\LoadBalancer.php(1055): DatabaseBase->commit(string, string) #5 [internal function]: LoadBalancer->commitMasterChanges() #6 ...mw-core\includes\db\loadbalancer\LBFactory.php(194): call_user_func_array(array, array) #7 [internal function]: LBFactory->{closure}(LoadBalancer, string, array) #8 ...mw-core\includes\db\loadbalancer\LBFactorySimple.php(152): call_user_func_array(Closure, array) #9 ...mw-core\includes\db\loadbalancer\LBFactory.php(195): LBFactorySimple->forEachLB(Closure, array) #10 ...mw-core\includes\db\loadbalancer\LBFactory.php(212): LBFactory->forEachLBCallMethod(string) #11 ...mw-core\includes\MediaWiki.php(501): LBFactory->commitMasterChanges() #12 ...mw-core\includes\MediaWiki.php(677): MediaWiki->doPreOutputCommit() #13 ...mw-core\includes\MediaWiki.php(474): MediaWiki->main() #14 ...mw-core\index.php(41): MediaWiki->run() #15 {main}
MediaWiki 1.27alpha (ab1e69b)
PHP 5.6.8 (apache2handler)
MySQL 5.6.24
The claimed 3 parameter is a by-reference and this hook definition hasn't seen any change since (I can't remember ...) [0]. It surely works with MW 1.25/1.24/1.23.
$this->handlers['TitleMoveComplete'] = function ( &$oldTitle, &$newTitle, &$user, $oldId, $newId ) { $titleMoveComplete = new TitleMoveComplete( $oldTitle, $newTitle, $user, $oldId, $newId ); return $titleMoveComplete->process(); };
For the sake of amusement I just cleared the hook handler and left it empty such as:
$this->handlers['TitleMoveComplete'] = function ( &$oldTitle, &$newTitle, &$user, $oldId, $newId ) { return true; };
and it still complains with the same exception.