mirror of
				https://github.com/moby/moby.git
				synced 2022-11-09 12:21:53 -05:00 
			
		
		
		
	*: use opencontainers/go-digest package
The `digest` data type, used throughout docker for image verification and identity, has been broken out into `opencontainers/go-digest`. This PR updates the dependencies and moves uses over to the new type. Signed-off-by: Stephen J Day <stephen.day@docker.com>
This commit is contained in:
		
							parent
							
								
									fad6db4465
								
							
						
					
					
						commit
						7a85579917
					
				
					 53 changed files with 86 additions and 99 deletions
				
			
		| 
						 | 
				
			
			@ -1,6 +1,7 @@
 | 
			
		|||
package reference
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	_ "crypto/sha256"
 | 
			
		||||
	"testing"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,7 +10,6 @@ import (
 | 
			
		|||
	"sort"
 | 
			
		||||
 | 
			
		||||
	"github.com/Sirupsen/logrus"
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/docker/docker/api/types"
 | 
			
		||||
	"github.com/docker/docker/cli/command"
 | 
			
		||||
	"github.com/docker/docker/cli/trust"
 | 
			
		||||
| 
						 | 
				
			
			@ -19,6 +18,7 @@ import (
 | 
			
		|||
	"github.com/docker/docker/registry"
 | 
			
		||||
	"github.com/docker/notary/client"
 | 
			
		||||
	"github.com/docker/notary/tuf/data"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
	"golang.org/x/net/context"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -58,7 +58,7 @@ func PushTrustedReference(cli *command.DockerCli, repoInfo *registry.RepositoryI
 | 
			
		|||
		var pushResult types.PushResult
 | 
			
		||||
		err := json.Unmarshal(*aux, &pushResult)
 | 
			
		||||
		if err == nil && pushResult.Tag != "" {
 | 
			
		||||
			if dgst, err := digest.ParseDigest(pushResult.Digest); err == nil {
 | 
			
		||||
			if dgst, err := digest.Parse(pushResult.Digest); err == nil {
 | 
			
		||||
				h, err := hex.DecodeString(dgst.Hex())
 | 
			
		||||
				if err != nil {
 | 
			
		||||
					target = nil
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,7 +5,6 @@ import (
 | 
			
		|||
	"fmt"
 | 
			
		||||
 | 
			
		||||
	"github.com/Sirupsen/logrus"
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	distreference "github.com/docker/distribution/reference"
 | 
			
		||||
	"github.com/docker/docker/api/types/swarm"
 | 
			
		||||
	"github.com/docker/docker/cli/command"
 | 
			
		||||
| 
						 | 
				
			
			@ -13,6 +12,7 @@ import (
 | 
			
		|||
	"github.com/docker/docker/reference"
 | 
			
		||||
	"github.com/docker/docker/registry"
 | 
			
		||||
	"github.com/docker/notary/tuf/data"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
	"github.com/pkg/errors"
 | 
			
		||||
	"golang.org/x/net/context"
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			@ -30,7 +30,7 @@ func resolveServiceImageDigest(dockerCli *command.DockerCli, service *swarm.Serv
 | 
			
		|||
	// could be parsed as a digest reference. Specifying an image ID
 | 
			
		||||
	// is valid but not resolvable. There is no warning message for
 | 
			
		||||
	// an image ID because it's valid to use one.
 | 
			
		||||
	if _, err := digest.ParseDigest(image); err == nil {
 | 
			
		||||
	if _, err := digest.Parse(image); err == nil {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -182,6 +182,7 @@ type bintree struct {
 | 
			
		|||
	Func     func() (*asset, error)
 | 
			
		||||
	Children map[string]*bintree
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var _bintree = &bintree{nil, map[string]*bintree{
 | 
			
		||||
	"data": &bintree{nil, map[string]*bintree{
 | 
			
		||||
		"config_schema_v3.0.json": &bintree{dataConfig_schema_v30Json, map[string]*bintree{}},
 | 
			
		||||
| 
						 | 
				
			
			@ -234,4 +235,3 @@ func _filePath(dir, name string) string {
 | 
			
		|||
	cannonicalName := strings.Replace(name, "\\", "/", -1)
 | 
			
		||||
	return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -52,7 +52,6 @@ import (
 | 
			
		|||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/Sirupsen/logrus"
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	distreference "github.com/docker/distribution/reference"
 | 
			
		||||
	apierrors "github.com/docker/docker/api/errors"
 | 
			
		||||
	apitypes "github.com/docker/docker/api/types"
 | 
			
		||||
| 
						 | 
				
			
			@ -73,6 +72,7 @@ import (
 | 
			
		|||
	"github.com/docker/swarmkit/manager/encryption"
 | 
			
		||||
	swarmnode "github.com/docker/swarmkit/node"
 | 
			
		||||
	"github.com/docker/swarmkit/protobuf/ptypes"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
	"github.com/pkg/errors"
 | 
			
		||||
	"golang.org/x/net/context"
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			@ -832,7 +832,7 @@ func (c *Cluster) GetServices(options apitypes.ServiceListOptions) ([]types.Serv
 | 
			
		|||
// TODO(nishanttotla): After the packages converge, the function must
 | 
			
		||||
// convert distreference.Named -> distreference.Canonical, and the logic simplified.
 | 
			
		||||
func (c *Cluster) imageWithDigestString(ctx context.Context, image string, authConfig *apitypes.AuthConfig) (string, error) {
 | 
			
		||||
	if _, err := digest.ParseDigest(image); err == nil {
 | 
			
		||||
	if _, err := digest.Parse(image); err == nil {
 | 
			
		||||
		return "", errors.New("image reference is an image ID")
 | 
			
		||||
	}
 | 
			
		||||
	ref, err := distreference.ParseNamed(image)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,7 +14,7 @@ func NodeFromGRPC(n swarmapi.Node) types.Node {
 | 
			
		|||
	node := types.Node{
 | 
			
		||||
		ID: n.ID,
 | 
			
		||||
		Spec: types.NodeSpec{
 | 
			
		||||
			Role:         types.NodeRole(strings.ToLower(n.Spec.Role.String())),
 | 
			
		||||
			Role:         types.NodeRole(strings.ToLower(n.Spec.DesiredRole.String())),
 | 
			
		||||
			Availability: types.NodeAvailability(strings.ToLower(n.Spec.Availability.String())),
 | 
			
		||||
		},
 | 
			
		||||
		Status: types.NodeStatus{
 | 
			
		||||
| 
						 | 
				
			
			@ -74,7 +74,7 @@ func NodeSpecToGRPC(s types.NodeSpec) (swarmapi.NodeSpec, error) {
 | 
			
		|||
		},
 | 
			
		||||
	}
 | 
			
		||||
	if role, ok := swarmapi.NodeRole_value[strings.ToUpper(string(s.Role))]; ok {
 | 
			
		||||
		spec.Role = swarmapi.NodeRole(role)
 | 
			
		||||
		spec.DesiredRole = swarmapi.NodeRole(role)
 | 
			
		||||
	} else {
 | 
			
		||||
		return swarmapi.NodeSpec{}, fmt.Errorf("invalid Role: %q", s.Role)
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,6 @@ import (
 | 
			
		|||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/Sirupsen/logrus"
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/docker/docker/api/types"
 | 
			
		||||
	"github.com/docker/docker/api/types/backend"
 | 
			
		||||
	containertypes "github.com/docker/docker/api/types/container"
 | 
			
		||||
| 
						 | 
				
			
			@ -24,6 +23,7 @@ import (
 | 
			
		|||
	"github.com/docker/swarmkit/api"
 | 
			
		||||
	"github.com/docker/swarmkit/log"
 | 
			
		||||
	"github.com/docker/swarmkit/protobuf/ptypes"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
	"golang.org/x/net/context"
 | 
			
		||||
	"golang.org/x/time/rate"
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			@ -54,7 +54,7 @@ func (c *containerAdapter) pullImage(ctx context.Context) error {
 | 
			
		|||
	spec := c.container.spec()
 | 
			
		||||
 | 
			
		||||
	// Skip pulling if the image is referenced by image ID.
 | 
			
		||||
	if _, err := digest.ParseDigest(spec.Image); err == nil {
 | 
			
		||||
	if _, err := digest.Parse(spec.Image); err == nil {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,12 +4,12 @@ import (
 | 
			
		|||
	"fmt"
 | 
			
		||||
 | 
			
		||||
	"github.com/Sirupsen/logrus"
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/docker/docker/api/types"
 | 
			
		||||
	"github.com/docker/docker/api/types/filters"
 | 
			
		||||
	"github.com/docker/docker/layer"
 | 
			
		||||
	"github.com/docker/docker/pkg/directory"
 | 
			
		||||
	"github.com/docker/docker/volume"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func (daemon *Daemon) getLayerRefs() map[layer.ChainID]int {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,7 +5,6 @@ import (
 | 
			
		|||
	"strings"
 | 
			
		||||
 | 
			
		||||
	dist "github.com/docker/distribution"
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/docker/docker/api/types"
 | 
			
		||||
	"github.com/docker/docker/builder"
 | 
			
		||||
	"github.com/docker/docker/distribution"
 | 
			
		||||
| 
						 | 
				
			
			@ -13,6 +12,7 @@ import (
 | 
			
		|||
	"github.com/docker/docker/pkg/progress"
 | 
			
		||||
	"github.com/docker/docker/reference"
 | 
			
		||||
	"github.com/docker/docker/registry"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
	"golang.org/x/net/context"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -32,7 +32,7 @@ func (daemon *Daemon) PullImage(ctx context.Context, image, tag string, metaHead
 | 
			
		|||
	if tag != "" {
 | 
			
		||||
		// The "tag" could actually be a digest.
 | 
			
		||||
		var dgst digest.Digest
 | 
			
		||||
		dgst, err = digest.ParseDigest(tag)
 | 
			
		||||
		dgst, err = digest.Parse(tag)
 | 
			
		||||
		if err == nil {
 | 
			
		||||
			ref, err = reference.WithDigest(reference.TrimNamed(ref), dgst)
 | 
			
		||||
		} else {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,7 +5,6 @@ import (
 | 
			
		|||
	"regexp"
 | 
			
		||||
 | 
			
		||||
	"github.com/Sirupsen/logrus"
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/docker/docker/api/types"
 | 
			
		||||
	"github.com/docker/docker/api/types/filters"
 | 
			
		||||
	"github.com/docker/docker/image"
 | 
			
		||||
| 
						 | 
				
			
			@ -15,6 +14,7 @@ import (
 | 
			
		|||
	"github.com/docker/docker/runconfig"
 | 
			
		||||
	"github.com/docker/docker/volume"
 | 
			
		||||
	"github.com/docker/libnetwork"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// ContainersPrune removes unused containers
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,7 +7,6 @@ import (
 | 
			
		|||
	"runtime"
 | 
			
		||||
 | 
			
		||||
	"github.com/docker/distribution"
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/docker/distribution/manifest/schema2"
 | 
			
		||||
	"github.com/docker/docker/api/types"
 | 
			
		||||
	"github.com/docker/docker/distribution/metadata"
 | 
			
		||||
| 
						 | 
				
			
			@ -18,6 +17,7 @@ import (
 | 
			
		|||
	"github.com/docker/docker/reference"
 | 
			
		||||
	"github.com/docker/docker/registry"
 | 
			
		||||
	"github.com/docker/libtrust"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
	"golang.org/x/net/context"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,9 +7,9 @@ import (
 | 
			
		|||
	"encoding/json"
 | 
			
		||||
	"errors"
 | 
			
		||||
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/docker/docker/api/types"
 | 
			
		||||
	"github.com/docker/docker/layer"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// V2MetadataService maps layer IDs to a set of known metadata for
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,8 +8,8 @@ import (
 | 
			
		|||
	"reflect"
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/docker/docker/layer"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestV2MetadataService(t *testing.T) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,12 +5,12 @@ import (
 | 
			
		|||
	"fmt"
 | 
			
		||||
 | 
			
		||||
	"github.com/Sirupsen/logrus"
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/docker/docker/api"
 | 
			
		||||
	"github.com/docker/docker/distribution/metadata"
 | 
			
		||||
	"github.com/docker/docker/pkg/progress"
 | 
			
		||||
	"github.com/docker/docker/reference"
 | 
			
		||||
	"github.com/docker/docker/registry"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
	"golang.org/x/net/context"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,7 +12,6 @@ import (
 | 
			
		|||
 | 
			
		||||
	"github.com/Sirupsen/logrus"
 | 
			
		||||
	"github.com/docker/distribution"
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/docker/distribution/manifest/manifestlist"
 | 
			
		||||
	"github.com/docker/distribution/manifest/schema1"
 | 
			
		||||
	"github.com/docker/distribution/manifest/schema2"
 | 
			
		||||
| 
						 | 
				
			
			@ -29,6 +28,7 @@ import (
 | 
			
		|||
	"github.com/docker/docker/pkg/stringid"
 | 
			
		||||
	"github.com/docker/docker/reference"
 | 
			
		||||
	"github.com/docker/docker/registry"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
	"golang.org/x/net/context"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -228,10 +228,7 @@ func (ld *v2LayerDescriptor) Download(ctx context.Context, progressOutput progre
 | 
			
		|||
	defer reader.Close()
 | 
			
		||||
 | 
			
		||||
	if ld.verifier == nil {
 | 
			
		||||
		ld.verifier, err = digest.NewDigestVerifier(ld.digest)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, 0, xfer.DoNotRetry{Err: err}
 | 
			
		||||
		}
 | 
			
		||||
		ld.verifier = ld.digest.Verifier()
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	_, err = io.Copy(tmpFile, io.TeeReader(reader, ld.verifier))
 | 
			
		||||
| 
						 | 
				
			
			@ -716,10 +713,7 @@ func (p *v2Puller) pullSchema2Config(ctx context.Context, dgst digest.Digest) (c
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	// Verify image config digest
 | 
			
		||||
	verifier, err := digest.NewDigestVerifier(dgst)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	verifier := dgst.Verifier()
 | 
			
		||||
	if _, err := verifier.Write(configJSON); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -742,10 +736,7 @@ func schema2ManifestDigest(ref reference.Named, mfst distribution.Manifest) (dig
 | 
			
		|||
 | 
			
		||||
	// If pull by digest, then verify the manifest digest.
 | 
			
		||||
	if digested, isDigested := ref.(reference.Canonical); isDigested {
 | 
			
		||||
		verifier, err := digest.NewDigestVerifier(digested.Digest())
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return "", err
 | 
			
		||||
		}
 | 
			
		||||
		verifier := digested.Digest().Verifier()
 | 
			
		||||
		if _, err := verifier.Write(canonical); err != nil {
 | 
			
		||||
			return "", err
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -798,10 +789,7 @@ func verifySchema1Manifest(signedManifest *schema1.SignedManifest, ref reference
 | 
			
		|||
	// important to do this first, before any other content validation. If the
 | 
			
		||||
	// digest cannot be verified, don't even bother with those other things.
 | 
			
		||||
	if digested, isCanonical := ref.(reference.Canonical); isCanonical {
 | 
			
		||||
		verifier, err := digest.NewDigestVerifier(digested.Digest())
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
		verifier := digested.Digest().Verifier()
 | 
			
		||||
		if _, err := verifier.Write(signedManifest.Canonical); err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,9 +8,9 @@ import (
 | 
			
		|||
	"strings"
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/docker/distribution/manifest/schema1"
 | 
			
		||||
	"github.com/docker/docker/reference"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// TestFixManifestLayers checks that fixManifestLayers removes a duplicate
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,7 +5,6 @@ import (
 | 
			
		|||
	"sync"
 | 
			
		||||
 | 
			
		||||
	"github.com/Sirupsen/logrus"
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/docker/distribution/registry/client/transport"
 | 
			
		||||
	"github.com/docker/docker/distribution/metadata"
 | 
			
		||||
	"github.com/docker/docker/dockerversion"
 | 
			
		||||
| 
						 | 
				
			
			@ -17,6 +16,7 @@ import (
 | 
			
		|||
	"github.com/docker/docker/pkg/stringid"
 | 
			
		||||
	"github.com/docker/docker/reference"
 | 
			
		||||
	"github.com/docker/docker/registry"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
	"golang.org/x/net/context"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,7 +13,6 @@ import (
 | 
			
		|||
 | 
			
		||||
	"github.com/Sirupsen/logrus"
 | 
			
		||||
	"github.com/docker/distribution"
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/docker/distribution/manifest/schema1"
 | 
			
		||||
	"github.com/docker/distribution/manifest/schema2"
 | 
			
		||||
	distreference "github.com/docker/distribution/reference"
 | 
			
		||||
| 
						 | 
				
			
			@ -27,6 +26,7 @@ import (
 | 
			
		|||
	"github.com/docker/docker/pkg/stringid"
 | 
			
		||||
	"github.com/docker/docker/reference"
 | 
			
		||||
	"github.com/docker/docker/registry"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
| 
						 | 
				
			
			@ -435,7 +435,7 @@ func (pd *v2PushDescriptor) uploadUsingSession(
 | 
			
		|||
		return distribution.Descriptor{}, fmt.Errorf("unsupported layer media type %s", m)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	digester := digest.Canonical.New()
 | 
			
		||||
	digester := digest.Canonical.Digester()
 | 
			
		||||
	tee := io.TeeReader(reader, digester.Hash())
 | 
			
		||||
 | 
			
		||||
	nn, err := layerUpload.ReadFrom(tee)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,13 +7,13 @@ import (
 | 
			
		|||
 | 
			
		||||
	"github.com/docker/distribution"
 | 
			
		||||
	"github.com/docker/distribution/context"
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/docker/distribution/manifest/schema2"
 | 
			
		||||
	distreference "github.com/docker/distribution/reference"
 | 
			
		||||
	"github.com/docker/docker/distribution/metadata"
 | 
			
		||||
	"github.com/docker/docker/layer"
 | 
			
		||||
	"github.com/docker/docker/pkg/progress"
 | 
			
		||||
	"github.com/docker/docker/reference"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestGetRepositoryMountCandidates(t *testing.T) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,10 +12,10 @@ import (
 | 
			
		|||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/docker/distribution"
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/docker/docker/image"
 | 
			
		||||
	"github.com/docker/docker/layer"
 | 
			
		||||
	"github.com/docker/docker/pkg/progress"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
	"golang.org/x/net/context"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,8 +8,8 @@ import (
 | 
			
		|||
	"sync"
 | 
			
		||||
 | 
			
		||||
	"github.com/Sirupsen/logrus"
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/docker/docker/pkg/ioutils"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// DigestWalkFunc is function called by StoreBackend.Walk
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,7 @@ import (
 | 
			
		|||
	"path/filepath"
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestFSGetSet(t *testing.T) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,8 +6,8 @@ import (
 | 
			
		|||
	"io"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/docker/docker/api/types/container"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// ID is the content-addressable ID of an image.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,8 +7,9 @@ import (
 | 
			
		|||
	"sync"
 | 
			
		||||
 | 
			
		||||
	"github.com/Sirupsen/logrus"
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/docker/distribution/digestset"
 | 
			
		||||
	"github.com/docker/docker/layer"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Store is an interface for creating and accessing images
 | 
			
		||||
| 
						 | 
				
			
			@ -40,7 +41,7 @@ type store struct {
 | 
			
		|||
	ls        LayerGetReleaser
 | 
			
		||||
	images    map[ID]*imageMeta
 | 
			
		||||
	fs        StoreBackend
 | 
			
		||||
	digestSet *digest.Set
 | 
			
		||||
	digestSet *digestset.Set
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NewImageStore returns new store object for given layer store
 | 
			
		||||
| 
						 | 
				
			
			@ -49,7 +50,7 @@ func NewImageStore(fs StoreBackend, ls LayerGetReleaser) (Store, error) {
 | 
			
		|||
		ls:        ls,
 | 
			
		||||
		images:    make(map[ID]*imageMeta),
 | 
			
		||||
		fs:        fs,
 | 
			
		||||
		digestSet: digest.NewSet(),
 | 
			
		||||
		digestSet: digestset.NewSet(),
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// load all current images and retain layers
 | 
			
		||||
| 
						 | 
				
			
			@ -170,7 +171,7 @@ func (is *store) Search(term string) (ID, error) {
 | 
			
		|||
 | 
			
		||||
	dgst, err := is.digestSet.Lookup(term)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		if err == digest.ErrDigestNotFound {
 | 
			
		||||
		if err == digestset.ErrDigestNotFound {
 | 
			
		||||
			err = fmt.Errorf("No such image: %s", term)
 | 
			
		||||
		}
 | 
			
		||||
		return "", err
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,8 +5,8 @@ import (
 | 
			
		|||
	"os"
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/docker/docker/layer"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestRestore(t *testing.T) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,6 @@ import (
 | 
			
		|||
 | 
			
		||||
	"github.com/Sirupsen/logrus"
 | 
			
		||||
	"github.com/docker/distribution"
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/docker/docker/image"
 | 
			
		||||
	"github.com/docker/docker/image/v1"
 | 
			
		||||
	"github.com/docker/docker/layer"
 | 
			
		||||
| 
						 | 
				
			
			@ -23,6 +22,7 @@ import (
 | 
			
		|||
	"github.com/docker/docker/pkg/symlink"
 | 
			
		||||
	"github.com/docker/docker/pkg/system"
 | 
			
		||||
	"github.com/docker/docker/reference"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func (l *tarexporter) Load(inTar io.ReadCloser, outStream io.Writer, quiet bool) error {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,13 +10,13 @@ import (
 | 
			
		|||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/docker/distribution"
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/docker/docker/image"
 | 
			
		||||
	"github.com/docker/docker/image/v1"
 | 
			
		||||
	"github.com/docker/docker/layer"
 | 
			
		||||
	"github.com/docker/docker/pkg/archive"
 | 
			
		||||
	"github.com/docker/docker/pkg/system"
 | 
			
		||||
	"github.com/docker/docker/reference"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
	"github.com/pkg/errors"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,11 +6,11 @@ import (
 | 
			
		|||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"github.com/Sirupsen/logrus"
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/docker/docker/api/types/versions"
 | 
			
		||||
	"github.com/docker/docker/image"
 | 
			
		||||
	"github.com/docker/docker/layer"
 | 
			
		||||
	"github.com/docker/docker/pkg/stringid"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// noFallbackMinVersion is the minimum version for which v1compatibility
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,13 +8,13 @@ import (
 | 
			
		|||
	"regexp"
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/docker/distribution/manifest/schema1"
 | 
			
		||||
	"github.com/docker/distribution/manifest/schema2"
 | 
			
		||||
	"github.com/docker/docker/api/types"
 | 
			
		||||
	"github.com/docker/docker/integration-cli/checker"
 | 
			
		||||
	"github.com/docker/docker/pkg/stringutils"
 | 
			
		||||
	"github.com/go-check/check"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,12 +11,12 @@ import (
 | 
			
		|||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"github.com/docker/distribution"
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/docker/distribution/manifest"
 | 
			
		||||
	"github.com/docker/distribution/manifest/manifestlist"
 | 
			
		||||
	"github.com/docker/distribution/manifest/schema2"
 | 
			
		||||
	"github.com/docker/docker/integration-cli/checker"
 | 
			
		||||
	"github.com/go-check/check"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// testPullImageWithAliases pulls a specific image tag and verifies that any aliases (i.e., other
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,9 +7,9 @@ import (
 | 
			
		|||
	"sync"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/docker/docker/integration-cli/checker"
 | 
			
		||||
	"github.com/go-check/check"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// TestPullFromCentralRegistry pulls an image from the central registry and verifies that the client
 | 
			
		||||
| 
						 | 
				
			
			@ -26,7 +26,7 @@ func (s *DockerHubPullSuite) TestPullFromCentralRegistry(c *check.C) {
 | 
			
		|||
	matches := regexp.MustCompile(`Digest: (.+)\n`).FindAllStringSubmatch(out, -1)
 | 
			
		||||
	c.Assert(len(matches), checker.Equals, 1, check.Commentf("expected exactly one image digest in the output"))
 | 
			
		||||
	c.Assert(len(matches[0]), checker.Equals, 2, check.Commentf("unexpected number of submatches for the digest"))
 | 
			
		||||
	_, err := digest.ParseDigest(matches[0][1])
 | 
			
		||||
	_, err := digest.Parse(matches[0][1])
 | 
			
		||||
	c.Check(err, checker.IsNil, check.Commentf("invalid digest %q in output", matches[0][1]))
 | 
			
		||||
 | 
			
		||||
	// We should have a single entry in images.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,10 +13,10 @@ import (
 | 
			
		|||
	"strings"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/docker/docker/integration-cli/checker"
 | 
			
		||||
	"github.com/docker/docker/pkg/testutil"
 | 
			
		||||
	"github.com/go-check/check"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// save a repo using gz compression and try to load it using stdout
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,7 +8,7 @@ import (
 | 
			
		|||
	"os/exec"
 | 
			
		||||
	"path/filepath"
 | 
			
		||||
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,7 +4,7 @@ import (
 | 
			
		|||
	"io"
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestEmptyLayer(t *testing.T) {
 | 
			
		||||
| 
						 | 
				
			
			@ -33,7 +33,7 @@ func TestEmptyLayer(t *testing.T) {
 | 
			
		|||
		t.Fatalf("error streaming tar for empty layer: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	digester := digest.Canonical.New()
 | 
			
		||||
	digester := digest.Canonical.Digester()
 | 
			
		||||
	_, err = io.Copy(digester.Hash(), tarStream)
 | 
			
		||||
 | 
			
		||||
	if err != nil {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,8 +15,8 @@ import (
 | 
			
		|||
 | 
			
		||||
	"github.com/Sirupsen/logrus"
 | 
			
		||||
	"github.com/docker/distribution"
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/docker/docker/pkg/ioutils"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
| 
						 | 
				
			
			@ -165,7 +165,7 @@ func (fms *fileMetadataStore) GetParent(layer ChainID) (ChainID, error) {
 | 
			
		|||
		return "", err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	dgst, err := digest.ParseDigest(strings.TrimSpace(string(content)))
 | 
			
		||||
	dgst, err := digest.Parse(strings.TrimSpace(string(content)))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return "", err
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -179,7 +179,7 @@ func (fms *fileMetadataStore) GetDiffID(layer ChainID) (DiffID, error) {
 | 
			
		|||
		return "", err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	dgst, err := digest.ParseDigest(strings.TrimSpace(string(content)))
 | 
			
		||||
	dgst, err := digest.Parse(strings.TrimSpace(string(content)))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return "", err
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -296,7 +296,7 @@ func (fms *fileMetadataStore) GetMountParent(mount string) (ChainID, error) {
 | 
			
		|||
		return "", err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	dgst, err := digest.ParseDigest(strings.TrimSpace(string(content)))
 | 
			
		||||
	dgst, err := digest.Parse(strings.TrimSpace(string(content)))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return "", err
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,7 +10,7 @@ import (
 | 
			
		|||
	"syscall"
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func randomLayerID(seed int64) ChainID {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,8 +15,8 @@ import (
 | 
			
		|||
 | 
			
		||||
	"github.com/Sirupsen/logrus"
 | 
			
		||||
	"github.com/docker/distribution"
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/docker/docker/pkg/archive"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,11 +9,11 @@ import (
 | 
			
		|||
 | 
			
		||||
	"github.com/Sirupsen/logrus"
 | 
			
		||||
	"github.com/docker/distribution"
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/docker/docker/daemon/graphdriver"
 | 
			
		||||
	"github.com/docker/docker/pkg/idtools"
 | 
			
		||||
	"github.com/docker/docker/pkg/plugingetter"
 | 
			
		||||
	"github.com/docker/docker/pkg/stringid"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
	"github.com/vbatts/tar-split/tar/asm"
 | 
			
		||||
	"github.com/vbatts/tar-split/tar/storage"
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			@ -204,7 +204,7 @@ func (ls *layerStore) loadMount(mount string) error {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
func (ls *layerStore) applyTar(tx MetadataTransaction, ts io.Reader, parent string, layer *roLayer) error {
 | 
			
		||||
	digester := digest.Canonical.New()
 | 
			
		||||
	digester := digest.Canonical.Digester()
 | 
			
		||||
	tr := io.TeeReader(ts, digester.Hash())
 | 
			
		||||
 | 
			
		||||
	tsw, err := tx.TarSplitWriter(true)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,12 +10,12 @@ import (
 | 
			
		|||
	"strings"
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/docker/docker/daemon/graphdriver"
 | 
			
		||||
	"github.com/docker/docker/daemon/graphdriver/vfs"
 | 
			
		||||
	"github.com/docker/docker/pkg/archive"
 | 
			
		||||
	"github.com/docker/docker/pkg/idtools"
 | 
			
		||||
	"github.com/docker/docker/pkg/stringid"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,8 +5,8 @@ import (
 | 
			
		|||
	"fmt"
 | 
			
		||||
 | 
			
		||||
	"github.com/Sirupsen/logrus"
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/docker/docker/daemon/graphdriver"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// GetLayerPath returns the path to a layer
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,7 +8,7 @@ import (
 | 
			
		|||
	"os"
 | 
			
		||||
 | 
			
		||||
	"github.com/Sirupsen/logrus"
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
	"github.com/vbatts/tar-split/tar/asm"
 | 
			
		||||
	"github.com/vbatts/tar-split/tar/storage"
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			@ -98,7 +98,7 @@ func (ls *layerStore) ChecksumForGraphID(id, parent, oldTarDataPath, newTarDataP
 | 
			
		|||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	dgst := digest.Canonical.New()
 | 
			
		||||
	dgst := digest.Canonical.Digester()
 | 
			
		||||
	err = ls.assembleTarTo(id, uncompressed, &size, dgst.Hash())
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,7 +5,7 @@ import (
 | 
			
		|||
	"io"
 | 
			
		||||
 | 
			
		||||
	"github.com/docker/distribution"
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type roLayer struct {
 | 
			
		||||
| 
						 | 
				
			
			@ -156,14 +156,10 @@ func storeLayer(tx MetadataTransaction, layer *roLayer) error {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
func newVerifiedReadCloser(rc io.ReadCloser, dgst digest.Digest) (io.ReadCloser, error) {
 | 
			
		||||
	verifier, err := digest.NewDigestVerifier(dgst)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return &verifiedReadCloser{
 | 
			
		||||
		rc:       rc,
 | 
			
		||||
		dgst:     dgst,
 | 
			
		||||
		verifier: verifier,
 | 
			
		||||
		verifier: dgst.Verifier(),
 | 
			
		||||
	}, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,13 +14,13 @@ import (
 | 
			
		|||
	"encoding/json"
 | 
			
		||||
 | 
			
		||||
	"github.com/Sirupsen/logrus"
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/docker/docker/distribution/metadata"
 | 
			
		||||
	"github.com/docker/docker/image"
 | 
			
		||||
	imagev1 "github.com/docker/docker/image/v1"
 | 
			
		||||
	"github.com/docker/docker/layer"
 | 
			
		||||
	"github.com/docker/docker/pkg/ioutils"
 | 
			
		||||
	"github.com/docker/docker/reference"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type graphIDRegistrar interface {
 | 
			
		||||
| 
						 | 
				
			
			@ -327,7 +327,7 @@ func migrateRefs(root, driverName string, rs refAdder, mappings map[string]image
 | 
			
		|||
					logrus.Errorf("migrate tags: invalid name %q, %q", name, err)
 | 
			
		||||
					continue
 | 
			
		||||
				}
 | 
			
		||||
				if dgst, err := digest.ParseDigest(tag); err == nil {
 | 
			
		||||
				if dgst, err := digest.Parse(tag); err == nil {
 | 
			
		||||
					canonical, err := reference.WithDigest(reference.TrimNamed(ref), dgst)
 | 
			
		||||
					if err != nil {
 | 
			
		||||
						logrus.Errorf("migrate tags: invalid digest %q, %q", dgst, err)
 | 
			
		||||
| 
						 | 
				
			
			@ -425,7 +425,7 @@ func migrateImage(id, root string, ls graphIDRegistrar, is image.Store, ms metad
 | 
			
		|||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	diffID, err := digest.ParseDigest(string(diffIDData))
 | 
			
		||||
	diffID, err := digest.Parse(string(diffIDData))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -477,7 +477,7 @@ func migrateImage(id, root string, ls graphIDRegistrar, is image.Store, ms metad
 | 
			
		|||
 | 
			
		||||
	checksum, err := ioutil.ReadFile(filepath.Join(root, graphDirName, id, "checksum"))
 | 
			
		||||
	if err == nil { // best effort
 | 
			
		||||
		dgst, err := digest.ParseDigest(string(checksum))
 | 
			
		||||
		dgst, err := digest.Parse(string(checksum))
 | 
			
		||||
		if err == nil {
 | 
			
		||||
			V2MetadataService := metadata.NewV2MetadataService(ms)
 | 
			
		||||
			V2MetadataService.Add(layer.DiffID(), metadata.V2Metadata{Digest: dgst})
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,11 +13,11 @@ import (
 | 
			
		|||
	"runtime"
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/docker/docker/distribution/metadata"
 | 
			
		||||
	"github.com/docker/docker/image"
 | 
			
		||||
	"github.com/docker/docker/layer"
 | 
			
		||||
	"github.com/docker/docker/reference"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestMigrateRefs(t *testing.T) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,7 +16,6 @@ import (
 | 
			
		|||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"github.com/Sirupsen/logrus"
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/docker/distribution/manifest/schema2"
 | 
			
		||||
	"github.com/docker/docker/api/types"
 | 
			
		||||
	"github.com/docker/docker/distribution"
 | 
			
		||||
| 
						 | 
				
			
			@ -29,6 +28,7 @@ import (
 | 
			
		|||
	"github.com/docker/docker/pkg/progress"
 | 
			
		||||
	"github.com/docker/docker/plugin/v2"
 | 
			
		||||
	"github.com/docker/docker/reference"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
	"github.com/pkg/errors"
 | 
			
		||||
	"golang.org/x/net/context"
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			@ -123,7 +123,7 @@ func (s *tempConfigStore) Put(c []byte) (digest.Digest, error) {
 | 
			
		|||
 | 
			
		||||
func (s *tempConfigStore) Get(d digest.Digest) ([]byte, error) {
 | 
			
		||||
	if d != s.configDigest {
 | 
			
		||||
		return nil, digest.ErrDigestNotFound
 | 
			
		||||
		return nil, fmt.Errorf("digest not found")
 | 
			
		||||
	}
 | 
			
		||||
	return s.config, nil
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -556,7 +556,7 @@ func (pm *Manager) CreateFromContext(ctx context.Context, tarCtx io.ReadCloser,
 | 
			
		|||
	}
 | 
			
		||||
	defer rootFSBlob.Close()
 | 
			
		||||
	gzw := gzip.NewWriter(rootFSBlob)
 | 
			
		||||
	layerDigester := digest.Canonical.New()
 | 
			
		||||
	layerDigester := digest.Canonical.Digester()
 | 
			
		||||
	rootFSReader := io.TeeReader(rootFS, io.MultiWriter(gzw, layerDigester.Hash()))
 | 
			
		||||
 | 
			
		||||
	if err := chrootarchive.Untar(rootFSReader, tmpRootFSDir, nil); err != nil {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,18 +1,19 @@
 | 
			
		|||
package plugin
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"io"
 | 
			
		||||
	"io/ioutil"
 | 
			
		||||
	"os"
 | 
			
		||||
	"path/filepath"
 | 
			
		||||
 | 
			
		||||
	"github.com/Sirupsen/logrus"
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/docker/docker/distribution/xfer"
 | 
			
		||||
	"github.com/docker/docker/image"
 | 
			
		||||
	"github.com/docker/docker/layer"
 | 
			
		||||
	"github.com/docker/docker/pkg/archive"
 | 
			
		||||
	"github.com/docker/docker/pkg/progress"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
	"github.com/pkg/errors"
 | 
			
		||||
	"golang.org/x/net/context"
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			@ -86,7 +87,7 @@ type insertion struct {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
func newInsertion(tempFile *os.File) *insertion {
 | 
			
		||||
	digester := digest.Canonical.New()
 | 
			
		||||
	digester := digest.Canonical.Digester()
 | 
			
		||||
	return &insertion{f: tempFile, digester: digester, Writer: io.MultiWriter(tempFile, digester.Hash())}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -141,7 +142,7 @@ func (dm *downloadManager) Download(ctx context.Context, initialRootFS image.Roo
 | 
			
		|||
		if err != nil {
 | 
			
		||||
			return initialRootFS, nil, err
 | 
			
		||||
		}
 | 
			
		||||
		digester := digest.Canonical.New()
 | 
			
		||||
		digester := digest.Canonical.Digester()
 | 
			
		||||
		if _, err := archive.ApplyLayer(dm.tmpDir, io.TeeReader(inflatedLayerData, digester.Hash())); err != nil {
 | 
			
		||||
			return initialRootFS, nil, err
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -174,7 +175,7 @@ func (dm *downloadManager) Put(dt []byte) (digest.Digest, error) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
func (dm *downloadManager) Get(d digest.Digest) ([]byte, error) {
 | 
			
		||||
	return nil, digest.ErrDigestNotFound
 | 
			
		||||
	return nil, fmt.Errorf("digest not found")
 | 
			
		||||
}
 | 
			
		||||
func (dm *downloadManager) RootFSFromConfig(c []byte) (*image.RootFS, error) {
 | 
			
		||||
	return configToRootFS(c)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,7 +12,6 @@ import (
 | 
			
		|||
	"sync"
 | 
			
		||||
 | 
			
		||||
	"github.com/Sirupsen/logrus"
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/docker/docker/api/types"
 | 
			
		||||
	"github.com/docker/docker/image"
 | 
			
		||||
	"github.com/docker/docker/layer"
 | 
			
		||||
| 
						 | 
				
			
			@ -22,6 +21,7 @@ import (
 | 
			
		|||
	"github.com/docker/docker/plugin/v2"
 | 
			
		||||
	"github.com/docker/docker/reference"
 | 
			
		||||
	"github.com/docker/docker/registry"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
	"github.com/pkg/errors"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,6 @@ import (
 | 
			
		|||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/Sirupsen/logrus"
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/docker/docker/api/types"
 | 
			
		||||
	"github.com/docker/docker/daemon/initlayer"
 | 
			
		||||
	"github.com/docker/docker/libcontainerd"
 | 
			
		||||
| 
						 | 
				
			
			@ -19,6 +18,7 @@ import (
 | 
			
		|||
	"github.com/docker/docker/pkg/plugins"
 | 
			
		||||
	"github.com/docker/docker/pkg/stringid"
 | 
			
		||||
	"github.com/docker/docker/plugin/v2"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
	specs "github.com/opencontainers/runtime-spec/specs-go"
 | 
			
		||||
	"github.com/pkg/errors"
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,10 +5,10 @@ import (
 | 
			
		|||
	"strings"
 | 
			
		||||
	"sync"
 | 
			
		||||
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/docker/docker/api/types"
 | 
			
		||||
	"github.com/docker/docker/pkg/plugingetter"
 | 
			
		||||
	"github.com/docker/docker/pkg/plugins"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Plugin represents an individual plugin.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,9 +5,9 @@ import (
 | 
			
		|||
	"fmt"
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	distreference "github.com/docker/distribution/reference"
 | 
			
		||||
	"github.com/docker/docker/pkg/stringid"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
| 
						 | 
				
			
			@ -166,7 +166,7 @@ func ParseIDOrReference(idOrRef string) (digest.Digest, Named, error) {
 | 
			
		|||
	if err := stringid.ValidateID(idOrRef); err == nil {
 | 
			
		||||
		idOrRef = "sha256:" + idOrRef
 | 
			
		||||
	}
 | 
			
		||||
	if dgst, err := digest.ParseDigest(idOrRef); err == nil {
 | 
			
		||||
	if dgst, err := digest.Parse(idOrRef); err == nil {
 | 
			
		||||
		return dgst, nil, nil
 | 
			
		||||
	}
 | 
			
		||||
	ref, err := ParseNamed(idOrRef)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,7 +3,7 @@ package reference
 | 
			
		|||
import (
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestValidateReferenceName(t *testing.T) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,8 +9,8 @@ import (
 | 
			
		|||
	"sort"
 | 
			
		||||
	"sync"
 | 
			
		||||
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/docker/docker/pkg/ioutils"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,7 +8,7 @@ import (
 | 
			
		|||
	"strings"
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
	"github.com/opencontainers/go-digest"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue