11package phase
22
33import (
4- "fmt"
54 "qp/internal/config"
6- out "qp/internal/display"
7- "qp/internal/pipeline/meta"
85 "qp/internal/pkgdata"
96 "sync"
107)
118
12- type (
13- ProgressReporter = meta.ProgressReporter
14- ProgressMessage = meta.ProgressMessage
15- PkgInfo = pkgdata.PkgInfo
16- )
17-
189type Step func (
1910 cfg * config.Config ,
20- packages []* PkgInfo ,
21- progressReporter meta.ProgressReporter ,
22- ) ([]* PkgInfo , error )
11+ pkgs []* pkgdata.PkgInfo ,
12+ ) ([]* pkgdata.PkgInfo , error )
2313
2414type PipelinePhase struct {
2515 name string
@@ -28,75 +18,17 @@ type PipelinePhase struct {
2818}
2919
3020func NewPhase (name string , step Step , wg * sync.WaitGroup ) PipelinePhase {
31- return PipelinePhase {
32- name ,
33- step ,
34- wg ,
35- }
21+ return PipelinePhase {name , step , wg }
3622}
3723
3824func (phase PipelinePhase ) Run (
3925 cfg * config.Config ,
40- packages []* PkgInfo ,
41- isInteractive bool ,
42- ) ([]* PkgInfo , error ) {
43- progressChan := phase .startProgress (isInteractive )
44- outputPackages , err := phase .step (
45- cfg ,
46- packages ,
47- phase .reportProgress (progressChan ),
48- )
49- phase .stopProgress (progressChan )
50-
26+ pkgs []* pkgdata.PkgInfo ,
27+ ) ([]* pkgdata.PkgInfo , error ) {
28+ outputPackages , err := phase .step (cfg , pkgs )
5129 if err != nil {
5230 return nil , err
5331 }
5432
5533 return outputPackages , nil
5634}
57-
58- func (phase PipelinePhase ) reportProgress (progressChan chan ProgressMessage ) ProgressReporter {
59- if progressChan == nil {
60- return ProgressReporter (func (_ int , _ int , _ string ) {})
61- }
62-
63- return ProgressReporter (func (current int , total int , phaseName string ) {
64- progressChan <- ProgressMessage {
65- Phase : phaseName ,
66- Progress : (current * 100 ) / total ,
67- Description : fmt .Sprintf (("%s is in progress..." ), phase .name ),
68- }
69- })
70- }
71-
72- func (phase PipelinePhase ) startProgress (isInteractive bool ) chan ProgressMessage {
73- if ! isInteractive {
74- return nil
75- }
76-
77- progressChan := make (chan ProgressMessage )
78- phase .wg .Add (1 )
79-
80- go func () {
81- defer phase .wg .Done ()
82- phase .displayProgress (progressChan )
83- }()
84-
85- return progressChan
86- }
87-
88- func (phase PipelinePhase ) stopProgress (progressChan chan ProgressMessage ) {
89- if progressChan != nil {
90- close (progressChan )
91- phase .wg .Wait ()
92- out .ClearProgress ()
93- }
94- }
95-
96- func (phase PipelinePhase ) displayProgress (progressChan chan ProgressMessage ) {
97- for msg := range progressChan {
98- out .PrintProgress (msg .Phase , msg .Progress , msg .Description )
99- }
100-
101- out .ClearProgress ()
102- }
0 commit comments