@@ -54,28 +54,23 @@ func (o *OCI) Pull(ctx context.Context, image string, tracker progress.Tracker)
5454 return pull (ctx , o .conf , o .store , image , tracker )
5555}
5656
57+ // Inspect returns the record for a single image. Returns (nil, nil) if not found.
58+ func (o * OCI ) Inspect (ctx context.Context , id string ) (result * types.Image , err error ) {
59+ err = o .store .With (ctx , func (idx * imageIndex ) error {
60+ refs := idx .LookupRefs (id )
61+ if len (refs ) == 0 {
62+ return nil
63+ }
64+ result = images .EntryToImage (idx .Images [refs [0 ]], typ , o .imageSizer )
65+ return nil
66+ })
67+ return
68+ }
69+
5770// List returns all locally stored images.
5871func (o * OCI ) List (ctx context.Context ) (result []* types.Image , err error ) {
5972 err = o .store .With (ctx , func (idx * imageIndex ) error {
60- result = images .ListImages (idx .Images , typ , func (e * imageEntry ) int64 {
61- var total int64
62- for _ , layer := range e .Layers {
63- if info , err := os .Stat (o .conf .BlobPath (layer .Digest .Hex ())); err == nil {
64- total += info .Size ()
65- }
66- }
67- if e .KernelLayer != "" {
68- if info , err := os .Stat (o .conf .KernelPath (e .KernelLayer .Hex ())); err == nil {
69- total += info .Size ()
70- }
71- }
72- if e .InitrdLayer != "" {
73- if info , err := os .Stat (o .conf .InitrdPath (e .InitrdLayer .Hex ())); err == nil {
74- total += info .Size ()
75- }
76- }
77- return total
78- })
73+ result = images .ListImages (idx .Images , typ , o .imageSizer )
7974 return nil
8075 })
8176 return
@@ -136,3 +131,23 @@ func (o *OCI) Config(ctx context.Context, vms []*types.VMConfig) (result [][]*ty
136131 })
137132 return
138133}
134+
135+ func (o * OCI ) imageSizer (e * imageEntry ) int64 {
136+ var total int64
137+ for _ , layer := range e .Layers {
138+ if info , err := os .Stat (o .conf .BlobPath (layer .Digest .Hex ())); err == nil {
139+ total += info .Size ()
140+ }
141+ }
142+ if e .KernelLayer != "" {
143+ if info , err := os .Stat (o .conf .KernelPath (e .KernelLayer .Hex ())); err == nil {
144+ total += info .Size ()
145+ }
146+ }
147+ if e .InitrdLayer != "" {
148+ if info , err := os .Stat (o .conf .InitrdPath (e .InitrdLayer .Hex ())); err == nil {
149+ total += info .Size ()
150+ }
151+ }
152+ return total
153+ }
0 commit comments