github.com/cloudfoundry/cli@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  }