diff --git a/cmd/incus/completion.go b/cmd/incus/completion.go index 309b9794874..42e38343d7d 100644 --- a/cmd/incus/completion.go +++ b/cmd/incus/completion.go @@ -253,6 +253,28 @@ func (g *cmdGlobal) cmpImages(toComplete string) ([]string, cobra.ShellCompDirec return results, cmpDirectives } +func (g *cmdGlobal) cmpImageFingerprintsFromRemote(toComplete string, remote string) ([]string, cobra.ShellCompDirective) { + results := []string{} + + if remote == "" { + remote = g.conf.DefaultRemote + } + + remoteServer, _ := g.conf.GetImageServer(remote) + + images, _ := remoteServer.GetImages() + + for _, image := range images { + if !strings.HasPrefix(image.Fingerprint, toComplete) { + continue + } + + results = append(results, image.Fingerprint) + } + + return results, cobra.ShellCompDirectiveNoFileComp +} + func (g *cmdGlobal) cmpImageFingerprints(toComplete string) ([]string, cobra.ShellCompDirective) { results := []string{} var remote string diff --git a/cmd/incus/image_alias.go b/cmd/incus/image_alias.go index 4bb5b0c5348..63f41ec3cae 100644 --- a/cmd/incus/image_alias.go +++ b/cmd/incus/image_alias.go @@ -77,16 +77,11 @@ func (c *cmdImageAliasCreate) Command() *cobra.Command { } remote, _, found := strings.Cut(args[0], ":") - if found { - toComplete = remote + ":" + toComplete + if !found { + remote = "" } - fingerprints, directives := c.global.cmpImageFingerprints(toComplete) - for i, f := range fingerprints { - fingerprints[i], _ = strings.CutPrefix(f, remote+":") - } - - return fingerprints, directives + return c.global.cmpImageFingerprintsFromRemote(toComplete, remote) } return cmd