@@ -2,14 +2,25 @@ package client
22
33import (
44 "context"
5+ "fmt"
56 "github.com/distribution/reference"
67 "github.com/docker/docker/api/types"
78 "github.com/docker/docker/api/types/registry"
9+ "github.com/opencontainers/go-digest"
810 "github.com/silenium-dev/docker-wrapper/pkg/client/pull"
911 "github.com/silenium-dev/docker-wrapper/pkg/client/pull/events"
12+ "github.com/silenium-dev/docker-wrapper/pkg/client/pull/state"
1013)
1114
12- func (c * Client ) Pull (ctx context.Context , ref reference.Named ) (chan events.PullEvent , error ) {
15+ func (c * Client ) PullWithState (ctx context.Context , ref reference.Named ) (chan state.Pull , error ) {
16+ eventChan , err := c .PullWithEvents (ctx , ref )
17+ if err != nil {
18+ return nil , err
19+ }
20+ return pull .StateFromStream (ctx , ref , eventChan ), nil
21+ }
22+
23+ func (c * Client ) PullWithEvents (ctx context.Context , ref reference.Named ) (chan events.PullEvent , error ) {
1324 var encodedAuth string
1425 var err error
1526 if c .authProvider != nil {
@@ -24,3 +35,22 @@ func (c *Client) Pull(ctx context.Context, ref reference.Named) (chan events.Pul
2435 }
2536 return pull .ParseStream (ctx , reader ), nil
2637}
38+
39+ func (c * Client ) Pull (ctx context.Context , ref reference.Named ) (digest.Digest , error ) {
40+ eventChan , err := c .PullWithEvents (ctx , ref )
41+ if err != nil {
42+ return "" , err
43+ }
44+
45+ var digestEvent * events.Digest
46+ for event := range eventChan {
47+ if _ , ok := event .(* events.Digest ); digestEvent == nil && ok {
48+ digestEvent = event .(* events.Digest )
49+ }
50+ }
51+ if digestEvent == nil {
52+ return "" , fmt .Errorf ("no digest event received" )
53+ }
54+
55+ return digestEvent .Digest , nil
56+ }
0 commit comments