package metadata import ( "github.com/docker/docker/image/v1" "github.com/docker/docker/layer" "github.com/pkg/errors" ) // V1IDService maps v1 IDs to layers on disk. type V1IDService struct { store Store } // NewV1IDService creates a new V1 ID mapping service. func NewV1IDService(store Store) *V1IDService { return &V1IDService{ store: store, } } // namespace returns the namespace used by this service. func (idserv *V1IDService) namespace() string { return "v1id" } // Get finds a layer by its V1 ID. func (idserv *V1IDService) Get(v1ID, registry string) (layer.DiffID, error) { if idserv.store == nil { return "", errors.New("no v1IDService storage") } if err := v1.ValidateID(v1ID); err != nil { return layer.DiffID(""), err } idBytes, err := idserv.store.Get(idserv.namespace(), registry+","+v1ID) if err != nil { return layer.DiffID(""), err } return layer.DiffID(idBytes), nil } // Set associates an image with a V1 ID. func (idserv *V1IDService) Set(v1ID, registry string, id layer.DiffID) error { if idserv.store == nil { return nil } if err := v1.ValidateID(v1ID); err != nil { return err } return idserv.store.Set(idserv.namespace(), registry+","+v1ID, []byte(id)) }