Ver código fonte

Merge pull request #10878 from relrelb/profiles_completion

Add shell completion for `--profile`
Guillaume Lours 2 anos atrás
pai
commit
0511b0c2b8
2 arquivos alterados com 25 adições e 0 exclusões
  1. 21 0
      cmd/compose/completion.go
  2. 4 0
      cmd/compose/compose.go

+ 21 - 0
cmd/compose/completion.go

@@ -17,6 +17,7 @@
 package compose
 
 import (
+	"sort"
 	"strings"
 
 	"github.com/docker/compose/v2/pkg/api"
@@ -65,3 +66,23 @@ func completeProjectNames(backend api.Service) func(cmd *cobra.Command, args []s
 		return values, cobra.ShellCompDirectiveNoFileComp
 	}
 }
+
+func completeProfileNames(p *ProjectOptions) validArgsFn {
+	return func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
+		project, err := p.ToProject(nil)
+		if err != nil {
+			return nil, cobra.ShellCompDirectiveNoFileComp
+		}
+
+		allProfileNames := project.AllServices().GetProfiles()
+		sort.Strings(allProfileNames)
+
+		var values []string
+		for _, profileName := range allProfileNames {
+			if strings.HasPrefix(profileName, toComplete) {
+				values = append(values, profileName)
+			}
+		}
+		return values, cobra.ShellCompDirectiveNoFileComp
+	}
+}

+ 4 - 0
cmd/compose/compose.go

@@ -454,6 +454,10 @@ func RootCommand(streams command.Cli, backend api.Service) *cobra.Command { //no
 			return []string{"yaml", "yml"}, cobra.ShellCompDirectiveFilterFileExt
 		},
 	)
+	c.RegisterFlagCompletionFunc( //nolint:errcheck
+		"profile",
+		completeProfileNames(&opts),
+	)
 
 	c.Flags().StringVar(&progress, "progress", buildx.PrinterModeAuto, fmt.Sprintf(`Set type of progress output (%s)`, strings.Join(printerModes, ", ")))