build(deps): bump github.com/urfave/cli/v3 from 3.9.0 to 3.9.1

Bumps [github.com/urfave/cli/v3](https://github.com/urfave/cli) from 3.9.0 to 3.9.1.
- [Release notes](https://github.com/urfave/cli/releases)
- [Changelog](https://github.com/urfave/cli/blob/main/docs/CHANGELOG.md)
- [Commits](https://github.com/urfave/cli/compare/v3.9.0...v3.9.1)

---
updated-dependencies:
- dependency-name: github.com/urfave/cli/v3
  dependency-version: 3.9.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
This commit is contained in:
dependabot[bot]
2026-06-11 10:16:36 +00:00
committed by GitHub
parent ba09e7ff06
commit 7e988a0279
13 changed files with 90 additions and 66 deletions

2
go.mod
View File

@@ -20,7 +20,7 @@ require (
github.com/opencontainers/selinux v1.15.1
github.com/seccomp/libseccomp-golang v0.11.1
github.com/sirupsen/logrus v1.9.4
github.com/urfave/cli/v3 v3.9.0
github.com/urfave/cli/v3 v3.9.1
github.com/vishvananda/netlink v1.3.1
github.com/vishvananda/netns v0.0.5
golang.org/x/net v0.56.0

4
go.sum
View File

@@ -60,8 +60,8 @@ github.com/sirupsen/logrus v1.9.4 h1:TsZE7l11zFCLZnZ+teH4Umoq5BhEIfIzfRDZ1Uzql2w
github.com/sirupsen/logrus v1.9.4/go.mod h1:ftWc9WdOfJ0a92nsE2jF5u5ZwH8Bv2zdeOC42RjbV2g=
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
github.com/urfave/cli/v3 v3.9.0 h1:AV9lIiPv3ukYnxunaCUsHnEozptYmDN2F0+yWqLMn/c=
github.com/urfave/cli/v3 v3.9.0/go.mod h1:ysVLtOEmg2tOy6PknnYVhDoouyC/6N42TMeoMzskhso=
github.com/urfave/cli/v3 v3.9.1 h1:OLU13atWZ0M+a4xmyBuBNOLZsSRYXyPeMeNjOvgYP54=
github.com/urfave/cli/v3 v3.9.1/go.mod h1:ysVLtOEmg2tOy6PknnYVhDoouyC/6N42TMeoMzskhso=
github.com/vishvananda/netlink v1.3.1 h1:3AEMt62VKqz90r0tmNhog0r/PpWKmrEShJU0wJW6bV0=
github.com/vishvananda/netlink v1.3.1/go.mod h1:ARtKouGSTGchR8aMwmkzC0qiNPrrWO5JS/XMVl45+b4=
github.com/vishvananda/netns v0.0.5 h1:DfiHV+j8bA32MFM7bfEunvT8IAqQ/NzSJHtcmW5zdEY=

View File

@@ -66,7 +66,7 @@ __%[1]s_bash_autocomplete() {
local description=""
if [[ "${line}" == *:* ]]; then
token="${line%%:*}"
token="${line%%%%:*}"
description="${line#*:}"
fi
@@ -104,4 +104,4 @@ __%[1]s_bash_autocomplete() {
fi
}
complete -o bashdefault -o default -o nospace -F __%[1]s_bash_autocomplete %[1]s
complete -o bashdefault -o default -F __%[1]s_bash_autocomplete %[1]s

View File

@@ -6,7 +6,11 @@ function __%[1]s_perform_completion
# Extract the last arg (partial input)
set -l lastArg (commandline -ct)
set -l results ($args[1] $args[2..-1] $lastArg --generate-shell-completion 2> /dev/null)
if string match -q -- "-*" $lastArg
set results ($args[1] $args[2..-1] $lastArg --generate-shell-completion 2> /dev/null)
else
set results ($args[1] $args[2..-1] --generate-shell-completion 2> /dev/null)
end
# Remove trailing empty lines
for line in $results[-1..1]
@@ -32,4 +36,4 @@ end
# Clear existing completions for %[1]s
complete -c %[1]s -e
# Register completion function
complete -c %[1]s -f -a '(__%[1]s_perform_completion)'
complete -c %[1]s -f -a '(__%[1]s_perform_completion)'

View File

@@ -303,6 +303,9 @@ func (cmd *Command) appendFlag(fl Flag) {
// VisiblePersistentFlags returns a slice of [LocalFlag] with Persistent=true and Hidden=false.
func (cmd *Command) VisiblePersistentFlags() []Flag {
if cmd.isCompletionCommand {
return nil
}
var flags []Flag
for _, fl := range cmd.Root().Flags {
pfl, ok := fl.(LocalFlag)
@@ -370,6 +373,22 @@ func (cmd *Command) lFlag(name string) Flag {
return nil
}
func (cmd *Command) hasPersistentFlagOnAncestor(fl Flag) bool {
for pCmd := cmd.parent; pCmd != nil; pCmd = pCmd.parent {
for _, pFl := range pCmd.allFlags() {
if pFl != fl {
continue
}
pfl, ok := pFl.(LocalFlag)
if ok && !pfl.IsLocal() {
return true
}
}
}
return false
}
func (cmd *Command) lookupFlag(name string) Flag {
for _, pCmd := range cmd.Lineage() {
if f := pCmd.lFlag(name); f != nil {

View File

@@ -141,13 +141,10 @@ func (cmd *Command) run(ctx context.Context, osArgs []string) (_ context.Context
var rargs Args = &stringSliceArgs{v: osArgs}
var args Args = &stringSliceArgs{rargs.Tail()}
if cmd.isCompletionCommand {
tracef("completion command detected, skipping pre-parse (cmd=%[1]q)", cmd.Name)
cmd.parsedArgs = args
return ctx, cmd.Action(ctx, cmd)
}
for _, f := range cmd.allFlags() {
if cmd.hasPersistentFlagOnAncestor(f) {
continue
}
if err := f.PreParse(); err != nil {
return ctx, err
}
@@ -268,13 +265,12 @@ func (cmd *Command) run(ctx context.Context, osArgs []string) (_ context.Context
subCmd = cmd.Command(name)
if subCmd == nil {
hasDefault := cmd.DefaultCommand != ""
isFlagName := slices.Contains(cmd.FlagNames(), name)
if hasDefault {
tracef("using default command=%[1]q (cmd=%[2]q)", cmd.DefaultCommand, cmd.Name)
}
if isFlagName || hasDefault {
if hasDefault {
argsWithDefault := cmd.argsWithDefaultCommand(cmd.parsedArgs)
tracef("using default command args=%[1]q (cmd=%[2]q)", argsWithDefault, cmd.Name)
subCmd = cmd.Command(argsWithDefault.First())

View File

@@ -46,18 +46,33 @@ func (cmd *Command) setupDefaults(osArgs []string) {
}
if cmd.Reader == nil {
tracef("setting default Reader as os.Stdin (cmd=%[1]q)", cmd.Name)
cmd.Reader = os.Stdin
if cmd.parent != nil && cmd.parent.Reader != nil {
tracef("inheriting Reader from parent (cmd=%[1]q)", cmd.Name)
cmd.Reader = cmd.parent.Reader
} else {
tracef("setting default Reader as os.Stdin (cmd=%[1]q)", cmd.Name)
cmd.Reader = os.Stdin
}
}
if cmd.Writer == nil {
tracef("setting default Writer as os.Stdout (cmd=%[1]q)", cmd.Name)
cmd.Writer = os.Stdout
if cmd.parent != nil && cmd.parent.Writer != nil {
tracef("inheriting Writer from parent (cmd=%[1]q)", cmd.Name)
cmd.Writer = cmd.parent.Writer
} else {
tracef("setting default Writer as os.Stdout (cmd=%[1]q)", cmd.Name)
cmd.Writer = os.Stdout
}
}
if cmd.ErrWriter == nil {
tracef("setting default ErrWriter as os.Stderr (cmd=%[1]q)", cmd.Name)
cmd.ErrWriter = os.Stderr
if cmd.parent != nil && cmd.parent.ErrWriter != nil {
tracef("inheriting ErrWriter from parent (cmd=%[1]q)", cmd.Name)
cmd.ErrWriter = cmd.parent.ErrWriter
} else {
tracef("setting default ErrWriter as os.Stderr (cmd=%[1]q)", cmd.Name)
cmd.ErrWriter = os.Stderr
}
}
if cmd.AllowExtFlags {

View File

@@ -4,7 +4,6 @@ import (
"context"
"embed"
"fmt"
"sort"
"strings"
)
@@ -58,45 +57,36 @@ Output the script to path/to/autocomplete/$COMMAND.ps1 an run it.
`
func buildCompletionCommand(appName string) *Command {
return &Command{
Name: completionCommandName,
Hidden: true,
Usage: "Output shell completion script for bash, zsh, fish, or Powershell",
Description: strings.ReplaceAll(completionDescription, "$COMMAND", appName),
Action: func(ctx context.Context, cmd *Command) error {
return printShellCompletion(ctx, cmd, appName)
},
cmd := &Command{
Name: completionCommandName,
Hidden: true,
Usage: "Output shell completion script for bash, zsh, fish, or Powershell",
Description: strings.ReplaceAll(completionDescription, "$COMMAND", appName),
isCompletionCommand: true,
}
for shell, render := range shellCompletions {
cmd.Commands = append(cmd.Commands, buildShellCompletionSubcommand(shell, render, appName))
}
return cmd
}
func printShellCompletion(_ context.Context, cmd *Command, appName string) error {
var shells []string
for k := range shellCompletions {
shells = append(shells, k)
func buildShellCompletionSubcommand(shell string, render renderCompletion, appName string) *Command {
return &Command{
Name: shell,
Usage: fmt.Sprintf("Output %s completion script", shell),
isCompletionCommand: true,
Action: func(ctx context.Context, cmd *Command) error {
completionScript, err := render(cmd, appName)
if err != nil {
return Exit(err, 1)
}
_, err = cmd.Root().Writer.Write([]byte(completionScript))
if err != nil {
return Exit(err, 1)
}
return nil
},
}
sort.Strings(shells)
if cmd.Args().Len() == 0 {
return Exit(fmt.Sprintf("no shell provided for completion command. available shells are %+v", shells), 1)
}
s := cmd.Args().First()
renderCompletion, ok := shellCompletions[s]
if !ok {
return Exit(fmt.Sprintf("unknown shell %s, available shells are %+v", s, shells), 1)
}
completionScript, err := renderCompletion(cmd, appName)
if err != nil {
return Exit(err, 1)
}
_, err = cmd.Writer.Write([]byte(completionScript))
if err != nil {
return Exit(err, 1)
}
return nil
}

View File

@@ -116,7 +116,7 @@ func (bif *BoolWithInverseFlag) PostParse() error {
func (bif *BoolWithInverseFlag) Set(name, val string) error {
if bif.count > 0 && bif.OnlyOnce {
return fmt.Errorf("cant duplicate this flag")
return fmt.Errorf("can't duplicate this flag")
}
bif.hasBeenSet = true
@@ -207,7 +207,7 @@ func (bif *BoolWithInverseFlag) String() string {
return fmt.Sprintf("%s%s", names, out[i:])
}
// IsBoolFlag returns whether the flag doesnt need to accept args
// IsBoolFlag returns whether the flag doesn't need to accept args
func (bif *BoolWithInverseFlag) IsBoolFlag() bool {
return true
}

View File

@@ -193,7 +193,7 @@ func (f *FlagBase[T, C, V]) Set(_ string, val string) error {
}
if f.count == 1 && f.OnlyOnce {
return fmt.Errorf("cant duplicate this flag")
return fmt.Errorf("can't duplicate this flag")
}
f.count++
@@ -301,7 +301,7 @@ func (f *FlagBase[T, C, VC]) IsLocal() bool {
return f.Local
}
// IsBoolFlag returns whether the flag doesnt need to accept args
// IsBoolFlag returns whether the flag doesn't need to accept args
func (f *FlagBase[T, C, VC]) IsBoolFlag() bool {
bf, ok := f.value.(boolFlag)
return ok && bf.IsBoolFlag()

View File

@@ -384,7 +384,7 @@ func (bif *BoolWithInverseFlag) GetValue() string
string if the flag takes no value at all.
func (bif *BoolWithInverseFlag) IsBoolFlag() bool
IsBoolFlag returns whether the flag doesnt need to accept args
IsBoolFlag returns whether the flag doesn't need to accept args
func (bif *BoolWithInverseFlag) IsDefaultVisible() bool
IsDefaultVisible returns true if the flag is not hidden, otherwise false
@@ -1000,7 +1000,7 @@ func (f *FlagBase[T, C, V]) GetValue() string
string if the flag takes no value at all.
func (f *FlagBase[T, C, VC]) IsBoolFlag() bool
IsBoolFlag returns whether the flag doesnt need to accept args
IsBoolFlag returns whether the flag doesn't need to accept args
func (f *FlagBase[T, C, V]) IsDefaultVisible() bool
IsDefaultVisible returns true if the flag is not hidden, otherwise false

View File

@@ -1,4 +1,4 @@
mkdocs-git-revision-date-localized-plugin==1.5.1
mkdocs-git-revision-date-localized-plugin==1.5.3
mkdocs-material==9.7.6
mkdocs==1.6.1
mkdocs-redirects==1.2.3

2
vendor/modules.txt vendored
View File

@@ -94,7 +94,7 @@ github.com/seccomp/libseccomp-golang
## explicit; go 1.17
github.com/sirupsen/logrus
github.com/sirupsen/logrus/hooks/test
# github.com/urfave/cli/v3 v3.9.0
# github.com/urfave/cli/v3 v3.9.1
## explicit; go 1.22
github.com/urfave/cli/v3
# github.com/vishvananda/netlink v1.3.1