Clean up reference type switches

Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
This commit is contained in:
Tonis Tiigi
2015-12-10 11:01:34 -08:00
parent 15d84a3a48
commit eeb2d4c1ad
13 changed files with 63 additions and 119 deletions

View File

@@ -522,21 +522,9 @@ func rewriteDockerfileFrom(dockerfileName string, translator func(reference.Name
if err != nil {
return nil, nil, err
}
digested := false
switch ref.(type) {
case reference.NamedTagged:
case reference.Canonical:
digested = true
default:
ref, err = reference.WithTag(ref, reference.DefaultTag)
if err != nil {
return nil, nil, err
}
}
if !digested && isTrusted() {
trustedRef, err := translator(ref.(reference.NamedTagged))
ref = reference.WithDefaultTag(ref)
if ref, ok := ref.(reference.NamedTagged); ok && isTrusted() {
trustedRef, err := translator(ref)
if err != nil {
return nil, nil, err
}
@@ -544,7 +532,7 @@ func rewriteDockerfileFrom(dockerfileName string, translator func(reference.Name
line = dockerfileFromLinePattern.ReplaceAllLiteralString(line, fmt.Sprintf("FROM %s", trustedRef.String()))
resolvedTags = append(resolvedTags, &resolvedTag{
digestRef: trustedRef,
tagRef: ref.(reference.NamedTagged),
tagRef: ref,
})
}
}

View File

@@ -25,14 +25,11 @@ func (cli *DockerCli) pullImageCustomOut(image string, out io.Writer) error {
}
var tag string
switch x := ref.(type) {
switch x := reference.WithDefaultTag(ref).(type) {
case reference.Canonical:
tag = x.Digest().String()
case reference.NamedTagged:
tag = x.Tag()
default:
// pull only the image tagged 'latest' if no tag was specified
tag = reference.DefaultTag
}
// Resolve the Repository name from fqn to RepositoryInfo
@@ -97,24 +94,13 @@ func (cli *DockerCli) createContainer(config *runconfig.Config, hostConfig *runc
if err != nil {
return nil, err
}
isCanonical := false
switch ref.(type) {
case reference.NamedTagged:
case reference.Canonical:
isCanonical = true
default:
ref, err = reference.WithTag(ref, reference.DefaultTag)
if err != nil {
return nil, err
}
}
ref = reference.WithDefaultTag(ref)
var trustedRef reference.Canonical
if isTrusted() && !isCanonical {
if ref, ok := ref.(reference.NamedTagged); ok && isTrusted() {
var err error
trustedRef, err = cli.trustedReference(ref.(reference.NamedTagged))
trustedRef, err = cli.trustedReference(ref)
if err != nil {
return nil, err
}
@@ -132,8 +118,8 @@ func (cli *DockerCli) createContainer(config *runconfig.Config, hostConfig *runc
if err = cli.pullImageCustomOut(config.Image, cli.err); err != nil {
return nil, err
}
if trustedRef != nil && !isCanonical {
if err := cli.tagTrusted(trustedRef, ref.(reference.NamedTagged)); err != nil {
if ref, ok := ref.(reference.NamedTagged); ok && trustedRef != nil {
if err := cli.tagTrusted(trustedRef, ref); err != nil {
return nil, err
}
}

View File

@@ -59,7 +59,6 @@ func (cli *DockerCli) CmdImport(args ...string) error {
}
defer file.Close()
in = file
}
options := types.ImageImportOptions{

View File

@@ -13,8 +13,6 @@ import (
"github.com/docker/docker/registry"
)
var errTagCantBeUsed = errors.New("tag can't be used with --all-tags/-a")
// CmdPull pulls an image or a repository from the registry.
//
// Usage: docker pull [OPTIONS] IMAGENAME[:TAG|@DIGEST]
@@ -31,28 +29,21 @@ func (cli *DockerCli) CmdPull(args ...string) error {
if err != nil {
return err
}
if *allTags && !reference.IsNameOnly(distributionRef) {
return errors.New("tag can't be used with --all-tags/-a")
}
if !*allTags && reference.IsNameOnly(distributionRef) {
distributionRef = reference.WithDefaultTag(distributionRef)
fmt.Fprintf(cli.out, "Using default tag: %s\n", reference.DefaultTag)
}
var tag string
switch x := distributionRef.(type) {
case reference.Canonical:
if *allTags {
return errTagCantBeUsed
}
tag = x.Digest().String()
case reference.NamedTagged:
if *allTags {
return errTagCantBeUsed
}
tag = x.Tag()
default:
if !*allTags {
tag = reference.DefaultTag
distributionRef, err = reference.WithTag(distributionRef, tag)
if err != nil {
return err
}
fmt.Fprintf(cli.out, "Using default tag: %s\n", tag)
}
}
ref := registry.ParseReference(tag)

View File

@@ -28,9 +28,8 @@ func (cli *DockerCli) CmdTag(args ...string) error {
return errors.New("refusing to create a tag with a digest reference")
}
tag := ""
tagged, isTagged := ref.(reference.NamedTagged)
if isTagged {
var tag string
if tagged, isTagged := ref.(reference.NamedTagged); isTagged {
tag = tagged.Tag()
}

View File

@@ -334,9 +334,11 @@ func (cli *DockerCli) trustedPull(repoInfo *registry.RepositoryInfo, ref registr
return err
}
trustedRef, err := reference.WithDigest(repoInfo, r.digest)
if err != nil {
return err
}
if err := cli.tagTrusted(trustedRef, tagged); err != nil {
return err
}
}
}