forked from cloudfoundry/cli
-
Notifications
You must be signed in to change notification settings - Fork 0
/
v3_poll_stage.go
56 lines (52 loc) · 1.31 KB
/
v3_poll_stage.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package shared
import (
"code.cloudfoundry.org/cli/actor/actionerror"
"code.cloudfoundry.org/cli/actor/v3action"
"code.cloudfoundry.org/cli/command"
)
func PollStage(dropletStream <-chan v3action.Droplet, warningsStream <-chan v3action.Warnings, errStream <-chan error, logStream <-chan *v3action.LogMessage, logErrStream <-chan error, ui command.UI) (v3action.Droplet, error) {
var closedBuildStream, closedWarningsStream, closedErrStream bool
var droplet v3action.Droplet
for {
select {
case d, ok := <-dropletStream:
if !ok {
closedBuildStream = true
break
}
droplet = d
case log, ok := <-logStream:
if !ok {
break
}
if log.Staging() {
ui.DisplayLogMessage(log, false)
}
case warnings, ok := <-warningsStream:
if !ok {
closedWarningsStream = true
break
}
ui.DisplayWarnings(warnings)
case logErr, ok := <-logErrStream:
if !ok {
break
}
switch logErr.(type) {
case actionerror.NOAATimeoutError:
ui.DisplayWarning("timeout connecting to log server, no log will be shown")
default:
ui.DisplayWarning(logErr.Error())
}
case err, ok := <-errStream:
if !ok {
closedErrStream = true
break
}
return v3action.Droplet{}, err
}
if closedBuildStream && closedWarningsStream && closedErrStream {
return droplet, nil
}
}
}