mirror of
https://github.com/project-zot/zot.git
synced 2024-12-23 22:27:35 -05:00
612a12e5a8
Signed-off-by: Petu Eusebiu <peusebiu@cisco.com>
70 lines
1.7 KiB
Go
70 lines
1.7 KiB
Go
//go:build sync
|
|
// +build sync
|
|
|
|
package sync
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path"
|
|
|
|
"github.com/containers/image/v5/oci/layout"
|
|
"github.com/containers/image/v5/types"
|
|
"github.com/gofrs/uuid"
|
|
|
|
"zotregistry.io/zot/pkg/storage"
|
|
storageConstants "zotregistry.io/zot/pkg/storage/constants"
|
|
"zotregistry.io/zot/pkg/test/inject"
|
|
)
|
|
|
|
type OciLayoutStorageImpl struct {
|
|
storeController storage.StoreController
|
|
context *types.SystemContext
|
|
}
|
|
|
|
func NewOciLayoutStorage(storeController storage.StoreController) OciLayoutStorage {
|
|
context := &types.SystemContext{}
|
|
// preserve compression
|
|
context.OCIAcceptUncompressedLayers = true
|
|
|
|
return OciLayoutStorageImpl{
|
|
storeController: storeController,
|
|
context: context,
|
|
}
|
|
}
|
|
|
|
func (oci OciLayoutStorageImpl) GetContext() *types.SystemContext {
|
|
return oci.context
|
|
}
|
|
|
|
func (oci OciLayoutStorageImpl) GetImageReference(repo string, reference string) (types.ImageReference, error) {
|
|
localImageStore := oci.storeController.GetImageStore(repo)
|
|
tempSyncPath := path.Join(localImageStore.RootDir(), repo, SyncBlobUploadDir)
|
|
|
|
// create session folder
|
|
uuid, err := uuid.NewV4()
|
|
// hard to reach test case, injected error, see pkg/test/dev.go
|
|
if err := inject.Error(err); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
sessionRepoPath := path.Join(tempSyncPath, uuid.String())
|
|
|
|
localRepo := path.Join(sessionRepoPath, repo)
|
|
if err := os.MkdirAll(localRepo, storageConstants.DefaultDirPerms); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
_, refIsDigest := parseReference(reference)
|
|
|
|
if !refIsDigest {
|
|
localRepo = fmt.Sprintf("%s:%s", localRepo, reference)
|
|
}
|
|
|
|
localImageRef, err := layout.ParseReference(localRepo)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return localImageRef, nil
|
|
}
|