support global options arguments before command options#3398
Merged
Conversation
There was a problem hiding this comment.
Pull request overview
This PR extends nvme-cli’s argument parsing to support global options appearing before the subcommand, and reorganizes help output to group options more clearly. It updates the command dispatcher to parse and apply global options early, and adjusts several plugin short-options (e.g., -o→-O, -v→-V) to avoid collisions with global options.
Changes:
- Add option-group separators and a new
argconfig_parse_global()that parses only pre-subcommand options. - Update
NVME_ARGSordering and many call sites to rely onnvme_argsfor global flags (verbose/dry-run/no-ioctl-probing/timeout). - Change multiple plugin short options and update related documentation and unit tests.
Reviewed changes
Copilot reviewed 26 out of 26 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| util/argconfig.h | Adds CFG_GROUP_SEPARATOR, OPT_GROUP(), and argconfig_parse_global() declaration. |
| util/argconfig.c | Implements grouped help printing, updates option parsing to skip group separators, and adds argconfig_parse_global(). |
| unit/test-argconfig-parse.c | Adds unit tests for argconfig_parse_global() behavior and stderr capture helper. |
| plugin.c | Parses global options before dispatching subcommands and adjusts plugin/extension dispatch behavior. |
| nvme.h | Reorders NVME_ARGS to list command options before global options and introduces help grouping. |
| nvme.c | Uses nvme_args directly instead of argconfig_parse_seen() for several global-option checks; updates main dispatch call. |
| plugins/zns/zns.c | Updates short options to avoid conflicts (e.g., -v→-V, -o→-O). |
| plugins/wdc/wdc-nvme.c | Updates multiple short options (-o→-O, -v→-V). |
| plugins/virtium/virtium-nvme.c | Updates output file short option (-o→-O). |
| plugins/toshiba/toshiba-nvme.c | Updates output file short option (-o→-O). |
| plugins/shannon/shannon-nvme.c | Updates value short option (-v→-V). |
| plugins/sed/sed.c | Updates verbose short option (-v→-V). |
| plugins/scaleflux/sfx-nvme.c | Updates short options (-v→-V, -o→-O). |
| plugins/sandisk/sandisk-nvme.c | Updates short options (-o→-O, -v→-V). |
| plugins/netapp/netapp-nvme.c | Switches verbose checks to nvme_args.verbose. |
| plugins/micron/micron-nvme.c | Updates short options (-o→-O, -v→-V). |
| plugins/memblaze/memblaze-nvme.c | Updates value short option (-v→-V). |
| plugins/lm/lm-nvme.c | Updates offset short option (-o→-O). |
| plugins/intel/intel-nvme.c | Updates short options (-o→-O, -v→-V). |
| Documentation/nvme-zns-zone-mgmt-send.txt | Updates -o→-O for zsaso. |
| Documentation/nvme-wdc-vs-internal-log.txt | Updates output-file short option to -O. |
| Documentation/nvme-wdc-get-crash-dump.txt | Updates output-file short option to -O. |
| Documentation/nvme-wdc-enc-get-log.txt | Updates output-file short option to -O. |
| Documentation/nvme-wdc-drive-log.txt | Updates output-file short option to -O. |
| Documentation/nvme-virtium-save-smart-to-vtview-log.txt | Updates output-file short option to -O. |
| Documentation/nvme-intel-internal-log.txt | Updates output-file short option to -O. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Make the placement of the global options more flexible. This allows the user do something like alias nvme="nvme -v" Signed-off-by: Daniel Wagner <wagi@kernel.org>
The command line parser sets the nvme_args members correctly now. Thus no need to look into the opts. Signed-off-by: Daniel Wagner <wagi@kernel.org>
The command line parser sets the nvme_args members correctly now. Thus no need to look into the opts. Signed-off-by: Daniel Wagner <wagi@kernel.org>
Test the global options placement. Signed-off-by: Daniel Wagner <wagi@kernel.org>
These are the global short options, no plugin should use it, thus rename them. Signed-off-by: Daniel Wagner <wagi@kernel.org>
The global option parser claims the -o and -v short option. Thus plugins can't use them. Signed-off-by: Daniel Wagner <wagi@kernel.org>
compiler complains with:
‘strncpy’ output may be truncated copying 255 bytes from a string of
length 255 [-Werror=stringop-truncation]
277 | strncpy(smart.path, path, sizeof(smart.path) - 1);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Using snprintf ensures the smart.path is correctly terminated.
Signed-off-by: Daniel Wagner <wagi@kernel.org>
The global options can be place as first optional argument before the command. Signed-off-by: Daniel Wagner <wagi@kernel.org>
Put each command option to a new line to avoid over long lines. Signed-off-by: Daniel Wagner <wagi@kernel.org>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Support global options to be placed as first arguments.
See also:
#2857