MCPcopy
hub / github.com/genuinetools/img / TagImage

Method TagImage

client/tag.go:15–68  ·  view source on GitHub ↗

TagImage creates a reference to an image with a specific name in the image store.

(ctx context.Context, src, dest string)

Source from the content-addressed store, hash-verified

13
14// TagImage creates a reference to an image with a specific name in the image store.
15func (c *Client) TagImage(ctx context.Context, src, dest string) error {
16 // Parse the image name and tag for the src image.
17 named, err := reference.ParseNormalizedNamed(src)
18 if err != nil {
19 return fmt.Errorf("parsing image name %q failed: %v", src, err)
20 }
21 // Add the latest lag if they did not provide one.
22 named = reference.TagNameOnly(named)
23 src = named.String()
24
25 // Parse the image name and tag for the dest image.
26 named, err = reference.ParseNormalizedNamed(dest)
27 if err != nil {
28 return fmt.Errorf("parsing image name %q failed: %v", dest, err)
29 }
30 // Add the latest lag if they did not provide one.
31 named = reference.TagNameOnly(named)
32 dest = named.String()
33
34 // Create the worker opts.
35 opt, err := c.createWorkerOpt(false)
36 if err != nil {
37 return fmt.Errorf("creating worker opt failed: %v", err)
38 }
39
40 if opt.ImageStore == nil {
41 return errors.New("image store is nil")
42 }
43
44 // Get the source image.
45 image, err := opt.ImageStore.Get(ctx, src)
46 if err != nil {
47 return fmt.Errorf("getting image %s from image store failed: %v", src, err)
48 }
49
50 // Update the target image. Create it if it does not exist.
51 img := images.Image{
52 Name: dest,
53 Target: image.Target,
54 CreatedAt: time.Now(),
55 }
56 if _, err := opt.ImageStore.Update(ctx, img); err != nil {
57 if !errdefs.IsNotFound(err) {
58 return fmt.Errorf("updating image store for %s failed: %v", dest, err)
59 }
60
61 // Create it if we didn't find it.
62 if _, err := opt.ImageStore.Create(ctx, img); err != nil {
63 return fmt.Errorf("creating image in image store for %s failed: %v", dest, err)
64 }
65 }
66
67 return nil
68}

Callers 1

RunMethod · 0.80

Calls 2

createWorkerOptMethod · 0.95
StringMethod · 0.80

Tested by

no test coverage detected