resourceloader: Deduplicate module registration conflicts

If an attempt is made to register a ResourceLoader module which has already
been registered, instead of bailing with an error, issue a warning instead, and
allow the lattermost set of module parameters to stick.

Because modules are registered from extensions, and because modules are often
migrated from one extension to another as extensions are refactored, and
because the developers of different extensions are not always aware of each
other's work, throwing an error runs a high risk of causing an outage.

Bug: T116628
Change-Id: Ie3499d9f2ff3bf071f1c2b0176e19440ff55211c
This commit is contained in:
Ori Livneh 2015-10-26 11:23:43 -07:00 committed by Krinkle
parent 602d7901dd
commit b1ea0612f8

View file

@ -322,13 +322,15 @@ class ResourceLoader implements LoggerAwareInterface {
// Allow multiple modules to be registered in one call
$registrations = is_array( $name ) ? $name : array( $name => $info );
foreach ( $registrations as $name => $info ) {
// Disallow duplicate registrations
// Warn on duplicate registrations
if ( isset( $this->moduleInfos[$name] ) ) {
// A module has already been registered by this name
throw new MWException(
'ResourceLoader duplicate registration error. ' .
'Another module has already been registered as ' . $name
);
if ( $this->moduleInfos[$name] === $info ) {
$this->logger->warning(
'ResourceLoader duplicate registration warning. ' .
'Another module has already been registered as ' . $name
);
}
}
// Check $name for validity