mirror of
https://github.com/containers/skopeo.git
synced 2025-05-04 05:56:36 +00:00
Complete paths for some transports
Transports that reference a file or directory are completed. Signed-off-by: Yedaya Katsman <yedaya.ka@gmail.com>
This commit is contained in:
parent
e7e09255b4
commit
49569bcf69
cmd/skopeo
@ -1,13 +1,50 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"github.com/containers/image/v5/directory"
|
||||||
|
"github.com/containers/image/v5/docker"
|
||||||
|
dockerArchive "github.com/containers/image/v5/docker/archive"
|
||||||
|
ociArchive "github.com/containers/image/v5/oci/archive"
|
||||||
|
oci "github.com/containers/image/v5/oci/layout"
|
||||||
|
"github.com/containers/image/v5/sif"
|
||||||
"github.com/containers/image/v5/tarball"
|
"github.com/containers/image/v5/tarball"
|
||||||
"github.com/containers/image/v5/transports"
|
"github.com/containers/image/v5/transports"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
// autocompleteSupportedTransports list all supported transports with the colon suffix.
|
func autocompleteImageNames(cmd *cobra.Command, args []string, toComplete string) ([]cobra.Completion, cobra.ShellCompDirective) {
|
||||||
func autocompleteSupportedTransports(cmd *cobra.Command, args []string, toComplete string) ([]cobra.Completion, cobra.ShellCompDirective) {
|
transport, details, haveTransport := strings.Cut(toComplete, ":")
|
||||||
|
if !haveTransport {
|
||||||
|
transports := supportedTransportSuggestions()
|
||||||
|
return transports, cobra.ShellCompDirectiveNoSpace | cobra.ShellCompDirectiveNoFileComp
|
||||||
|
}
|
||||||
|
switch transport {
|
||||||
|
case ociArchive.Transport.Name(), dockerArchive.Transport.Name():
|
||||||
|
// Can have [:{*reference|@source-index}]
|
||||||
|
// FIXME: `oci-archive:/path/to/a.oci:<TAB>` completes paths
|
||||||
|
return nil, cobra.ShellCompDirectiveNoSpace
|
||||||
|
case sif.Transport.Name():
|
||||||
|
return nil, cobra.ShellCompDirectiveDefault
|
||||||
|
|
||||||
|
// Both directory and oci should have ShellCompDirectiveFilterDirs to complete only directories, but it doesn't currently work in bash: https://github.com/spf13/cobra/issues/2242
|
||||||
|
case oci.Transport.Name():
|
||||||
|
// Can have '[:{reference|@source-index}]'
|
||||||
|
// FIXME: `oci:/path/to/dir/:<TAB>` completes paths
|
||||||
|
return nil, cobra.ShellCompDirectiveDefault | cobra.ShellCompDirectiveNoSpace
|
||||||
|
case directory.Transport.Name():
|
||||||
|
return nil, cobra.ShellCompDirectiveDefault
|
||||||
|
|
||||||
|
case docker.Transport.Name():
|
||||||
|
if details == "" {
|
||||||
|
return []cobra.Completion{transport + "://"}, cobra.ShellCompDirectiveNoSpace | cobra.ShellCompDirectiveNoFileComp
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil, cobra.ShellCompDirectiveNoSpace | cobra.ShellCompDirectiveNoFileComp
|
||||||
|
}
|
||||||
|
|
||||||
|
// supportedTransportSuggestions list all supported transports with the colon suffix.
|
||||||
|
func supportedTransportSuggestions() []string {
|
||||||
tps := transports.ListNames()
|
tps := transports.ListNames()
|
||||||
suggestions := make([]cobra.Completion, 0, len(tps))
|
suggestions := make([]cobra.Completion, 0, len(tps))
|
||||||
for _, tp := range tps {
|
for _, tp := range tps {
|
||||||
@ -18,5 +55,5 @@ func autocompleteSupportedTransports(cmd *cobra.Command, args []string, toComple
|
|||||||
suggestions = append(suggestions, tp+":")
|
suggestions = append(suggestions, tp+":")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return suggestions, cobra.ShellCompDirectiveNoFileComp | cobra.ShellCompDirectiveNoSpace
|
return suggestions
|
||||||
}
|
}
|
||||||
|
@ -71,7 +71,7 @@ See skopeo(1) section "IMAGE NAMES" for the expected format
|
|||||||
`, strings.Join(transports.ListNames(), ", ")),
|
`, strings.Join(transports.ListNames(), ", ")),
|
||||||
RunE: commandAction(opts.run),
|
RunE: commandAction(opts.run),
|
||||||
Example: `skopeo copy docker://quay.io/skopeo/stable:latest docker://registry.example.com/skopeo:latest`,
|
Example: `skopeo copy docker://quay.io/skopeo/stable:latest docker://registry.example.com/skopeo:latest`,
|
||||||
ValidArgsFunction: autocompleteSupportedTransports,
|
ValidArgsFunction: autocompleteImageNames,
|
||||||
}
|
}
|
||||||
adjustUsage(cmd)
|
adjustUsage(cmd)
|
||||||
flags := cmd.Flags()
|
flags := cmd.Flags()
|
||||||
|
@ -37,7 +37,7 @@ See skopeo(1) section "IMAGE NAMES" for the expected format
|
|||||||
`, strings.Join(transports.ListNames(), ", ")),
|
`, strings.Join(transports.ListNames(), ", ")),
|
||||||
RunE: commandAction(opts.run),
|
RunE: commandAction(opts.run),
|
||||||
Example: `skopeo delete docker://registry.example.com/example/pause:latest`,
|
Example: `skopeo delete docker://registry.example.com/example/pause:latest`,
|
||||||
ValidArgsFunction: autocompleteSupportedTransports,
|
ValidArgsFunction: autocompleteImageNames,
|
||||||
}
|
}
|
||||||
adjustUsage(cmd)
|
adjustUsage(cmd)
|
||||||
flags := cmd.Flags()
|
flags := cmd.Flags()
|
||||||
|
@ -53,7 +53,7 @@ See skopeo(1) section "IMAGE NAMES" for the expected format
|
|||||||
Example: `skopeo inspect docker://registry.fedoraproject.org/fedora
|
Example: `skopeo inspect docker://registry.fedoraproject.org/fedora
|
||||||
skopeo inspect --config docker://docker.io/alpine
|
skopeo inspect --config docker://docker.io/alpine
|
||||||
skopeo inspect --format "Name: {{.Name}} Digest: {{.Digest}}" docker://registry.access.redhat.com/ubi8`,
|
skopeo inspect --format "Name: {{.Name}} Digest: {{.Digest}}" docker://registry.access.redhat.com/ubi8`,
|
||||||
ValidArgsFunction: autocompleteSupportedTransports,
|
ValidArgsFunction: autocompleteImageNames,
|
||||||
}
|
}
|
||||||
adjustUsage(cmd)
|
adjustUsage(cmd)
|
||||||
flags := cmd.Flags()
|
flags := cmd.Flags()
|
||||||
|
Loading…
Reference in New Issue
Block a user