Skip to content

Fix: propagate MutuallyExclusiveFlags persistent flags to subcommands#2266

Merged
dearchap merged 1 commit intourfave:mainfrom
siutsin:MutuallyExclusiveFlags-persistent-flags-are-not-propagated-to-subcommands
Feb 23, 2026
Merged

Fix: propagate MutuallyExclusiveFlags persistent flags to subcommands#2266
dearchap merged 1 commit intourfave:mainfrom
siutsin:MutuallyExclusiveFlags-persistent-flags-are-not-propagated-to-subcommands

Conversation

@siutsin
Copy link
Contributor

@siutsin siutsin commented Feb 16, 2026

What type of PR is this?

  • bug

What this PR does / why we need it:

  • Fixes persistent flag propagation for flags defined in MutuallyExclusiveFlags groups
  • Changed pCmd.Flags to pCmd.allFlags() in the persistent flag inheritance loop in command_parse.go:39, so that flags from MutuallyExclusiveFlags are included when walking the command lineage
  • Added test TestCommand_ExclusiveFlagsPersistentPropagation to verify the fix

Which issue(s) this PR fixes:

Fixes #2265

Special notes for your reviewer:

allFlags() is already used on line 29 of the same function to populate cmd.appliedFlags for the current command. The ancestor loop on line 39 was the only place still using pCmd.Flags directly, which excluded MutuallyExclusiveFlags groups from propagation.

Testing

  • Added TestCommand_ExclusiveFlagsPersistentPropagation which creates a root command with a MutuallyExclusiveFlags group containing persistent string flags, then verifies a subcommand can receive the flag value
  • All existing tests continue to pass

Release Notes

Fixed persistent flags defined in `MutuallyExclusiveFlags` not being propagated to subcommands

@dearchap dearchap merged commit 7f5c797 into urfave:main Feb 23, 2026
9 checks passed
Maks1mS pushed a commit to stplr-dev/stplr that referenced this pull request Mar 1, 2026
This PR contains the following updates:

| Package | Type | Update | Change | OpenSSF |
|---|---|---|---|---|
| [github.com/urfave/cli/v3](https://github.com/urfave/cli) | require | minor | `v3.6.2` → `v3.7.0` | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/urfave/cli/badge)](https://securityscorecards.dev/viewer/?uri=github.com/urfave/cli) |

---

> ⚠️ **Warning**
>
> Some dependencies could not be looked up. Check the Dependency Dashboard for more information.

---

### Release Notes

<details>
<summary>urfave/cli (github.com/urfave/cli/v3)</summary>

### [`v3.7.0`](https://github.com/urfave/cli/releases/tag/v3.7.0)

[Compare Source](urfave/cli@v3.6.2...v3.7.0)

#### What's Changed

- Fix: use the correct type name in the tracef message by [@&#8203;icholy](https://github.com/icholy) in [#&#8203;2251](urfave/cli#2251)
- chore(deps): bump mkdocs-git-revision-date-localized-plugin from 1.5.0 to 1.5.1 in the python-packages group by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2252](urfave/cli#2252)
- Fix:(issue\_2254) Fix incorrect handling of arg after short option token by [@&#8203;dearchap](https://github.com/dearchap) in [#&#8203;2255](urfave/cli#2255)
- feat: ShellComplete for fish by [@&#8203;marcusramberg](https://github.com/marcusramberg) in [#&#8203;2256](urfave/cli#2256)
- Fix: propagate MutuallyExclusiveFlags persistent flags to subcommands by [@&#8203;siutsin](https://github.com/siutsin) in [#&#8203;2266](urfave/cli#2266)
- feat: support dynamic fish completion by [@&#8203;Maks1mS](https://github.com/Maks1mS) in [#&#8203;2270](urfave/cli#2270)
- fix(help): show GLOBAL OPTIONS for leaf subcommands when HideHelpCommand is true by [@&#8203;TimSoethout](https://github.com/TimSoethout) in [#&#8203;2269](urfave/cli#2269)

#### New Contributors

- [@&#8203;marcusramberg](https://github.com/marcusramberg) made their first contribution in [#&#8203;2256](urfave/cli#2256)
- [@&#8203;siutsin](https://github.com/siutsin) made their first contribution in [#&#8203;2266](urfave/cli#2266)
- [@&#8203;TimSoethout](https://github.com/TimSoethout) made their first contribution in [#&#8203;2269](urfave/cli#2269)

**Full Changelog**: <urfave/cli@v3.6.2...v3.7.0>

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At 12:00 AM through 04:59 AM and 10:00 PM through 11:59 PM, Monday through Friday ( * 0-4,22-23 * * 1-5 ), Only on Sunday and Saturday ( * * * * 0,6 ) (UTC), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xNS4yIiwidXBkYXRlZEluVmVyIjoiNDMuMTUuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiS2luZC9EZXBlbmRlbmNpZXMiXX0=-->

Reviewed-on: https://altlinux.space/stapler/stplr/pulls/340
Co-authored-by: Renovate Bot <stapler-helper-bot@noreply.altlinux.space>
Co-committed-by: Renovate Bot <stapler-helper-bot@noreply.altlinux.space>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

MutuallyExclusiveFlags persistent flags are not propagated to subcommands

2 participants