diff --git a/CHANGELOG-3.3.md b/CHANGELOG-3.3.md new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/src/Symfony/Component/Console/Input/ArgvInput.php b/src/Symfony/Component/Console/Input/ArgvInput.php index 85ff6f91d8736..fdaa07fe56c36 100644 --- a/src/Symfony/Component/Console/Input/ArgvInput.php +++ b/src/Symfony/Component/Console/Input/ArgvInput.php @@ -293,9 +293,18 @@ public function hasParameterOption($values, $onlyParams = false) /** * {@inheritdoc} + * + * @param bool $consume If true, the corresponding parameter will be removed from the instance */ - public function getParameterOption($values, $default = false, $onlyParams = false) + public function getParameterOption($values, $default = false, $onlyParams = false/*, bool $consume = false*/) { + $consume = 3 < \func_num_args() ? \func_get_arg(3) : false; + + if ($consume) { + $toConsume = array_search($values, $this->tokens, true); + unset($this->tokens[$toConsume]); + } + $values = (array) $values; $tokens = $this->tokens; diff --git a/src/Symfony/Component/Console/Tests/Input/ArgvInputTest.php b/src/Symfony/Component/Console/Tests/Input/ArgvInputTest.php index 37caaf2d1cd72..119b5551affc4 100644 --- a/src/Symfony/Component/Console/Tests/Input/ArgvInputTest.php +++ b/src/Symfony/Component/Console/Tests/Input/ArgvInputTest.php @@ -455,4 +455,33 @@ public function testParseOptionWithValueOptionalGivenEmptyAndOptionalArgument() $this->assertEquals(['foo' => '0'], $input->getOptions(), '->parse() parses optional options with empty value as null'); $this->assertEquals(['name' => 'bar'], $input->getArguments(), '->parse() parses optional arguments'); } + + /** + * @dataProvider provideParameterToConsume + * + * @group argv + */ + public function testParameterIsConsumed($argv, $key, $onlyParams, $consumed, $expected) + { + $input = new ArgvInput($argv); + $this->assertEquals($expected, $input->getParameterOption($key, false, $onlyParams, $consumed), 'The parameter has been consumed'); + } + + public function provideParameterToConsume() + { + return [ + [['app/console', 'foo:bar'], '-e', false, false, ''], + [['app/console', 'foo:bar'], '-e', false, true, ''], + [['app/console', 'foo:bar', '-e', 'dev'], '-e', false, false, 'dev'], + [['app/console', 'foo:bar', '-e', 'dev'], '-e', false, true, ''], + [['app/console', 'foo:bar', '-e', 'dev', '-f', 'bar'], ['-e', '-f'], false, false, 'dev'], + [['app/console', 'foo:bar', '-e', 'dev', '-f', 'bar'], ['-e', '-f'], false, true, ''], + [['app/console', 'foo:bar', '-e', 'dev', '-f', 'bar'], '-e', false, false, 'dev'], + [['app/console', 'foo:bar', '-e', 'dev', '-f', 'bar'], '-e', false, true, ''], + [['app/console', 'foo:bar', '-e', 'dev', '--foo', 'bar'], '-f', false, false, ''], + [['app/console', 'foo:bar', '-e', 'dev', '--foo', 'bar'], '-f', false, true, ''], + [['app/console', 'foo:bar', '-e', 'dev', '--foo', 'bar'], '--foo', false, false, 'bar'], + [['app/console', 'foo:bar', '-e', 'dev', '--foo', 'bar'], '-f', false, true, ''], + ]; + } } diff --git a/src/Symfony/Component/Security/Http/Firewall/DigestAuthenticationListener.php b/src/Symfony/Component/Security/Http/Firewall/DigestAuthenticationListener.php new file mode 100644 index 0000000000000..e69de29bb2d1d