Splits up blob create options definitions to be package-specific
Redefines privately in both storage and client packages Signed-off-by: Brian Bland <brian.bland@docker.com>master
							parent
							
								
									2a9849e552
								
							
						
					
					
						commit
						8c5a6c13c0
					
				| 
						 | 
				
			
			@ -18,7 +18,6 @@ import (
 | 
			
		|||
	"github.com/docker/distribution/reference"
 | 
			
		||||
	"github.com/docker/distribution/registry/api/v2"
 | 
			
		||||
	"github.com/docker/distribution/registry/client/transport"
 | 
			
		||||
	"github.com/docker/distribution/registry/storage"
 | 
			
		||||
	"github.com/docker/distribution/registry/storage/cache"
 | 
			
		||||
	"github.com/docker/distribution/registry/storage/cache/memory"
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			@ -573,8 +572,39 @@ func (bs *blobs) Put(ctx context.Context, mediaType string, p []byte) (distribut
 | 
			
		|||
	return writer.Commit(ctx, desc)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// createOptions is a collection of blob creation modifiers relevant to general
 | 
			
		||||
// blob storage intended to be configured by the BlobCreateOption.Apply method.
 | 
			
		||||
type createOptions struct {
 | 
			
		||||
	Mount struct {
 | 
			
		||||
		ShouldMount bool
 | 
			
		||||
		From        reference.Canonical
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type optionFunc func(interface{}) error
 | 
			
		||||
 | 
			
		||||
func (f optionFunc) Apply(v interface{}) error {
 | 
			
		||||
	return f(v)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// WithMountFrom returns a BlobCreateOption which designates that the blob should be
 | 
			
		||||
// mounted from the given canonical reference.
 | 
			
		||||
func WithMountFrom(ref reference.Canonical) distribution.BlobCreateOption {
 | 
			
		||||
	return optionFunc(func(v interface{}) error {
 | 
			
		||||
		opts, ok := v.(*createOptions)
 | 
			
		||||
		if !ok {
 | 
			
		||||
			return fmt.Errorf("unexpected options type: %T", v)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		opts.Mount.ShouldMount = true
 | 
			
		||||
		opts.Mount.From = ref
 | 
			
		||||
 | 
			
		||||
		return nil
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (bs *blobs) Create(ctx context.Context, options ...distribution.BlobCreateOption) (distribution.BlobWriter, error) {
 | 
			
		||||
	var opts storage.CreateOptions
 | 
			
		||||
	var opts createOptions
 | 
			
		||||
 | 
			
		||||
	for _, option := range options {
 | 
			
		||||
		err := option.Apply(&opts)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,7 +20,6 @@ import (
 | 
			
		|||
	"github.com/docker/distribution/manifest/schema1"
 | 
			
		||||
	"github.com/docker/distribution/reference"
 | 
			
		||||
	"github.com/docker/distribution/registry/api/errcode"
 | 
			
		||||
	"github.com/docker/distribution/registry/storage"
 | 
			
		||||
	"github.com/docker/distribution/testutil"
 | 
			
		||||
	"github.com/docker/distribution/uuid"
 | 
			
		||||
	"github.com/docker/libtrust"
 | 
			
		||||
| 
						 | 
				
			
			@ -523,7 +522,7 @@ func TestBlobMount(t *testing.T) {
 | 
			
		|||
 | 
			
		||||
	l := r.Blobs(ctx)
 | 
			
		||||
 | 
			
		||||
	bw, err := l.Create(ctx, storage.WithMountFrom(canonicalRef))
 | 
			
		||||
	bw, err := l.Create(ctx, WithMountFrom(canonicalRef))
 | 
			
		||||
	if bw != nil {
 | 
			
		||||
		t.Fatalf("Expected blob writer to be nil, was %v", bw)
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -97,9 +97,9 @@ func (lbs *linkedBlobStore) Put(ctx context.Context, mediaType string, p []byte)
 | 
			
		|||
	return desc, lbs.linkBlob(ctx, desc)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CreateOptions is a collection of blob creation modifiers relevant to general
 | 
			
		||||
// createOptions is a collection of blob creation modifiers relevant to general
 | 
			
		||||
// blob storage intended to be configured by the BlobCreateOption.Apply method.
 | 
			
		||||
type CreateOptions struct {
 | 
			
		||||
type createOptions struct {
 | 
			
		||||
	Mount struct {
 | 
			
		||||
		ShouldMount bool
 | 
			
		||||
		From        reference.Canonical
 | 
			
		||||
| 
						 | 
				
			
			@ -116,7 +116,7 @@ func (f optionFunc) Apply(v interface{}) error {
 | 
			
		|||
// mounted from the given canonical reference.
 | 
			
		||||
func WithMountFrom(ref reference.Canonical) distribution.BlobCreateOption {
 | 
			
		||||
	return optionFunc(func(v interface{}) error {
 | 
			
		||||
		opts, ok := v.(*CreateOptions)
 | 
			
		||||
		opts, ok := v.(*createOptions)
 | 
			
		||||
		if !ok {
 | 
			
		||||
			return fmt.Errorf("unexpected options type: %T", v)
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -132,7 +132,7 @@ func WithMountFrom(ref reference.Canonical) distribution.BlobCreateOption {
 | 
			
		|||
func (lbs *linkedBlobStore) Create(ctx context.Context, options ...distribution.BlobCreateOption) (distribution.BlobWriter, error) {
 | 
			
		||||
	context.GetLogger(ctx).Debug("(*linkedBlobStore).Writer")
 | 
			
		||||
 | 
			
		||||
	var opts CreateOptions
 | 
			
		||||
	var opts createOptions
 | 
			
		||||
 | 
			
		||||
	for _, option := range options {
 | 
			
		||||
		err := option.Apply(&opts)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue