Compare commits
2 Commits
main
...
complete-c
Author | SHA1 | Date | |
---|---|---|---|
701588c161 | |||
889544879e |
@ -10,6 +10,7 @@ import (
|
||||
"strings"
|
||||
|
||||
"coopcloud.tech/abra/cli/internal"
|
||||
"coopcloud.tech/abra/pkg/app"
|
||||
"coopcloud.tech/abra/pkg/autocomplete"
|
||||
"coopcloud.tech/abra/pkg/client"
|
||||
"coopcloud.tech/abra/pkg/config"
|
||||
@ -45,6 +46,17 @@ Example:
|
||||
},
|
||||
Before: internal.SubCommandBefore,
|
||||
Subcommands: []cli.Command{appCmdListCommand},
|
||||
BashComplete: func(ctx *cli.Context) {
|
||||
args := ctx.Args()
|
||||
switch len(args) {
|
||||
case 0:
|
||||
autocomplete.AppNameComplete(ctx)
|
||||
case 1:
|
||||
autocomplete.ServiceNameComplete(args.Get(0))
|
||||
case 2:
|
||||
cmdNameComplete(args.Get(0))
|
||||
}
|
||||
},
|
||||
Action: func(c *cli.Context) error {
|
||||
app := internal.ValidateApp(c)
|
||||
|
||||
@ -187,6 +199,20 @@ func parseCmdArgs(args []string, isLocal bool) (bool, string) {
|
||||
return hasCmdArgs, parsedCmdArgs
|
||||
}
|
||||
|
||||
func cmdNameComplete(appName string) {
|
||||
app, err := app.Get(appName)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
cmdNames, _ := getShCmdNames(app)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
for _, n := range cmdNames {
|
||||
fmt.Println(n)
|
||||
}
|
||||
}
|
||||
|
||||
var appCmdListCommand = cli.Command{
|
||||
Name: "list",
|
||||
Aliases: []string{"ls"},
|
||||
@ -222,13 +248,11 @@ var appCmdListCommand = cli.Command{
|
||||
}
|
||||
}
|
||||
|
||||
abraShPath := fmt.Sprintf("%s/%s/%s", config.RECIPES_DIR, app.Recipe, "abra.sh")
|
||||
cmdNames, err := config.ReadAbraShCmdNames(abraShPath)
|
||||
cmdNames, err := getShCmdNames(app)
|
||||
if err != nil {
|
||||
logrus.Fatal(err)
|
||||
}
|
||||
|
||||
sort.Strings(cmdNames)
|
||||
for _, cmdName := range cmdNames {
|
||||
fmt.Println(cmdName)
|
||||
}
|
||||
@ -236,3 +260,14 @@ var appCmdListCommand = cli.Command{
|
||||
return nil
|
||||
},
|
||||
}
|
||||
|
||||
func getShCmdNames(app config.App) ([]string, error) {
|
||||
abraShPath := fmt.Sprintf("%s/%s/%s", config.RECIPES_DIR, app.Recipe, "abra.sh")
|
||||
cmdNames, err := config.ReadAbraShCmdNames(abraShPath)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
sort.Strings(cmdNames)
|
||||
return cmdNames, nil
|
||||
}
|
||||
|
@ -25,6 +25,16 @@ func AppNameComplete(c *cli.Context) {
|
||||
}
|
||||
}
|
||||
|
||||
func ServiceNameComplete(appName string) {
|
||||
serviceNames, err := config.GetAppServiceNames(appName)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
for _, s := range serviceNames {
|
||||
fmt.Println(s)
|
||||
}
|
||||
}
|
||||
|
||||
// RecipeNameComplete completes recipe names.
|
||||
func RecipeNameComplete(c *cli.Context) {
|
||||
catl, err := recipe.ReadRecipeCatalogue(false)
|
||||
|
@ -25,6 +25,24 @@ teardown(){
|
||||
fi
|
||||
}
|
||||
|
||||
# bats test_tags=slow
|
||||
@test "autocomplete" {
|
||||
run $ABRA app cmd --generate-bash-completion
|
||||
assert_success
|
||||
assert_output "$TEST_APP_DOMAIN"
|
||||
|
||||
run $ABRA app cmd "$TEST_APP_DOMAIN" --generate-bash-completion
|
||||
assert_success
|
||||
assert_output "app"
|
||||
|
||||
run $ABRA app cmd "$TEST_APP_DOMAIN" app --generate-bash-completion
|
||||
assert_success
|
||||
assert_output "test_cmd
|
||||
test_cmd_arg
|
||||
test_cmd_args
|
||||
test_cmd_export"
|
||||
}
|
||||
|
||||
@test "validate app argument" {
|
||||
run $ABRA app cmd
|
||||
assert_failure
|
||||
|
Reference in New Issue
Block a user