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/projectatomic/skopeo/directory"
"github.com/projectatomic/skopeo/docker"
"github.com/projectatomic/skopeo/image"
"github.com/projectatomic/skopeo/openshift"
"github.com/projectatomic/skopeo/types"
)
@ -34,7 +35,7 @@ func parseImage(c *cli.Context) (types.Image, error) {
//
case strings.HasPrefix(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")
}

View File

@ -5,6 +5,7 @@ import (
"fmt"
"net/http"
"github.com/projectatomic/skopeo/image"
"github.com/projectatomic/skopeo/types"
)
@ -22,7 +23,7 @@ func NewDockerImage(img, certPath string, tlsVerify bool) (types.Image, error) {
if err != nil {
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.

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 (
"encoding/json"
@ -20,17 +23,17 @@ var (
// genericImage is a general set of utilities for working with container images,
// 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 {
src types.ImageSource
cachedManifest []byte // Private cache for Manifest(); nil if not yet known.
cachedSignatures [][]byte // Private cache for Signatures(); nil if not yet known.
}
// GenericImageFromSource returns a types.Image implementation for source.
// NOTE: This is currently an internal testing helper, do not rely on this as
// 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 {
// FromSource returns a types.Image implementation for source.
func FromSource(src types.ImageSource) types.Image {
return &genericImage{src: src}
}

View File

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