forked from mirror/cobra
fix repos
This commit is contained in:
parent
923592041e
commit
0bdb9b08f2
18
README.md
18
README.md
|
@ -6,9 +6,9 @@ Cobra is used in many Go projects such as [Kubernetes](https://kubernetes.io/),
|
||||||
[Hugo](https://gohugo.io), and [GitHub CLI](https://github.com/cli/cli) to
|
[Hugo](https://gohugo.io), and [GitHub CLI](https://github.com/cli/cli) to
|
||||||
name a few. [This list](./projects_using_cobra.md) contains a more extensive list of projects using Cobra.
|
name a few. [This list](./projects_using_cobra.md) contains a more extensive list of projects using Cobra.
|
||||||
|
|
||||||
[![](https://img.shields.io/github/workflow/status/spf13/cobra/Test?longCache=tru&label=Test&logo=github%20actions&logoColor=fff)](https://github.com/spf13/cobra/actions?query=workflow%3ATest)
|
[![](https://img.shields.io/github/workflow/status/spf13/cobra/Test?longCache=tru&label=Test&logo=github%20actions&logoColor=fff)](https://git.internal/re/cobra/actions?query=workflow%3ATest)
|
||||||
[![Go Reference](https://pkg.go.dev/badge/github.com/spf13/cobra.svg)](https://pkg.go.dev/github.com/spf13/cobra)
|
[![Go Reference](https://pkg.go.dev/badge/git.internal/re/cobra.svg)](https://pkg.go.dev/git.internal/re/cobra)
|
||||||
[![Go Report Card](https://goreportcard.com/badge/github.com/spf13/cobra)](https://goreportcard.com/report/github.com/spf13/cobra)
|
[![Go Report Card](https://goreportcard.com/badge/git.internal/re/cobra)](https://goreportcard.com/report/git.internal/re/cobra)
|
||||||
[![Slack](https://img.shields.io/badge/Slack-cobra-brightgreen)](https://gophers.slack.com/archives/CD3LP1199)
|
[![Slack](https://img.shields.io/badge/Slack-cobra-brightgreen)](https://gophers.slack.com/archives/CD3LP1199)
|
||||||
|
|
||||||
# Overview
|
# Overview
|
||||||
|
@ -63,7 +63,7 @@ have children commands and optionally run an action.
|
||||||
|
|
||||||
In the example above, 'server' is the command.
|
In the example above, 'server' is the command.
|
||||||
|
|
||||||
[More about cobra.Command](https://pkg.go.dev/github.com/spf13/cobra#Command)
|
[More about cobra.Command](https://pkg.go.dev/git.internal/re/cobra#Command)
|
||||||
|
|
||||||
## Flags
|
## Flags
|
||||||
|
|
||||||
|
@ -83,13 +83,13 @@ Using Cobra is easy. First, use `go get` to install the latest version
|
||||||
of the library.
|
of the library.
|
||||||
|
|
||||||
```
|
```
|
||||||
go get -u github.com/spf13/cobra@latest
|
go get -u git.internal/re/cobra@latest
|
||||||
```
|
```
|
||||||
|
|
||||||
Next, include Cobra in your application:
|
Next, include Cobra in your application:
|
||||||
|
|
||||||
```go
|
```go
|
||||||
import "github.com/spf13/cobra"
|
import "git.internal/re/cobra"
|
||||||
```
|
```
|
||||||
|
|
||||||
# Usage
|
# Usage
|
||||||
|
@ -100,13 +100,13 @@ develop a Cobra-based application. It is the easiest way to incorporate Cobra in
|
||||||
It can be installed by running:
|
It can be installed by running:
|
||||||
|
|
||||||
```
|
```
|
||||||
go install github.com/spf13/cobra-cli@latest
|
go install git.internal/re/cobra-cli@latest
|
||||||
```
|
```
|
||||||
|
|
||||||
For complete details on using the Cobra-CLI generator, please read [The Cobra Generator README](https://github.com/spf13/cobra-cli/blob/main/README.md)
|
For complete details on using the Cobra-CLI generator, please read [The Cobra Generator README](https://git.internal/re/cobra-cli/blob/main/README.md)
|
||||||
|
|
||||||
For complete details on using the Cobra library, please read the [The Cobra User Guide](user_guide.md).
|
For complete details on using the Cobra library, please read the [The Cobra User Guide](user_guide.md).
|
||||||
|
|
||||||
# License
|
# License
|
||||||
|
|
||||||
Cobra is released under the Apache 2.0 license. See [LICENSE.txt](https://github.com/spf13/cobra/blob/master/LICENSE.txt)
|
Cobra is released under the Apache 2.0 license. See [LICENSE.txt](https://git.internal/re/cobra/blob/master/LICENSE.txt)
|
||||||
|
|
|
@ -208,7 +208,7 @@ __%[1]s_handle_completion_types() {
|
||||||
# Type: menu-complete/menu-complete-backward and insert-completions
|
# Type: menu-complete/menu-complete-backward and insert-completions
|
||||||
# If the user requested inserting one completion at a time, or all
|
# If the user requested inserting one completion at a time, or all
|
||||||
# completions at once on the command-line we must remove the descriptions.
|
# completions at once on the command-line we must remove the descriptions.
|
||||||
# https://github.com/spf13/cobra/issues/1508
|
# https://git.internal/re/cobra/issues/1508
|
||||||
local tab=$'\t' comp
|
local tab=$'\t' comp
|
||||||
while IFS='' read -r comp; do
|
while IFS='' read -r comp; do
|
||||||
[[ -z $comp ]] && continue
|
[[ -z $comp ]] && continue
|
||||||
|
|
|
@ -446,7 +446,7 @@ func (c *Command) HelpFunc() func(*Command, []string) {
|
||||||
return func(c *Command, a []string) {
|
return func(c *Command, a []string) {
|
||||||
c.mergePersistentFlags()
|
c.mergePersistentFlags()
|
||||||
// The help should be sent to stdout
|
// The help should be sent to stdout
|
||||||
// See https://github.com/spf13/cobra/issues/1002
|
// See https://git.internal/re/cobra/issues/1002
|
||||||
err := tmpl(c.OutOrStdout(), c.HelpTemplate(), c)
|
err := tmpl(c.OutOrStdout(), c.HelpTemplate(), c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.PrintErrln(err)
|
c.PrintErrln(err)
|
||||||
|
@ -1528,7 +1528,7 @@ func (c *Command) IsAvailableCommand() bool {
|
||||||
// help topic command; additional help topic command is determined by the
|
// help topic command; additional help topic command is determined by the
|
||||||
// fact that it is NOT runnable/hidden/deprecated, and has no sub commands that
|
// fact that it is NOT runnable/hidden/deprecated, and has no sub commands that
|
||||||
// are runnable/hidden/deprecated.
|
// are runnable/hidden/deprecated.
|
||||||
// Concrete example: https://github.com/spf13/cobra/issues/393#issuecomment-282741924.
|
// Concrete example: https://git.internal/re/cobra/issues/393#issuecomment-282741924.
|
||||||
func (c *Command) IsAdditionalHelpTopicCommand() bool {
|
func (c *Command) IsAdditionalHelpTopicCommand() bool {
|
||||||
// if a command is runnable, deprecated, or hidden it is not a 'help' command
|
// if a command is runnable, deprecated, or hidden it is not a 'help' command
|
||||||
if c.Runnable() || len(c.Deprecated) != 0 || c.Hidden {
|
if c.Runnable() || len(c.Deprecated) != 0 || c.Hidden {
|
||||||
|
|
|
@ -980,7 +980,7 @@ func TestHelpFlagExecutedOnChild(t *testing.T) {
|
||||||
// TestHelpFlagInHelp checks,
|
// TestHelpFlagInHelp checks,
|
||||||
// if '--help' flag is shown in help for child (executing `parent help child`),
|
// if '--help' flag is shown in help for child (executing `parent help child`),
|
||||||
// that has no other flags.
|
// that has no other flags.
|
||||||
// Related to https://github.com/spf13/cobra/issues/302.
|
// Related to https://git.internal/re/cobra/issues/302.
|
||||||
func TestHelpFlagInHelp(t *testing.T) {
|
func TestHelpFlagInHelp(t *testing.T) {
|
||||||
parentCmd := &Command{Use: "parent", Run: func(*Command, []string) {}}
|
parentCmd := &Command{Use: "parent", Run: func(*Command, []string) {}}
|
||||||
|
|
||||||
|
@ -1191,8 +1191,8 @@ func TestShorthandVersionFlagOnlyAddedIfVersionNotDefined(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestUsageIsNotPrintedTwice(t *testing.T) {
|
func TestUsageIsNotPrintedTwice(t *testing.T) {
|
||||||
var cmd = &Command{Use: "root"}
|
cmd := &Command{Use: "root"}
|
||||||
var sub = &Command{Use: "sub"}
|
sub := &Command{Use: "sub"}
|
||||||
cmd.AddCommand(sub)
|
cmd.AddCommand(sub)
|
||||||
|
|
||||||
output, _ := executeCommand(cmd, "")
|
output, _ := executeCommand(cmd, "")
|
||||||
|
@ -1381,7 +1381,6 @@ func TestCaseSensitivityBackwardCompatibility(t *testing.T) {
|
||||||
if err == nil {
|
if err == nil {
|
||||||
t.Error("Expected error on calling a command in upper case while command names are case sensitive. Got nil.")
|
t.Error("Expected error on calling a command in upper case while command names are case sensitive. Got nil.")
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRemoveCommand(t *testing.T) {
|
func TestRemoveCommand(t *testing.T) {
|
||||||
|
@ -1566,7 +1565,7 @@ func TestPersistentHooks(t *testing.T) {
|
||||||
}{
|
}{
|
||||||
// TODO: currently PersistentPreRun* defined in parent does not
|
// TODO: currently PersistentPreRun* defined in parent does not
|
||||||
// run if the matching child subcommand has PersistentPreRun.
|
// run if the matching child subcommand has PersistentPreRun.
|
||||||
// If the behavior changes (https://github.com/spf13/cobra/issues/252)
|
// If the behavior changes (https://git.internal/re/cobra/issues/252)
|
||||||
// this test must be fixed.
|
// this test must be fixed.
|
||||||
{"parentPersPreArgs", parentPersPreArgs},
|
{"parentPersPreArgs", parentPersPreArgs},
|
||||||
{"parentPreArgs", parentPreArgs},
|
{"parentPreArgs", parentPreArgs},
|
||||||
|
@ -1574,7 +1573,7 @@ func TestPersistentHooks(t *testing.T) {
|
||||||
{"parentPostArgs", parentPostArgs},
|
{"parentPostArgs", parentPostArgs},
|
||||||
// TODO: currently PersistentPostRun* defined in parent does not
|
// TODO: currently PersistentPostRun* defined in parent does not
|
||||||
// run if the matching child subcommand has PersistentPostRun.
|
// run if the matching child subcommand has PersistentPostRun.
|
||||||
// If the behavior changes (https://github.com/spf13/cobra/issues/252)
|
// If the behavior changes (https://git.internal/re/cobra/issues/252)
|
||||||
// this test must be fixed.
|
// this test must be fixed.
|
||||||
{"parentPersPostArgs", parentPersPostArgs},
|
{"parentPersPostArgs", parentPersPostArgs},
|
||||||
} {
|
} {
|
||||||
|
@ -1599,7 +1598,7 @@ func TestPersistentHooks(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Related to https://github.com/spf13/cobra/issues/521.
|
// Related to https://git.internal/re/cobra/issues/521.
|
||||||
func TestGlobalNormFuncPropagation(t *testing.T) {
|
func TestGlobalNormFuncPropagation(t *testing.T) {
|
||||||
normFunc := func(f *pflag.FlagSet, name string) pflag.NormalizedName {
|
normFunc := func(f *pflag.FlagSet, name string) pflag.NormalizedName {
|
||||||
return pflag.NormalizedName(name)
|
return pflag.NormalizedName(name)
|
||||||
|
@ -1619,7 +1618,7 @@ func TestGlobalNormFuncPropagation(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Related to https://github.com/spf13/cobra/issues/521.
|
// Related to https://git.internal/re/cobra/issues/521.
|
||||||
func TestNormPassedOnLocal(t *testing.T) {
|
func TestNormPassedOnLocal(t *testing.T) {
|
||||||
toUpper := func(f *pflag.FlagSet, name string) pflag.NormalizedName {
|
toUpper := func(f *pflag.FlagSet, name string) pflag.NormalizedName {
|
||||||
return pflag.NormalizedName(strings.ToUpper(name))
|
return pflag.NormalizedName(strings.ToUpper(name))
|
||||||
|
@ -1633,7 +1632,7 @@ func TestNormPassedOnLocal(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Related to https://github.com/spf13/cobra/issues/521.
|
// Related to https://git.internal/re/cobra/issues/521.
|
||||||
func TestNormPassedOnInherited(t *testing.T) {
|
func TestNormPassedOnInherited(t *testing.T) {
|
||||||
toUpper := func(f *pflag.FlagSet, name string) pflag.NormalizedName {
|
toUpper := func(f *pflag.FlagSet, name string) pflag.NormalizedName {
|
||||||
return pflag.NormalizedName(strings.ToUpper(name))
|
return pflag.NormalizedName(strings.ToUpper(name))
|
||||||
|
@ -1661,7 +1660,7 @@ func TestNormPassedOnInherited(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Related to https://github.com/spf13/cobra/issues/521.
|
// Related to https://git.internal/re/cobra/issues/521.
|
||||||
func TestConsistentNormalizedName(t *testing.T) {
|
func TestConsistentNormalizedName(t *testing.T) {
|
||||||
toUpper := func(f *pflag.FlagSet, name string) pflag.NormalizedName {
|
toUpper := func(f *pflag.FlagSet, name string) pflag.NormalizedName {
|
||||||
return pflag.NormalizedName(strings.ToUpper(name))
|
return pflag.NormalizedName(strings.ToUpper(name))
|
||||||
|
@ -1730,7 +1729,7 @@ func TestCommandsAreSorted(t *testing.T) {
|
||||||
originalNames := []string{"middle", "zlast", "afirst"}
|
originalNames := []string{"middle", "zlast", "afirst"}
|
||||||
expectedNames := []string{"afirst", "middle", "zlast"}
|
expectedNames := []string{"afirst", "middle", "zlast"}
|
||||||
|
|
||||||
var rootCmd = &Command{Use: "root"}
|
rootCmd := &Command{Use: "root"}
|
||||||
|
|
||||||
for _, name := range originalNames {
|
for _, name := range originalNames {
|
||||||
rootCmd.AddCommand(&Command{Use: name})
|
rootCmd.AddCommand(&Command{Use: name})
|
||||||
|
@ -1751,7 +1750,7 @@ func TestEnableCommandSortingIsDisabled(t *testing.T) {
|
||||||
|
|
||||||
originalNames := []string{"middle", "zlast", "afirst"}
|
originalNames := []string{"middle", "zlast", "afirst"}
|
||||||
|
|
||||||
var rootCmd = &Command{Use: "root"}
|
rootCmd := &Command{Use: "root"}
|
||||||
|
|
||||||
for _, name := range originalNames {
|
for _, name := range originalNames {
|
||||||
rootCmd.AddCommand(&Command{Use: name})
|
rootCmd.AddCommand(&Command{Use: name})
|
||||||
|
@ -1768,7 +1767,7 @@ func TestEnableCommandSortingIsDisabled(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestUsageWithGroup(t *testing.T) {
|
func TestUsageWithGroup(t *testing.T) {
|
||||||
var rootCmd = &Command{Use: "root", Short: "test", Run: emptyRun}
|
rootCmd := &Command{Use: "root", Short: "test", Run: emptyRun}
|
||||||
rootCmd.CompletionOptions.DisableDefaultCmd = true
|
rootCmd.CompletionOptions.DisableDefaultCmd = true
|
||||||
|
|
||||||
rootCmd.AddGroup(&Group{ID: "group1", Title: "group1"})
|
rootCmd.AddGroup(&Group{ID: "group1", Title: "group1"})
|
||||||
|
@ -1789,7 +1788,7 @@ func TestUsageWithGroup(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestUsageHelpGroup(t *testing.T) {
|
func TestUsageHelpGroup(t *testing.T) {
|
||||||
var rootCmd = &Command{Use: "root", Short: "test", Run: emptyRun}
|
rootCmd := &Command{Use: "root", Short: "test", Run: emptyRun}
|
||||||
rootCmd.CompletionOptions.DisableDefaultCmd = true
|
rootCmd.CompletionOptions.DisableDefaultCmd = true
|
||||||
|
|
||||||
rootCmd.AddGroup(&Group{ID: "group", Title: "group"})
|
rootCmd.AddGroup(&Group{ID: "group", Title: "group"})
|
||||||
|
@ -1807,7 +1806,7 @@ func TestUsageHelpGroup(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestUsageCompletionGroup(t *testing.T) {
|
func TestUsageCompletionGroup(t *testing.T) {
|
||||||
var rootCmd = &Command{Use: "root", Short: "test", Run: emptyRun}
|
rootCmd := &Command{Use: "root", Short: "test", Run: emptyRun}
|
||||||
|
|
||||||
rootCmd.AddGroup(&Group{ID: "group", Title: "group"})
|
rootCmd.AddGroup(&Group{ID: "group", Title: "group"})
|
||||||
rootCmd.AddGroup(&Group{ID: "help", Title: "help"})
|
rootCmd.AddGroup(&Group{ID: "help", Title: "help"})
|
||||||
|
@ -1827,7 +1826,7 @@ func TestUsageCompletionGroup(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestUngroupedCommand(t *testing.T) {
|
func TestUngroupedCommand(t *testing.T) {
|
||||||
var rootCmd = &Command{Use: "root", Short: "test", Run: emptyRun}
|
rootCmd := &Command{Use: "root", Short: "test", Run: emptyRun}
|
||||||
|
|
||||||
rootCmd.AddGroup(&Group{ID: "group", Title: "group"})
|
rootCmd.AddGroup(&Group{ID: "group", Title: "group"})
|
||||||
rootCmd.AddGroup(&Group{ID: "help", Title: "help"})
|
rootCmd.AddGroup(&Group{ID: "help", Title: "help"})
|
||||||
|
@ -1849,7 +1848,7 @@ func TestUngroupedCommand(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestAddGroup(t *testing.T) {
|
func TestAddGroup(t *testing.T) {
|
||||||
var rootCmd = &Command{Use: "root", Short: "test", Run: emptyRun}
|
rootCmd := &Command{Use: "root", Short: "test", Run: emptyRun}
|
||||||
|
|
||||||
rootCmd.AddGroup(&Group{ID: "group", Title: "Test group"})
|
rootCmd.AddGroup(&Group{ID: "group", Title: "Test group"})
|
||||||
rootCmd.AddCommand(&Command{Use: "cmd", GroupID: "group", Run: emptyRun})
|
rootCmd.AddCommand(&Command{Use: "cmd", GroupID: "group", Run: emptyRun})
|
||||||
|
@ -1863,7 +1862,7 @@ func TestAddGroup(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestWrongGroupFirstLevel(t *testing.T) {
|
func TestWrongGroupFirstLevel(t *testing.T) {
|
||||||
var rootCmd = &Command{Use: "root", Short: "test", Run: emptyRun}
|
rootCmd := &Command{Use: "root", Short: "test", Run: emptyRun}
|
||||||
|
|
||||||
rootCmd.AddGroup(&Group{ID: "group", Title: "Test group"})
|
rootCmd.AddGroup(&Group{ID: "group", Title: "Test group"})
|
||||||
// Use the wrong group ID
|
// Use the wrong group ID
|
||||||
|
@ -1881,8 +1880,8 @@ func TestWrongGroupFirstLevel(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestWrongGroupNestedLevel(t *testing.T) {
|
func TestWrongGroupNestedLevel(t *testing.T) {
|
||||||
var rootCmd = &Command{Use: "root", Short: "test", Run: emptyRun}
|
rootCmd := &Command{Use: "root", Short: "test", Run: emptyRun}
|
||||||
var childCmd = &Command{Use: "child", Run: emptyRun}
|
childCmd := &Command{Use: "child", Run: emptyRun}
|
||||||
rootCmd.AddCommand(childCmd)
|
rootCmd.AddCommand(childCmd)
|
||||||
|
|
||||||
childCmd.AddGroup(&Group{ID: "group", Title: "Test group"})
|
childCmd.AddGroup(&Group{ID: "group", Title: "Test group"})
|
||||||
|
@ -1901,8 +1900,8 @@ func TestWrongGroupNestedLevel(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestWrongGroupForHelp(t *testing.T) {
|
func TestWrongGroupForHelp(t *testing.T) {
|
||||||
var rootCmd = &Command{Use: "root", Short: "test", Run: emptyRun}
|
rootCmd := &Command{Use: "root", Short: "test", Run: emptyRun}
|
||||||
var childCmd = &Command{Use: "child", Run: emptyRun}
|
childCmd := &Command{Use: "child", Run: emptyRun}
|
||||||
rootCmd.AddCommand(childCmd)
|
rootCmd.AddCommand(childCmd)
|
||||||
|
|
||||||
rootCmd.AddGroup(&Group{ID: "group", Title: "Test group"})
|
rootCmd.AddGroup(&Group{ID: "group", Title: "Test group"})
|
||||||
|
@ -1921,8 +1920,8 @@ func TestWrongGroupForHelp(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestWrongGroupForCompletion(t *testing.T) {
|
func TestWrongGroupForCompletion(t *testing.T) {
|
||||||
var rootCmd = &Command{Use: "root", Short: "test", Run: emptyRun}
|
rootCmd := &Command{Use: "root", Short: "test", Run: emptyRun}
|
||||||
var childCmd = &Command{Use: "child", Run: emptyRun}
|
childCmd := &Command{Use: "child", Run: emptyRun}
|
||||||
rootCmd.AddCommand(childCmd)
|
rootCmd.AddCommand(childCmd)
|
||||||
|
|
||||||
rootCmd.AddGroup(&Group{ID: "group", Title: "Test group"})
|
rootCmd.AddGroup(&Group{ID: "group", Title: "Test group"})
|
||||||
|
@ -1992,7 +1991,6 @@ func TestCommandPrintRedirection(t *testing.T) {
|
||||||
errBuff, outBuff := bytes.NewBuffer(nil), bytes.NewBuffer(nil)
|
errBuff, outBuff := bytes.NewBuffer(nil), bytes.NewBuffer(nil)
|
||||||
root := &Command{
|
root := &Command{
|
||||||
Run: func(cmd *Command, args []string) {
|
Run: func(cmd *Command, args []string) {
|
||||||
|
|
||||||
cmd.PrintErr("PrintErr")
|
cmd.PrintErr("PrintErr")
|
||||||
cmd.PrintErrln("PrintErr", "line")
|
cmd.PrintErrln("PrintErr", "line")
|
||||||
cmd.PrintErrf("PrintEr%s", "r")
|
cmd.PrintErrf("PrintEr%s", "r")
|
||||||
|
@ -2080,7 +2078,7 @@ Flags:
|
||||||
|
|
||||||
// TestSortedFlags checks,
|
// TestSortedFlags checks,
|
||||||
// if cmd.LocalFlags() is unsorted when cmd.Flags().SortFlags set to false.
|
// if cmd.LocalFlags() is unsorted when cmd.Flags().SortFlags set to false.
|
||||||
// Related to https://github.com/spf13/cobra/issues/404.
|
// Related to https://git.internal/re/cobra/issues/404.
|
||||||
func TestSortedFlags(t *testing.T) {
|
func TestSortedFlags(t *testing.T) {
|
||||||
c := &Command{}
|
c := &Command{}
|
||||||
c.Flags().SortFlags = false
|
c.Flags().SortFlags = false
|
||||||
|
@ -2106,7 +2104,7 @@ func TestSortedFlags(t *testing.T) {
|
||||||
// TestMergeCommandLineToFlags checks,
|
// TestMergeCommandLineToFlags checks,
|
||||||
// if pflag.CommandLine is correctly merged to c.Flags() after first call
|
// if pflag.CommandLine is correctly merged to c.Flags() after first call
|
||||||
// of c.mergePersistentFlags.
|
// of c.mergePersistentFlags.
|
||||||
// Related to https://github.com/spf13/cobra/issues/443.
|
// Related to https://git.internal/re/cobra/issues/443.
|
||||||
func TestMergeCommandLineToFlags(t *testing.T) {
|
func TestMergeCommandLineToFlags(t *testing.T) {
|
||||||
pflag.Bool("boolflag", false, "")
|
pflag.Bool("boolflag", false, "")
|
||||||
c := &Command{Use: "c", Run: emptyRun}
|
c := &Command{Use: "c", Run: emptyRun}
|
||||||
|
@ -2120,7 +2118,7 @@ func TestMergeCommandLineToFlags(t *testing.T) {
|
||||||
|
|
||||||
// TestUseDeprecatedFlags checks,
|
// TestUseDeprecatedFlags checks,
|
||||||
// if cobra.Execute() prints a message, if a deprecated flag is used.
|
// if cobra.Execute() prints a message, if a deprecated flag is used.
|
||||||
// Related to https://github.com/spf13/cobra/issues/463.
|
// Related to https://git.internal/re/cobra/issues/463.
|
||||||
func TestUseDeprecatedFlags(t *testing.T) {
|
func TestUseDeprecatedFlags(t *testing.T) {
|
||||||
c := &Command{Use: "c", Run: emptyRun}
|
c := &Command{Use: "c", Run: emptyRun}
|
||||||
c.Flags().BoolP("deprecated", "d", false, "deprecated flag")
|
c.Flags().BoolP("deprecated", "d", false, "deprecated flag")
|
||||||
|
@ -2235,7 +2233,7 @@ func TestTraverseWithTwoSubcommands(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestUpdateName checks if c.Name() updates on changed c.Use.
|
// TestUpdateName checks if c.Name() updates on changed c.Use.
|
||||||
// Related to https://github.com/spf13/cobra/pull/422#discussion_r143918343.
|
// Related to https://git.internal/re/cobra/pull/422#discussion_r143918343.
|
||||||
func TestUpdateName(t *testing.T) {
|
func TestUpdateName(t *testing.T) {
|
||||||
c := &Command{Use: "name xyz"}
|
c := &Command{Use: "name xyz"}
|
||||||
originalName := c.Name()
|
originalName := c.Name()
|
||||||
|
@ -2517,8 +2515,10 @@ func TestSetContextPersistentPreRun(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const VersionFlag = "--version"
|
const (
|
||||||
const HelpFlag = "--help"
|
VersionFlag = "--version"
|
||||||
|
HelpFlag = "--help"
|
||||||
|
)
|
||||||
|
|
||||||
func TestNoRootRunCommandExecutedWithVersionSet(t *testing.T) {
|
func TestNoRootRunCommandExecutedWithVersionSet(t *testing.T) {
|
||||||
rootCmd := &Command{Use: "root", Version: "1.0.0", Long: "Long description"}
|
rootCmd := &Command{Use: "root", Version: "1.0.0", Long: "Long description"}
|
||||||
|
|
|
@ -584,7 +584,7 @@ func checkIfFlagCompletion(finalCmd *Command, args []string, lastArg string) (*p
|
||||||
// Flag is shorthand
|
// Flag is shorthand
|
||||||
// We have to get the last shorthand flag name
|
// We have to get the last shorthand flag name
|
||||||
// e.g. `-asd` => d to provide the correct completion
|
// e.g. `-asd` => d to provide the correct completion
|
||||||
// https://github.com/spf13/cobra/issues/1257
|
// https://git.internal/re/cobra/issues/1257
|
||||||
flagName = lastArg[index-1 : index]
|
flagName = lastArg[index-1 : index]
|
||||||
}
|
}
|
||||||
lastArg = lastArg[index+1:]
|
lastArg = lastArg[index+1:]
|
||||||
|
@ -610,7 +610,7 @@ func checkIfFlagCompletion(finalCmd *Command, args []string, lastArg string) (*p
|
||||||
// Flag is shorthand
|
// Flag is shorthand
|
||||||
// We have to get the last shorthand flag name
|
// We have to get the last shorthand flag name
|
||||||
// e.g. `-asd` => d to provide the correct completion
|
// e.g. `-asd` => d to provide the correct completion
|
||||||
// https://github.com/spf13/cobra/issues/1257
|
// https://git.internal/re/cobra/issues/1257
|
||||||
flagName = prevArg[len(prevArg)-1:]
|
flagName = prevArg[len(prevArg)-1:]
|
||||||
}
|
}
|
||||||
// Remove the uncompleted flag or else there could be an error created
|
// Remove the uncompleted flag or else there could be an error created
|
||||||
|
@ -798,7 +798,6 @@ to your powershell profile.
|
||||||
return cmd.Root().GenPowerShellCompletion(out)
|
return cmd.Root().GenPowerShellCompletion(out)
|
||||||
}
|
}
|
||||||
return cmd.Root().GenPowerShellCompletionWithDesc(out)
|
return cmd.Root().GenPowerShellCompletionWithDesc(out)
|
||||||
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
if haveNoDescFlag {
|
if haveNoDescFlag {
|
||||||
|
@ -838,7 +837,7 @@ func CompDebug(msg string, printToStdErr bool) {
|
||||||
// variable BASH_COMP_DEBUG_FILE to the path of some file to be used.
|
// variable BASH_COMP_DEBUG_FILE to the path of some file to be used.
|
||||||
if path := os.Getenv("BASH_COMP_DEBUG_FILE"); path != "" {
|
if path := os.Getenv("BASH_COMP_DEBUG_FILE"); path != "" {
|
||||||
f, err := os.OpenFile(path,
|
f, err := os.OpenFile(path,
|
||||||
os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
|
os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0o644)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
defer f.Close()
|
defer f.Close()
|
||||||
WriteStringAndCheck(f, msg)
|
WriteStringAndCheck(f, msg)
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -18,7 +18,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"git.internal/re/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
func emptyRun(*cobra.Command, []string) {}
|
func emptyRun(*cobra.Command, []string) {}
|
||||||
|
|
|
@ -25,8 +25,8 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"git.internal/re/cobra"
|
||||||
"github.com/cpuguy83/go-md2man/v2/md2man"
|
"github.com/cpuguy83/go-md2man/v2/md2man"
|
||||||
"github.com/spf13/cobra"
|
|
||||||
"github.com/spf13/pflag"
|
"github.com/spf13/pflag"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -8,8 +8,8 @@ package main
|
||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"git.internal/re/cobra"
|
||||||
"github.com/spf13/cobra/doc"
|
"git.internal/re/cobra/doc"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
|
@ -24,7 +24,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"git.internal/re/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
func assertNoErr(t *testing.T, e error) {
|
func assertNoErr(t *testing.T, e error) {
|
||||||
|
|
|
@ -18,8 +18,8 @@ import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"git.internal/re/cobra"
|
||||||
"github.com/spf13/cobra/doc"
|
"git.internal/re/cobra/doc"
|
||||||
)
|
)
|
||||||
|
|
||||||
func ExampleGenManTree() {
|
func ExampleGenManTree() {
|
||||||
|
|
|
@ -24,7 +24,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"git.internal/re/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
func printOptions(buf *bytes.Buffer, cmd *cobra.Command, name string) error {
|
func printOptions(buf *bytes.Buffer, cmd *cobra.Command, name string) error {
|
||||||
|
|
|
@ -8,8 +8,8 @@ package main
|
||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"git.internal/re/cobra"
|
||||||
"github.com/spf13/cobra/doc"
|
"git.internal/re/cobra/doc"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
@ -41,7 +41,7 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/kubectl/cmd"
|
"k8s.io/kubernetes/pkg/kubectl/cmd"
|
||||||
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
||||||
|
|
||||||
"github.com/spf13/cobra/doc"
|
"git.internal/re/cobra/doc"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
|
@ -21,7 +21,7 @@ import (
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"git.internal/re/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestGenMdDoc(t *testing.T) {
|
func TestGenMdDoc(t *testing.T) {
|
||||||
|
|
|
@ -24,7 +24,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"git.internal/re/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
func printOptionsReST(buf *bytes.Buffer, cmd *cobra.Command, name string) error {
|
func printOptionsReST(buf *bytes.Buffer, cmd *cobra.Command, name string) error {
|
||||||
|
|
|
@ -8,8 +8,8 @@ package main
|
||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"git.internal/re/cobra"
|
||||||
"github.com/spf13/cobra/doc"
|
"git.internal/re/cobra/doc"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
@ -41,7 +41,7 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/kubectl/cmd"
|
"k8s.io/kubernetes/pkg/kubectl/cmd"
|
||||||
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
||||||
|
|
||||||
"github.com/spf13/cobra/doc"
|
"git.internal/re/cobra/doc"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
|
@ -21,7 +21,7 @@ import (
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"git.internal/re/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestGenRSTDoc(t *testing.T) {
|
func TestGenRSTDoc(t *testing.T) {
|
||||||
|
|
|
@ -17,7 +17,7 @@ package doc
|
||||||
import (
|
import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"git.internal/re/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Test to see if we have a reason to print See Also information in docs
|
// Test to see if we have a reason to print See Also information in docs
|
||||||
|
|
|
@ -22,7 +22,7 @@ import (
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"git.internal/re/cobra"
|
||||||
"github.com/spf13/pflag"
|
"github.com/spf13/pflag"
|
||||||
"gopkg.in/yaml.v3"
|
"gopkg.in/yaml.v3"
|
||||||
)
|
)
|
||||||
|
|
|
@ -8,8 +8,8 @@ package main
|
||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"git.internal/re/cobra"
|
||||||
"github.com/spf13/cobra/doc"
|
"git.internal/re/cobra/doc"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
@ -41,7 +41,7 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/kubectl/cmd"
|
"k8s.io/kubernetes/pkg/kubectl/cmd"
|
||||||
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
||||||
|
|
||||||
"github.com/spf13/cobra/doc"
|
"git.internal/re/cobra/doc"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
|
@ -22,7 +22,7 @@ import (
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"git.internal/re/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestGenYamlDoc(t *testing.T) {
|
func TestGenYamlDoc(t *testing.T) {
|
||||||
|
|
|
@ -60,7 +60,7 @@ function __%[1]s_perform_completion
|
||||||
|
|
||||||
# Some programs may output extra empty lines after the directive.
|
# Some programs may output extra empty lines after the directive.
|
||||||
# Let's ignore them or else it will break completion.
|
# Let's ignore them or else it will break completion.
|
||||||
# Ref: https://github.com/spf13/cobra/issues/1279
|
# Ref: https://git.internal/re/cobra/issues/1279
|
||||||
for line in $results[-1..1]
|
for line in $results[-1..1]
|
||||||
if test (string trim -- $line) = ""
|
if test (string trim -- $line) = ""
|
||||||
# Found an empty line, remove it
|
# Found an empty line, remove it
|
||||||
|
|
2
go.mod
2
go.mod
|
@ -1,4 +1,4 @@
|
||||||
module github.com/spf13/cobra
|
module git.internal/re/cobra
|
||||||
|
|
||||||
go 1.15
|
go 1.15
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ provide your own, which will take precedence over the default one. (This also pr
|
||||||
backwards-compatibility with programs that already have their own `completion` command.)
|
backwards-compatibility with programs that already have their own `completion` command.)
|
||||||
|
|
||||||
If you are using the `cobra-cli` generator,
|
If you are using the `cobra-cli` generator,
|
||||||
which can be found at [spf13/cobra-cli](https://github.com/spf13/cobra-cli),
|
which can be found at [spf13/cobra-cli](https://git.internal/re/cobra-cli),
|
||||||
you can create a completion command by running
|
you can create a completion command by running
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|
|
@ -32,7 +32,7 @@ func main() {
|
||||||
Cobra-CLI is its own program that will create your application and add any
|
Cobra-CLI is its own program that will create your application and add any
|
||||||
commands you want. It's the easiest way to incorporate Cobra into your application.
|
commands you want. It's the easiest way to incorporate Cobra into your application.
|
||||||
|
|
||||||
For complete details on using the Cobra generator, please refer to [The Cobra-CLI Generator README](https://github.com/spf13/cobra-cli/blob/main/README.md)
|
For complete details on using the Cobra generator, please refer to [The Cobra-CLI Generator README](https://git.internal/re/cobra-cli/blob/main/README.md)
|
||||||
|
|
||||||
## Using the Cobra Library
|
## Using the Cobra Library
|
||||||
|
|
||||||
|
@ -76,7 +76,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"git.internal/re/cobra"
|
||||||
"github.com/spf13/viper"
|
"github.com/spf13/viper"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -171,7 +171,7 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"git.internal/re/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
@ -198,7 +198,7 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"git.internal/re/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
@ -397,7 +397,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"git.internal/re/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
@ -574,7 +574,7 @@ package main
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"git.internal/re/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
Loading…
Reference in New Issue