(ctx context.Context, ig transfer.ImageGetter, p transfer.ImagePusher, tops *transfer.Config)
| 33 | ) |
| 34 | |
| 35 | func (ts *localTransferService) push(ctx context.Context, ig transfer.ImageGetter, p transfer.ImagePusher, tops *transfer.Config) error { |
| 36 | matcher := platforms.All |
| 37 | if ipg, ok := ig.(transfer.ImagePlatformsGetter); ok { |
| 38 | if ps := ipg.Platforms(); len(ps) > 0 { |
| 39 | matcher = platforms.Any(ps...) |
| 40 | } |
| 41 | } |
| 42 | |
| 43 | img, err := ig.Get(ctx, ts.images) |
| 44 | if err != nil { |
| 45 | return err |
| 46 | } |
| 47 | |
| 48 | if tops.Progress != nil { |
| 49 | tops.Progress(transfer.Progress{ |
| 50 | Event: fmt.Sprintf("Pushing to %s", p), |
| 51 | }) |
| 52 | tops.Progress(transfer.Progress{ |
| 53 | Event: "pushing content", |
| 54 | Name: img.Name, |
| 55 | //Digest: img.Target.Digest.String(), |
| 56 | Desc: &img.Target, |
| 57 | }) |
| 58 | } |
| 59 | |
| 60 | var pusher remotes.Pusher |
| 61 | pusher, err = p.Pusher(ctx, img.Target) |
| 62 | if err != nil { |
| 63 | return err |
| 64 | } |
| 65 | |
| 66 | var wrapper func(images.Handler) images.Handler |
| 67 | |
| 68 | ctx, cancel := context.WithCancel(ctx) |
| 69 | if tops.Progress != nil { |
| 70 | progressTracker := NewProgressTracker(img.Name, "uploading") //Pass in first name as root |
| 71 | |
| 72 | p := newProgressPusher(pusher, progressTracker) |
| 73 | go progressTracker.HandleProgress(ctx, tops.Progress, p) |
| 74 | defer progressTracker.Wait() |
| 75 | wrapper = p.WrapHandler |
| 76 | pusher = p |
| 77 | } |
| 78 | defer cancel() |
| 79 | |
| 80 | // TODO: Add handler to track parents |
| 81 | /* |
| 82 | // TODO: Add handlers |
| 83 | if len(pushCtx.BaseHandlers) > 0 { |
| 84 | wrapper = func(h images.Handler) images.Handler { |
| 85 | h = images.Handlers(append(pushCtx.BaseHandlers, h)...) |
| 86 | if pushCtx.HandlerWrapper != nil { |
| 87 | h = pushCtx.HandlerWrapper(h) |
| 88 | } |
| 89 | return h |
| 90 | } |
| 91 | } else if pushCtx.HandlerWrapper != nil { |
| 92 | wrapper = pushCtx.HandlerWrapper |
no test coverage detected