github.com/uriddle/docker@v0.0.0-20210926094723-4072e6aeb013/distribution/metadata/v1_id_service.go (about)

     1  package metadata
     2  
     3  import (
     4  	"github.com/docker/docker/image/v1"
     5  	"github.com/docker/docker/layer"
     6  )
     7  
     8  // V1IDService maps v1 IDs to layers on disk.
     9  type V1IDService struct {
    10  	store Store
    11  }
    12  
    13  // NewV1IDService creates a new V1 ID mapping service.
    14  func NewV1IDService(store Store) *V1IDService {
    15  	return &V1IDService{
    16  		store: store,
    17  	}
    18  }
    19  
    20  // namespace returns the namespace used by this service.
    21  func (idserv *V1IDService) namespace() string {
    22  	return "v1id"
    23  }
    24  
    25  // Get finds a layer by its V1 ID.
    26  func (idserv *V1IDService) Get(v1ID, registry string) (layer.DiffID, error) {
    27  	if err := v1.ValidateID(v1ID); err != nil {
    28  		return layer.DiffID(""), err
    29  	}
    30  
    31  	idBytes, err := idserv.store.Get(idserv.namespace(), registry+","+v1ID)
    32  	if err != nil {
    33  		return layer.DiffID(""), err
    34  	}
    35  	return layer.DiffID(idBytes), nil
    36  }
    37  
    38  // Set associates an image with a V1 ID.
    39  func (idserv *V1IDService) Set(v1ID, registry string, id layer.DiffID) error {
    40  	if err := v1.ValidateID(v1ID); err != nil {
    41  		return err
    42  	}
    43  	return idserv.store.Set(idserv.namespace(), registry+","+v1ID, []byte(id))
    44  }