Move docker.genericImage to a separate skopeo/image subpackage

... making image.FromSource a public, stable, API.
This commit is contained in:
Miloslav Trmač 2016-06-11 06:54:07 +02:00
parent e15276232e
commit 96d6a58052
4 changed files with 15 additions and 10 deletions

View File

@ -7,6 +7,7 @@ import (
"github.com/codegangsta/cli" "github.com/codegangsta/cli"
"github.com/projectatomic/skopeo/directory" "github.com/projectatomic/skopeo/directory"
"github.com/projectatomic/skopeo/docker" "github.com/projectatomic/skopeo/docker"
"github.com/projectatomic/skopeo/image"
"github.com/projectatomic/skopeo/openshift" "github.com/projectatomic/skopeo/openshift"
"github.com/projectatomic/skopeo/types" "github.com/projectatomic/skopeo/types"
) )
@ -34,7 +35,7 @@ func parseImage(c *cli.Context) (types.Image, error) {
// //
case strings.HasPrefix(imgName, directoryPrefix): case strings.HasPrefix(imgName, directoryPrefix):
src := directory.NewDirImageSource(strings.TrimPrefix(imgName, directoryPrefix)) src := directory.NewDirImageSource(strings.TrimPrefix(imgName, directoryPrefix))
return docker.GenericImageFromSource(src), nil return image.FromSource(src), nil
} }
return nil, fmt.Errorf("no valid prefix provided") return nil, fmt.Errorf("no valid prefix provided")
} }

View File

@ -5,6 +5,7 @@ import (
"fmt" "fmt"
"net/http" "net/http"
"github.com/projectatomic/skopeo/image"
"github.com/projectatomic/skopeo/types" "github.com/projectatomic/skopeo/types"
) )
@ -22,7 +23,7 @@ func NewDockerImage(img, certPath string, tlsVerify bool) (types.Image, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
return &Image{Image: GenericImageFromSource(s), src: s}, nil return &Image{Image: image.FromSource(s), src: s}, nil
} }
// SourceRefFullName returns a fully expanded name for the repository this image is in. // SourceRefFullName returns a fully expanded name for the repository this image is in.

View File

@ -1,4 +1,7 @@
package docker // Package image consolidates knowledge about various container image formats
// (as opposed to image storage mechanisms, which are handled by types.ImageSource)
// and exposes all of them using an unified interface.
package image
import ( import (
"encoding/json" "encoding/json"
@ -20,17 +23,17 @@ var (
// genericImage is a general set of utilities for working with container images, // genericImage is a general set of utilities for working with container images,
// whatever is their underlying location (i.e. dockerImageSource-independent). // whatever is their underlying location (i.e. dockerImageSource-independent).
// Note the existence of skopeo/docker.Image: some instances of a `types.Image`
// may not be a `genericImage` directly. However, most users of `types.Image`
// do not care, and those who care about `skopeo/docker.Image` know they do.
type genericImage struct { type genericImage struct {
src types.ImageSource src types.ImageSource
cachedManifest []byte // Private cache for Manifest(); nil if not yet known. cachedManifest []byte // Private cache for Manifest(); nil if not yet known.
cachedSignatures [][]byte // Private cache for Signatures(); nil if not yet known. cachedSignatures [][]byte // Private cache for Signatures(); nil if not yet known.
} }
// GenericImageFromSource returns a types.Image implementation for source. // FromSource returns a types.Image implementation for source.
// NOTE: This is currently an internal testing helper, do not rely on this as func FromSource(src types.ImageSource) types.Image {
// a stable API. There might be an ImageFromSource eventually, but it would not be
// in the skopeo/docker package.
func GenericImageFromSource(src types.ImageSource) types.Image {
return &genericImage{src: src} return &genericImage{src: src}
} }

View File

@ -7,7 +7,7 @@ import (
"testing" "testing"
"github.com/projectatomic/skopeo/directory" "github.com/projectatomic/skopeo/directory"
"github.com/projectatomic/skopeo/docker" "github.com/projectatomic/skopeo/image"
"github.com/projectatomic/skopeo/types" "github.com/projectatomic/skopeo/types"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
@ -15,7 +15,7 @@ import (
// dirImageMock returns a types.Image for a directory, claiming a specified intendedDockerReference. // dirImageMock returns a types.Image for a directory, claiming a specified intendedDockerReference.
func dirImageMock(dir, intendedDockerReference string) types.Image { func dirImageMock(dir, intendedDockerReference string) types.Image {
return docker.GenericImageFromSource(&dirImageSourceMock{ return image.FromSource(&dirImageSourceMock{
ImageSource: directory.NewDirImageSource(dir), ImageSource: directory.NewDirImageSource(dir),
intendedDockerReference: intendedDockerReference, intendedDockerReference: intendedDockerReference,
}) })