experimental/manifests.go (19 lines of code) (raw):

package experimental import ( "sync" ) type manifestsData map[digest]*manifestData var manifests manifestsData = make(map[digest]*manifestData) var manifestsLock sync.Mutex func (m manifestsData) get(digest digest, blobs blobsData) (*manifestData, error) { manifestsLock.Lock() manifest := m[digest] if manifest == nil { manifest = &manifestData{ digest: digest, } m[digest] = manifest } manifestsLock.Unlock() return manifest, manifest.ensureLoaded(blobs) }