Skip to content

Negatable options can contradict each other #304

Description

@manarth

Context

Symfony Console and Annotated Command support negateable options. An example can be found in the Drush cache:rebuild command which offers the --cache-clear and --no-cache-clear options.

Negateable options are expected to be in balance, if --cache-clear is set (and therefore TRUE), then --no-cache-clear should be FALSE.

The options documentation describes the behaviour where a default of true is provided

If the user adds --no-foo on the commandline, then the value of foo will be false.

https://github.com/consolidation/annotated-command#option-default-values

Steps to reproduce

  • Create a command class with an option "foo" whose default value is set to TRUE.
  • Verify that the --help output demonstrates a --foo and a --no-foo option.
  • Run the command with a --no-foo parameter.

Expected behavior

Tell us what should happen

  • The option value for --no-foo (acquired using $input->getOption()) should be set to TRUE.
  • The option value for --foo (acquired using $input->getOption()) should be set to FALSE.

Actual behavior

Tell us what happens instead

  • ✓ The option value for --no-foo (acquired using $input->getOption()) is set to TRUE.
  • ❌ The option value for --foo (acquired using $input->getOption()) is also set to TRUE.

System Configuration

Which O.S. and PHP version are you using?

  • PHP 8.2.12
  • Alpine Linux (container)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions