Merge pull request #28251 from hashicorp/jbardin/auto-complete
don't error when given autocomplete commands
This commit is contained in:
commit
51c7aff475
7
main.go
7
main.go
|
@ -357,7 +357,12 @@ func wrappedMain() int {
|
||||||
// where a command isn't found, because it's likely more helpful to
|
// where a command isn't found, because it's likely more helpful to
|
||||||
// mention what specifically went wrong, rather than just printing out
|
// mention what specifically went wrong, rather than just printing out
|
||||||
// a big block of usage information.)
|
// a big block of usage information.)
|
||||||
if cmd := cliRunner.Subcommand(); cmd != "" {
|
|
||||||
|
// Check if this is being run via shell auto-complete, which uses the
|
||||||
|
// binary name as the first argument and won't be listed as a subcommand.
|
||||||
|
autoComplete := os.Getenv("COMP_LINE") != ""
|
||||||
|
|
||||||
|
if cmd := cliRunner.Subcommand(); cmd != "" && !autoComplete {
|
||||||
// Due to the design of cli.CLI, this special error message only works
|
// Due to the design of cli.CLI, this special error message only works
|
||||||
// for typos of top-level commands. For a subcommand typo, like
|
// for typos of top-level commands. For a subcommand typo, like
|
||||||
// "terraform state posh", cmd would be "state" here and thus would
|
// "terraform state posh", cmd would be "state" here and thus would
|
||||||
|
|
28
main_test.go
28
main_test.go
|
@ -253,6 +253,34 @@ func TestMain_cliArgsFromEnvAdvanced(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// verify that we output valid autocomplete results
|
||||||
|
func TestMain_autoComplete(t *testing.T) {
|
||||||
|
// Restore original CLI args
|
||||||
|
oldArgs := os.Args
|
||||||
|
defer func() { os.Args = oldArgs }()
|
||||||
|
|
||||||
|
// Set up test command and restore that
|
||||||
|
Commands = make(map[string]cli.CommandFactory)
|
||||||
|
defer func() {
|
||||||
|
Commands = nil
|
||||||
|
}()
|
||||||
|
|
||||||
|
// Set up test command and restore that
|
||||||
|
Commands["foo"] = func() (cli.Command, error) {
|
||||||
|
return &testCommandCLI{}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
os.Setenv("COMP_LINE", "terraform versio")
|
||||||
|
defer os.Unsetenv("COMP_LINE")
|
||||||
|
|
||||||
|
// Run it!
|
||||||
|
os.Args = []string{"terraform", "terraform", "versio"}
|
||||||
|
exit := wrappedMain()
|
||||||
|
if exit != 0 {
|
||||||
|
t.Fatalf("unexpected exit status %d; want 0", exit)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
type testCommandCLI struct {
|
type testCommandCLI struct {
|
||||||
Args []string
|
Args []string
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue