Skip to content
This repository has been archived by the owner on Jul 19, 2022. It is now read-only.

Commit

Permalink
Refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
glyn committed Oct 17, 2019
1 parent 9bb5077 commit a82a43d
Show file tree
Hide file tree
Showing 16 changed files with 458 additions and 481 deletions.
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@ check-counterfeiter:
gen-mocks: check-counterfeiter
counterfeiter -o pkg/registry/ggcrfakes/fake_image.go github.com/google/go-containerregistry/pkg/v1.Image
counterfeiter -o pkg/registry/ggcrfakes/fake_image_index.go github.com/google/go-containerregistry/pkg/v1.ImageIndex
counterfeiter pkg/registry LayoutPath
counterfeiter pkg/registry/ggcr/path LayoutPath
counterfeiter pkg/registry Image
counterfeiter pkg/registry/ggcr RegistryClient
counterfeiter -o pkg/registry/ggcr/registryclientfakes/fake_registry_client.go ./pkg/registry/ggcr RegistryClient

irel: $(GO_SOURCES)
GO111MODULE=on go build -o $(OUTPUT) cmd/irel/main.go
Expand Down
59 changes: 52 additions & 7 deletions pkg/registry/ggcr/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,30 @@ package ggcr

import (
"fmt"
"os"

v1 "github.com/google/go-containerregistry/pkg/v1"
"github.com/google/go-containerregistry/pkg/v1/empty"
"github.com/google/go-containerregistry/pkg/v1/layout"

"github.com/pivotal/image-relocation/pkg/image"
"github.com/pivotal/image-relocation/pkg/registry"
)

const outputDirPermissions = 0755

// RegistryClient provides methods for building abstract images.
type RegistryClient interface {
// ReadRemoteImage builds an abstract image from a repository.
ReadRemoteImage(n image.Name) (registry.Image, error)

// NewImageFromManifest builds an abstract image from an image manifest.
NewImageFromManifest(img v1.Image) registry.Image

// NewImageFromIndex builds an abstract image from an image index.
NewImageFromIndex(img v1.ImageIndex) registry.Image
}

type manifestWriter func(i v1.Image, n image.Name) error
type indexWriter func(i v1.ImageIndex, n image.Name) error

Expand All @@ -34,6 +51,8 @@ type client struct {
writeRemoteIndex indexWriter
}

var _ RegistryClient = &client{}

// NewRegistryClient returns a new Client.
func NewRegistryClient() *client {
return &client{
Expand All @@ -44,7 +63,7 @@ func NewRegistryClient() *client {
}

func (r *client) Digest(n image.Name) (image.Digest, error) {
img, err := r.readRemoteImage(n)
img, err := r.ReadRemoteImage(n)
if err != nil {
return image.EmptyDigest, err
}
Expand All @@ -58,7 +77,7 @@ func (r *client) Digest(n image.Name) (image.Digest, error) {
}

func (r *client) Copy(source image.Name, target image.Name) (image.Digest, int64, error) {
img, err := r.readRemoteImage(source)
img, err := r.ReadRemoteImage(source)
if err != nil {
return image.EmptyDigest, 0, fmt.Errorf("failed to read image %v: %v", source, err)
}
Expand All @@ -70,22 +89,48 @@ func (r *client) Copy(source image.Name, target image.Name) (image.Digest, int64

targetDigest, s, err := img.Write(target)
if err != nil {
return image.EmptyDigest, 0, fmt.Errorf("failed to write image %v: %v", target, err)
return image.EmptyDigest, 0, fmt.Errorf("failed to write image %v to %v: %v", source, target, err)
}
if sourceDigest != targetDigest {
return image.EmptyDigest, 0, fmt.Errorf("failed to preserve digest of image %v: source digest %v, target digest %v", source, sourceDigest, targetDigest)
}
return targetDigest, s, err
}

func (r *client) NewLayout(path string) (registry.Layout, error) {
if _, err := os.Stat(path); err != nil {
if !os.IsNotExist(err) {
return nil, err
}
if err := os.MkdirAll(path, outputDirPermissions); err != nil {
return nil, err
}
}

lp, err := layout.Write(path, empty.Index)
if err != nil {
return nil, err
}

return NewImageLayout(r, lp), nil
}

func (r *client) ReadLayout(path string) (registry.Layout, error) {
lp, err := layout.FromPath(path)
if err != nil {
return nil, err
}
return NewImageLayout(r, lp), nil
}

func (r *client) ReadRemoteImage(n image.Name) (registry.Image, error) {
return r.readRemoteImage(n)
}

func (r *client) WriteRemoteImage(i v1.Image, n image.Name) error {
return r.writeRemoteImage(i, n)
func (r *client) NewImageFromManifest(img v1.Image) registry.Image {
return newImageFromManifest(img, r.writeRemoteImage)
}

func (r *client) WriteRemoteIndex(i v1.ImageIndex, n image.Name) error {
return r.writeRemoteIndex(i, n)
func (r *client) NewImageFromIndex(idx v1.ImageIndex) registry.Image {
return newImageFromIndex(idx, r.writeRemoteIndex)
}
2 changes: 1 addition & 1 deletion pkg/registry/ggcr/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ var _ = Describe("Client", func() {
})

It("should return a corresponding error", func() {
Expect(err).To(MatchError("failed to write image docker.io/library/target: something bad happened"))
Expect(err).To(MatchError("failed to write image docker.io/library/source to docker.io/library/target: something bad happened"))
})
})

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import (
. "github.com/onsi/gomega"
)

func TestRegistry(t *testing.T) {
func TestGgcr(t *testing.T) {
RegisterFailHandler(Fail)
RunSpecs(t, "Registry Suite")
RunSpecs(t, "ggcr Suite")
}
Loading

0 comments on commit a82a43d

Please sign in to comment.