Skip to content

support global options arguments before command options#3398

Merged
igaw merged 9 commits into
linux-nvme:masterfrom
igaw:global-opts-group
May 31, 2026
Merged

support global options arguments before command options#3398
igaw merged 9 commits into
linux-nvme:masterfrom
igaw:global-opts-group

Conversation

@igaw
Copy link
Copy Markdown
Collaborator

@igaw igaw commented May 29, 2026

Support global options to be placed as first arguments.

See also:

#2857

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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_ARGS ordering and many call sites to rely on nvme_args for 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.

Comment thread util/argconfig.c Outdated
Comment thread plugin.c
Comment thread plugin.c
Comment thread plugin.c Outdated
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 35 out of 35 changed files in this pull request and generated 7 comments.

Comment thread util/argconfig.c Outdated
Comment thread Documentation/nvme-wdc-vs-error-reason-identifier.txt Outdated
Comment thread Documentation/nvme-sndk-vs-error-reason-identifier.txt Outdated
Comment thread Documentation/nvme-wdc-namespace-resize.txt Outdated
Comment thread Documentation/nvme-sndk-namespace-resize.txt Outdated
Comment thread unit/test-argconfig-parse.c Outdated
Comment thread unit/test-argconfig-parse.c
igaw added 7 commits May 31, 2026 15:04
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>
@igaw igaw force-pushed the global-opts-group branch from 598cab7 to f91eada Compare May 31, 2026 13:12
@igaw igaw requested a review from Copilot May 31, 2026 14:51
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot wasn't able to review this pull request because it exceeds the maximum number of files (300). Try reducing the number of changed files and requesting a review from Copilot again.

igaw added 2 commits May 31, 2026 17:09
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>
@igaw igaw force-pushed the global-opts-group branch from 3f77f4d to a6bba7f Compare May 31, 2026 15:09
@igaw igaw changed the title Global opts group support global options arguments before command options May 31, 2026
@igaw igaw merged commit 1dc3ee5 into linux-nvme:master May 31, 2026
30 of 31 checks passed
@igaw igaw deleted the global-opts-group branch May 31, 2026 15:12
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.

2 participants