github.com/lukasheimann/cloudfoundrycli@v7.1.0+incompatible/command/v6/shared/v3_poll_stage.go (about) 1 package shared 2 3 import ( 4 "code.cloudfoundry.org/cli/actor/actionerror" 5 "code.cloudfoundry.org/cli/actor/v3action" 6 "code.cloudfoundry.org/cli/command" 7 ) 8 9 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) { 10 var closedBuildStream, closedWarningsStream, closedErrStream bool 11 var droplet v3action.Droplet 12 13 for { 14 select { 15 case d, ok := <-dropletStream: 16 if !ok { 17 closedBuildStream = true 18 break 19 } 20 droplet = d 21 case log, ok := <-logStream: 22 if !ok { 23 break 24 } 25 if log.Staging() { 26 ui.DisplayLogMessage(log, false) 27 } 28 case warnings, ok := <-warningsStream: 29 if !ok { 30 closedWarningsStream = true 31 break 32 } 33 ui.DisplayWarnings(warnings) 34 case logErr, ok := <-logErrStream: 35 if !ok { 36 break 37 } 38 39 switch logErr.(type) { 40 case actionerror.NOAATimeoutError: 41 ui.DisplayWarning("timeout connecting to log server, no log will be shown") 42 default: 43 ui.DisplayWarning(logErr.Error()) 44 } 45 case err, ok := <-errStream: 46 if !ok { 47 closedErrStream = true 48 break 49 } 50 return v3action.Droplet{}, err 51 } 52 if closedBuildStream && closedWarningsStream && closedErrStream { 53 return droplet, nil 54 } 55 } 56 }