diff --git a/cmd/oras/internal/display/status/discard.go b/cmd/oras/internal/display/status/discard.go index 9fb26420d..32c1bed8d 100644 --- a/cmd/oras/internal/display/status/discard.go +++ b/cmd/oras/internal/display/status/discard.go @@ -40,8 +40,13 @@ func (DiscardHandler) OnEmptyArtifact() error { } // TrackTarget returns a target with status tracking -func (DiscardHandler) TrackTarget(gt oras.GraphTarget) (oras.GraphTarget, error) { - return gt, nil +func (DiscardHandler) TrackTarget(oras.GraphTarget) (oras.GraphTarget, error) { + return nil, nil +} + +// Track implements PullHandler. +func (DiscardHandler) Track(oras.GraphTarget) error { + return nil } // Close implements io.Closer. diff --git a/cmd/oras/internal/display/status/interface.go b/cmd/oras/internal/display/status/interface.go index 60ad9f9ff..704ee86aa 100644 --- a/cmd/oras/internal/display/status/interface.go +++ b/cmd/oras/internal/display/status/interface.go @@ -36,9 +36,8 @@ type AttachHandler PushHandler // PullHandler handles status output for pull command. type PullHandler interface { - // TrackTarget returns a tracked target. - // If no TTY is available, it returns the original target. - TrackTarget(gt oras.GraphTarget) (oras.GraphTarget, error) + // Track tracks status of operations upon gt. + Track(gt oras.GraphTarget) error // OnNodeProcessing is called when processing a manifest. OnNodeProcessing(desc ocispec.Descriptor) error // OnNodeDownloading is called before downloading a node. diff --git a/cmd/oras/internal/display/status/text.go b/cmd/oras/internal/display/status/text.go index 199e97537..79be20715 100644 --- a/cmd/oras/internal/display/status/text.go +++ b/cmd/oras/internal/display/status/text.go @@ -89,15 +89,13 @@ func NewTextAttachHandler(out io.Writer, verbose bool) AttachHandler { // TextPullHandler handles text status output for pull events. type TextPullHandler struct { - fetcher content.Fetcher verbose bool printer *Printer } -// TrackTarget returns a tracked target. -func (ph *TextPullHandler) TrackTarget(gt oras.GraphTarget) (oras.GraphTarget, error) { - ph.fetcher = gt - return gt, nil +// Track implements +func (ph *TextPullHandler) Track(oras.GraphTarget) error { + return nil } // Close implements io.Closer. diff --git a/cmd/oras/internal/display/status/tty.go b/cmd/oras/internal/display/status/tty.go index c137b9e1b..3b61fb05b 100644 --- a/cmd/oras/internal/display/status/tty.go +++ b/cmd/oras/internal/display/status/tty.go @@ -130,12 +130,10 @@ func (ph *TTYPullHandler) Close() error { return ph.tracked.Close() } -// TrackTarget returns a tracked target. -func (ph *TTYPullHandler) TrackTarget(gt oras.GraphTarget) (oras.GraphTarget, error) { +func (ph *TTYPullHandler) Track(gt oras.GraphTarget) error { tracked, err := track.NewTarget(gt, PullPromptDownloading, PullPromptPulled, ph.tty) - if err != nil { - return nil, err + if err == nil { + ph.tracked = tracked } - ph.tracked = tracked - return tracked, nil + return err } diff --git a/cmd/oras/internal/display/status/tty_test.go b/cmd/oras/internal/display/status/tty_test.go index c554a38bd..e80087de7 100644 --- a/cmd/oras/internal/display/status/tty_test.go +++ b/cmd/oras/internal/display/status/tty_test.go @@ -134,19 +134,15 @@ func Test_TTYPullHandler_TrackTarget(t *testing.T) { } defer device.Close() ph := NewTTYPullHandler(device) - got, err := ph.TrackTarget(src) + err = ph.Track(src) if err != nil { t.Fatal(err) } - if got == src { - t.Fatal("GraphTarget not be modified on TTY") - } }) t.Run("invalid TTY", func(t *testing.T) { ph := NewTTYPullHandler(nil) - - if _, err := ph.TrackTarget(src); err == nil { + if err := ph.Track(src); err == nil { t.Fatal("expected error for no tty but got nil") } }) diff --git a/cmd/oras/root/pull.go b/cmd/oras/root/pull.go index a33c8098b..de5e5b4e5 100644 --- a/cmd/oras/root/pull.go +++ b/cmd/oras/root/pull.go @@ -157,7 +157,7 @@ func doPull(ctx context.Context, src oras.ReadOnlyTarget, dst oras.GraphTarget, return ocispec.Descriptor{}, false, err } } - dst, err = statusHandler.TrackTarget(dst) + err = statusHandler.Track(dst) if err != nil { return ocispec.Descriptor{}, false, err }