Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions cmd/skopeo/copy.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (

"github.com/containers/image/image"
"github.com/containers/image/signature"
"github.com/containers/image/transports"
"github.com/urfave/cli"
)

Expand Down Expand Up @@ -58,9 +59,9 @@ func copyHandler(context *cli.Context) error {
if err != nil {
return fmt.Errorf("Error initializing GPG: %v", err)
}
dockerReference := dest.CanonicalDockerReference()
dockerReference := dest.Reference().DockerReference()
if dockerReference == nil {
return errors.New("Destination image does not have an associated Docker reference")
return fmt.Errorf("Cannot determine canonical Docker reference for destination %s", transports.ImageName(dest.Reference()))
}

newSig, err := signature.SignDockerManifest(manifest, dockerReference.String(), mech, signBy)
Expand Down
6 changes: 5 additions & 1 deletion cmd/skopeo/layers.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,11 @@ var layersCmd = cli.Command{
if err != nil {
return err
}
dest := directory.NewImageDestination(tmpDir)
tmpDirRef := directory.NewReference(tmpDir)
dest, err := tmpDirRef.NewImageDestination("", true)
if err != nil {
return err
}
manifest, _, err := src.Manifest()
if err != nil {
return err
Expand Down
60 changes: 13 additions & 47 deletions cmd/skopeo/utils.go
Original file line number Diff line number Diff line change
@@ -1,47 +1,23 @@
package main

import (
"errors"
"fmt"
"strings"

"github.com/containers/image/directory"
"github.com/containers/image/docker"
"github.com/containers/image/image"
"github.com/containers/image/oci"
"github.com/containers/image/openshift"
"github.com/containers/image/transports"
"github.com/containers/image/types"
"github.com/urfave/cli"
)

const (
// atomicPrefix is the URL-like schema prefix used for Atomic registry image references.
atomicPrefix = "atomic:"
// dockerPrefix is the URL-like schema prefix used for Docker image references.
dockerPrefix = "docker://"
// directoryPrefix is the URL-like schema prefix used for local directories (for debugging)
directoryPrefix = "dir:"
// ociPrefix is the URL-like schema prefix used for OCI images.
ociPrefix = "oci:"
)

// ParseImage converts image URL-like string to an initialized handler for that image.
func parseImage(c *cli.Context) (types.Image, error) {
var (
imgName = c.Args().First()
certPath = c.GlobalString("cert-path")
tlsVerify = c.GlobalBool("tls-verify")
)
switch {
case strings.HasPrefix(imgName, dockerPrefix):
return docker.NewImage(strings.TrimPrefix(imgName, dockerPrefix), certPath, tlsVerify)
//case strings.HasPrefix(img, appcPrefix):
//
case strings.HasPrefix(imgName, directoryPrefix):
src := directory.NewImageSource(strings.TrimPrefix(imgName, directoryPrefix))
return image.FromSource(src, nil), nil
ref, err := transports.ParseImageName(imgName)
if err != nil {
return nil, err
}
return nil, errors.New("no valid prefix provided")
return ref.NewImage(certPath, tlsVerify)
}

// parseImageSource converts image URL-like string to an ImageSource.
Expand All @@ -50,15 +26,11 @@ func parseImageSource(c *cli.Context, name string) (types.ImageSource, error) {
certPath = c.GlobalString("cert-path")
tlsVerify = c.GlobalBool("tls-verify") // FIXME!! defaults to false?
)
switch {
case strings.HasPrefix(name, dockerPrefix):
return docker.NewImageSource(strings.TrimPrefix(name, dockerPrefix), certPath, tlsVerify)
case strings.HasPrefix(name, atomicPrefix):
return openshift.NewImageSource(strings.TrimPrefix(name, atomicPrefix), certPath, tlsVerify)
case strings.HasPrefix(name, directoryPrefix):
return directory.NewImageSource(strings.TrimPrefix(name, directoryPrefix)), nil
ref, err := transports.ParseImageName(name)
if err != nil {
return nil, err
}
return nil, fmt.Errorf("Unrecognized image reference %s", name)
return ref.NewImageSource(certPath, tlsVerify)
}

// parseImageDestination converts image URL-like string to an ImageDestination.
Expand All @@ -67,15 +39,9 @@ func parseImageDestination(c *cli.Context, name string) (types.ImageDestination,
certPath = c.GlobalString("cert-path")
tlsVerify = c.GlobalBool("tls-verify") // FIXME!! defaults to false?
)
switch {
case strings.HasPrefix(name, dockerPrefix):
return docker.NewImageDestination(strings.TrimPrefix(name, dockerPrefix), certPath, tlsVerify)
case strings.HasPrefix(name, atomicPrefix):
return openshift.NewImageDestination(strings.TrimPrefix(name, atomicPrefix), certPath, tlsVerify)
case strings.HasPrefix(name, directoryPrefix):
return directory.NewImageDestination(strings.TrimPrefix(name, directoryPrefix)), nil
case strings.HasPrefix(name, ociPrefix):
return oci.NewImageDestination(strings.TrimPrefix(name, ociPrefix))
ref, err := transports.ParseImageName(name)
if err != nil {
return nil, err
}
return nil, fmt.Errorf("Unrecognized image reference %s", name)
return ref.NewImageDestination(certPath, tlsVerify)
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading