func()

in ecr/resolver.go [304:332]


func (r *ecrResolver) Pusher(ctx context.Context, ref string) (remotes.Pusher, error) {
	log.G(ctx).WithField("ref", ref).Debug("ecr.resolver.pusher")
	ecrSpec, err := ParseRef(ref)
	if err != nil {
		return nil, err
	}

	// References will include a digest when the ref is being pushed to a tag to
	// denote *which* digest is the root descriptor in this push.
	tag, digest := ecrSpec.TagDigest()
	if tag == "" && digest != "" {
		log.G(ctx).WithField("ref", ref).Debug("ecr.resolver.pusher: push by digest")
	}

	// The root descriptor's digest *must* be provided in order to properly tag
	// manifests. A ref string will provide this as of containerd v1.3.0 -
	// earlier versions do not provide it.
	if digest == "" {
		return nil, errors.New("pusher: root descriptor missing from push reference")
	}

	return &ecrPusher{
		ecrBase: ecrBase{
			client:  r.getClient(ecrSpec.Region()),
			ecrSpec: ecrSpec,
		},
		tracker: r.tracker,
	}, nil
}