diff --git a/RELEASE-NOTES-1.36 b/RELEASE-NOTES-1.36 index 75abf60e4c8..8a8ee29f1eb 100644 --- a/RELEASE-NOTES-1.36 +++ b/RELEASE-NOTES-1.36 @@ -390,6 +390,8 @@ because of Phabricator reports. in public MediaWiki-related git, was removed. * Passing Title as a second parameter to RevisionStore::getPreviousRevision and getNextRevision, hard deprecated since 1.31, was prohibited. +* (T275619) Maintenance::hasOption and Maintenance::getOption now behave as + documented and are not altered by previous calls to these methods. * The internal class FirejailCommand was removed. * Command::execute() now returns a Shellbox\Command\UnboxedResult instead of a MediaWiki\Shell\Result. Any type hints should be updated. diff --git a/maintenance/includes/Maintenance.php b/maintenance/includes/Maintenance.php index 18015670f6a..f68815dec1b 100644 --- a/maintenance/includes/Maintenance.php +++ b/maintenance/includes/Maintenance.php @@ -259,7 +259,8 @@ abstract class Maintenance { } /** - * Checks to see if a particular option exists. + * Checks to see if a particular option was set. + * * @param string $name The name of the option * @return bool */ @@ -282,10 +283,7 @@ abstract class Maintenance { if ( $this->hasOption( $name ) ) { return $this->mOptions[$name]; } else { - // Set it so we don't have to provide the default again - $this->mOptions[$name] = $default; - - return $this->mOptions[$name]; + return $default; } } diff --git a/tests/phpunit/maintenance/MaintenanceTest.php b/tests/phpunit/maintenance/MaintenanceTest.php index 77382270ac1..f535c27ee75 100644 --- a/tests/phpunit/maintenance/MaintenanceTest.php +++ b/tests/phpunit/maintenance/MaintenanceTest.php @@ -526,4 +526,27 @@ class MaintenanceTest extends MaintenanceBaseTestCase { $this->assertEquals( 'yo', $this->maintenance->getOption( 'multi' ) ); $this->assertEquals( [ [ 'multi', 'yo' ] ], $this->maintenance->orderedOptions ); } + + public function testOptionGetters() { + $this->assertSame( + false, + $this->maintenance->hasOption( 'somearg' ), + 'Non existent option not found' + ); + $this->assertSame( + 'default', + $this->maintenance->getOption( 'somearg', 'default' ), + 'Non existent option falls back to default' + ); + $this->assertSame( + false, + $this->maintenance->hasOption( 'somearg' ), + 'Non existent option not found after getting' + ); + $this->assertSame( + 'newdefault', + $this->maintenance->getOption( 'somearg', 'newdefault' ), + 'Non existent option falls back to a new default' + ); + } }