mirror of
https://github.com/containers/skopeo.git
synced 2025-10-22 11:44:05 +00:00
Differentiate, again, between (skopeo --tls-verify subcommand) and (skope subcommand --tls-verify), by - using a "local" Corba flag for the (skopeo --tls-verify ...) variant - adding separate --tls-verify flags to subcommands that only accept them as legacy, available through deprecatedTLSVerifyFlags (unlike the non-legacy path of dockerImageFlags()); - using TraverseChildren: true; this causes the global and per-subcommand flags to be treated separately by Corba, i.e. they no longer happen to share the "Hidden" flag and Corba actually sets the right flag variable now. So, we can now warn on (skopeo --tls-verify command) again, and --help lists the flag correctly (it is hidden at the global level, and in subcommands like copy that deprecated it, but visible in subcommands like inspect where it's not deprecated). NOTE: This removes --tls-verify from (skopeo manifest-digest) and the three signing commands; it never made sense there. This change could, in principle, break some users. Also update man pages to match. Signed-off-by: Miloslav Trmač <mitr@redhat.com>
76 lines
1.8 KiB
Go
76 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"io"
|
|
"strings"
|
|
|
|
"github.com/containers/common/pkg/retry"
|
|
"github.com/containers/image/v5/transports"
|
|
"github.com/containers/image/v5/transports/alltransports"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
type deleteOptions struct {
|
|
global *globalOptions
|
|
image *imageOptions
|
|
retryOpts *retry.RetryOptions
|
|
}
|
|
|
|
func deleteCmd(global *globalOptions) *cobra.Command {
|
|
sharedFlags, sharedOpts := sharedImageFlags()
|
|
imageFlags, imageOpts := imageFlags(global, sharedOpts, nil, "", "")
|
|
retryFlags, retryOpts := retryFlags()
|
|
opts := deleteOptions{
|
|
global: global,
|
|
image: imageOpts,
|
|
retryOpts: retryOpts,
|
|
}
|
|
cmd := &cobra.Command{
|
|
Use: "delete [command options] IMAGE-NAME",
|
|
Short: "Delete image IMAGE-NAME",
|
|
Long: fmt.Sprintf(`Delete an "IMAGE_NAME" from a transport
|
|
Supported transports:
|
|
%s
|
|
See skopeo(1) section "IMAGE NAMES" for the expected format
|
|
`, strings.Join(transports.ListNames(), ", ")),
|
|
RunE: commandAction(opts.run),
|
|
Example: `skopeo delete docker://registry.example.com/example/pause:latest`,
|
|
}
|
|
adjustUsage(cmd)
|
|
flags := cmd.Flags()
|
|
flags.AddFlagSet(&sharedFlags)
|
|
flags.AddFlagSet(&imageFlags)
|
|
flags.AddFlagSet(&retryFlags)
|
|
return cmd
|
|
}
|
|
|
|
func (opts *deleteOptions) run(args []string, stdout io.Writer) error {
|
|
if len(args) != 1 {
|
|
return errors.New("Usage: delete imageReference")
|
|
}
|
|
imageName := args[0]
|
|
|
|
if err := reexecIfNecessaryForImages(imageName); err != nil {
|
|
return err
|
|
}
|
|
|
|
ref, err := alltransports.ParseImageName(imageName)
|
|
if err != nil {
|
|
return fmt.Errorf("Invalid source name %s: %v", imageName, err)
|
|
}
|
|
|
|
sys, err := opts.image.newSystemContext()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
ctx, cancel := opts.global.commandTimeoutContext()
|
|
defer cancel()
|
|
|
|
return retry.RetryIfNecessary(ctx, func() error {
|
|
return ref.DeleteImage(ctx, sys)
|
|
}, opts.retryOpts)
|
|
}
|