github.com/zhouyu0/docker-note@v0.0.0-20190722021225-b8d3825084db/distribution/oci.go (about) 1 package distribution 2 3 import ( 4 "fmt" 5 6 "github.com/docker/distribution" 7 "github.com/docker/distribution/manifest/manifestlist" 8 "github.com/docker/distribution/manifest/schema2" 9 digest "github.com/opencontainers/go-digest" 10 ocispec "github.com/opencontainers/image-spec/specs-go/v1" 11 ) 12 13 func init() { 14 // TODO: Remove this registration if distribution is included with OCI support 15 16 ocischemaFunc := func(b []byte) (distribution.Manifest, distribution.Descriptor, error) { 17 m := new(schema2.DeserializedManifest) 18 err := m.UnmarshalJSON(b) 19 if err != nil { 20 return nil, distribution.Descriptor{}, err 21 } 22 23 dgst := digest.FromBytes(b) 24 return m, distribution.Descriptor{Digest: dgst, Size: int64(len(b)), MediaType: ocispec.MediaTypeImageManifest}, err 25 } 26 err := distribution.RegisterManifestSchema(ocispec.MediaTypeImageManifest, ocischemaFunc) 27 if err != nil { 28 panic(fmt.Sprintf("Unable to register manifest: %s", err)) 29 } 30 31 manifestListFunc := func(b []byte) (distribution.Manifest, distribution.Descriptor, error) { 32 m := new(manifestlist.DeserializedManifestList) 33 err := m.UnmarshalJSON(b) 34 if err != nil { 35 return nil, distribution.Descriptor{}, err 36 } 37 38 dgst := digest.FromBytes(b) 39 return m, distribution.Descriptor{Digest: dgst, Size: int64(len(b)), MediaType: ocispec.MediaTypeImageIndex}, err 40 } 41 err = distribution.RegisterManifestSchema(ocispec.MediaTypeImageIndex, manifestListFunc) 42 if err != nil { 43 panic(fmt.Sprintf("Unable to register manifest: %s", err)) 44 } 45 }