MCPcopy
hub / github.com/docker/compose / Copy

Function Copy

internal/oci/resolver.go:98–128  ·  view source on GitHub ↗
(ctx context.Context, resolver remotes.Resolver, image reference.Named, named reference.Named)

Source from the content-addressed store, hash-verified

96}
97
98func Copy(ctx context.Context, resolver remotes.Resolver, image reference.Named, named reference.Named) (spec.Descriptor, error) {
99 src, desc, err := resolver.Resolve(ctx, image.String())
100 if err != nil {
101 return spec.Descriptor{}, err
102 }
103 if desc.Annotations == nil {
104 desc.Annotations = make(map[string]string)
105 }
106 // set LabelDistributionSource so push will actually use a registry mount
107 refspec := reference.TrimNamed(image).String()
108 u, err := url.Parse("dummy://" + refspec)
109 if err != nil {
110 return spec.Descriptor{}, err
111 }
112 source, repo := u.Hostname(), strings.TrimPrefix(u.Path, "/")
113 desc.Annotations[labels.LabelDistributionSource+"."+source] = repo
114
115 p, err := resolver.Pusher(ctx, named.Name())
116 if err != nil {
117 return spec.Descriptor{}, err
118 }
119 f, err := resolver.Fetcher(ctx, src)
120 if err != nil {
121 return spec.Descriptor{}, err
122 }
123
124 err = contentutil.CopyChain(ctx,
125 contentutil.FromPusher(p),
126 contentutil.FromFetcher(f), desc)
127 return desc, err
128}
129
130func Push(ctx context.Context, resolver remotes.Resolver, ref reference.Named, descriptor spec.Descriptor) error {
131 pusher, err := resolver.Pusher(ctx, ref.String())

Callers 1

publishMethod · 0.92

Calls 2

StringMethod · 0.45
NameMethod · 0.45

Tested by

no test coverage detected