Write the Annotations map into the bolt db
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
This commit is contained in:
		| @@ -24,6 +24,7 @@ import ( | ||||
| ) | ||||
|  | ||||
| var ( | ||||
| 	bucketKeyAnnotations = []byte("annotations") | ||||
| 	bucketKeyLabels      = []byte("labels") | ||||
| 	bucketKeyCreatedAt   = []byte("createdat") | ||||
| 	bucketKeyUpdatedAt   = []byte("updatedat") | ||||
| @@ -35,6 +36,12 @@ func ReadLabels(bkt *bolt.Bucket) (map[string]string, error) { | ||||
| 	return readMap(bkt, bucketKeyLabels) | ||||
| } | ||||
|  | ||||
| // ReadAnnotations reads the OCI Descriptor Annotations key from the bucket | ||||
| // Uses the key "annotations" | ||||
| func ReadAnnotations(bkt *bolt.Bucket) (map[string]string, error) { | ||||
| 	return readMap(bkt, bucketKeyAnnotations) | ||||
| } | ||||
|  | ||||
| func readMap(bkt *bolt.Bucket, bucketName []byte) (map[string]string, error) { | ||||
| 	lbkt := bkt.Bucket(bucketName) | ||||
| 	if lbkt == nil { | ||||
| @@ -60,6 +67,11 @@ func WriteLabels(bkt *bolt.Bucket, labels map[string]string) error { | ||||
| 	return writeMap(bkt, bucketKeyLabels, labels) | ||||
| } | ||||
|  | ||||
| // WriteAnnotations writes the OCI Descriptor Annotations | ||||
| func WriteAnnotations(bkt *bolt.Bucket, labels map[string]string) error { | ||||
| 	return writeMap(bkt, bucketKeyAnnotations, labels) | ||||
| } | ||||
|  | ||||
| func writeMap(bkt *bolt.Bucket, bucketName []byte, labels map[string]string) error { | ||||
| 	// Remove existing labels to keep from merging | ||||
| 	if lbkt := bkt.Bucket(bucketName); lbkt != nil { | ||||
|   | ||||
| @@ -192,6 +192,14 @@ func (s *imageStore) Update(ctx context.Context, image images.Image, fieldpaths | ||||
| 					key := strings.TrimPrefix(path, "labels.") | ||||
| 					updated.Labels[key] = image.Labels[key] | ||||
| 					continue | ||||
| 				} else if strings.HasPrefix(path, "annotations.") { | ||||
| 					if updated.Target.Annotations == nil { | ||||
| 						updated.Target.Annotations = map[string]string{} | ||||
| 					} | ||||
|  | ||||
| 					key := strings.TrimPrefix(path, "annotations.") | ||||
| 					updated.Target.Annotations[key] = image.Target.Annotations[key] | ||||
| 					continue | ||||
| 				} | ||||
|  | ||||
| 				switch path { | ||||
| @@ -204,6 +212,8 @@ func (s *imageStore) Update(ctx context.Context, image images.Image, fieldpaths | ||||
| 					// make sense to modify the size or digest without touching the | ||||
| 					// mediatype, as well, for example. | ||||
| 					updated.Target = image.Target | ||||
| 				case "annotations": | ||||
| 					updated.Target.Annotations = image.Target.Annotations | ||||
| 				default: | ||||
| 					return errors.Wrapf(errdefs.ErrInvalidArgument, "cannot update %q field on image %q", path, image.Name) | ||||
| 				} | ||||
| @@ -298,6 +308,11 @@ func readImage(image *images.Image, bkt *bolt.Bucket) error { | ||||
| 	} | ||||
| 	image.Labels = labels | ||||
|  | ||||
| 	image.Target.Annotations, err = boltutil.ReadAnnotations(bkt) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	tbkt := bkt.Bucket(bucketKeyTarget) | ||||
| 	if tbkt == nil { | ||||
| 		return errors.New("unable to read target bucket") | ||||
| @@ -331,6 +346,10 @@ func writeImage(bkt *bolt.Bucket, image *images.Image) error { | ||||
| 		return errors.Wrapf(err, "writing labels for image %v", image.Name) | ||||
| 	} | ||||
|  | ||||
| 	if err := boltutil.WriteAnnotations(bkt, image.Target.Annotations); err != nil { | ||||
| 		return errors.Wrapf(err, "writing Annotations for image %v", image.Name) | ||||
| 	} | ||||
|  | ||||
| 	// write the target bucket | ||||
| 	tbkt, err := bkt.CreateBucketIfNotExists(bucketKeyTarget) | ||||
| 	if err != nil { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Stefan Berger
					Stefan Berger