Skip to content

Commit 0a4e476

Browse files
committed
refactor: Create tracked reader interface
Signed-off-by: Terry Howe <[email protected]>
1 parent e0f4066 commit 0a4e476

File tree

2 files changed

+17
-15
lines changed

2 files changed

+17
-15
lines changed

cmd/oras/internal/display/status/track/reader.go

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,14 @@ import (
2323
"oras.land/oras/cmd/oras/internal/display/status/progress"
2424
)
2525

26+
type Reader interface {
27+
io.Reader
28+
Done()
29+
Close()
30+
Start()
31+
StopManager()
32+
}
33+
2634
type reader struct {
2735
base io.Reader
2836
offset int64
@@ -34,28 +42,20 @@ type reader struct {
3442
}
3543

3644
// NewReader returns a new reader with tracked progress.
37-
func NewReader(r io.Reader, descriptor ocispec.Descriptor, actionPrompt string, donePrompt string, tty *os.File) (*reader, error) {
45+
func NewReader(r io.Reader, descriptor ocispec.Descriptor, actionPrompt string, donePrompt string, tty *os.File) (Reader, error) {
3846
manager, err := progress.NewManager(tty)
3947
if err != nil {
4048
return nil, err
4149
}
42-
return managedReader(r, descriptor, manager, actionPrompt, donePrompt)
43-
}
44-
45-
func managedReader(r io.Reader, descriptor ocispec.Descriptor, manager progress.Manager, actionPrompt string, donePrompt string) (*reader, error) {
46-
messenger, err := manager.Add()
47-
if err != nil {
48-
return nil, err
49-
}
50-
51-
return &reader{
50+
tr := reader{
5251
base: r,
5352
descriptor: descriptor,
5453
actionPrompt: actionPrompt,
5554
donePrompt: donePrompt,
5655
manager: manager,
57-
messenger: messenger,
58-
}, nil
56+
}
57+
tr.messenger, err = manager.Add()
58+
return &tr, err
5959
}
6060

6161
// StopManager stops the messenger channel and related manager.

cmd/oras/internal/display/status/track/target.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ type GraphTarget interface {
3535

3636
type graphTarget struct {
3737
oras.GraphTarget
38+
tty *os.File
3839
manager progress.Manager
3940
actionPrompt string
4041
donePrompt string
@@ -52,6 +53,7 @@ func NewTarget(t oras.GraphTarget, actionPrompt, donePrompt string, tty *os.File
5253
}
5354
gt := &graphTarget{
5455
GraphTarget: t,
56+
tty: tty,
5557
manager: manager,
5658
actionPrompt: actionPrompt,
5759
donePrompt: donePrompt,
@@ -74,7 +76,7 @@ func (t *graphTarget) Mount(ctx context.Context, desc ocispec.Descriptor, fromRe
7476

7577
// Push pushes the content to the base oras.GraphTarget with tracking.
7678
func (t *graphTarget) Push(ctx context.Context, expected ocispec.Descriptor, content io.Reader) error {
77-
r, err := managedReader(content, expected, t.manager, t.actionPrompt, t.donePrompt)
79+
r, err := NewReader(content, expected, t.actionPrompt, t.donePrompt, t.tty)
7880
if err != nil {
7981
return err
8082
}
@@ -89,7 +91,7 @@ func (t *graphTarget) Push(ctx context.Context, expected ocispec.Descriptor, con
8991

9092
// PushReference pushes the content to the base oras.GraphTarget with tracking.
9193
func (rgt *referenceGraphTarget) PushReference(ctx context.Context, expected ocispec.Descriptor, content io.Reader, reference string) error {
92-
r, err := managedReader(content, expected, rgt.manager, rgt.actionPrompt, rgt.donePrompt)
94+
r, err := NewReader(content, expected, rgt.actionPrompt, rgt.donePrompt, rgt.tty)
9395
if err != nil {
9496
return err
9597
}

0 commit comments

Comments
 (0)