lxc/utils/progress.go
func (p *ProgressRenderer) Update(status string) {
	// Wait if needed
	timeout := p.wait.Sub(time.Now())
	if timeout.Seconds() > 0 {
		time.Sleep(timeout)
	}

	// Acquire rendering lock
	p.lock.Lock()
	defer p.lock.Unlock()

	// Check if we're already done
	if p.done {
		return
	}

	// Handle quiet mode
	if p.Quiet {
		return
	}

	// Skip status updates when not dealing with a terminal
	if p.terminal == 0 {
		if !termios.IsTerminal(int(os.Stdout.Fd())) {
			p.terminal = -1
		}

		p.terminal = 1
	}

	if p.terminal != 1 {
		return
	}

	// Print the new message
	msg := "%s"
	if p.Format != "" {
		msg = p.Format
	}

	msg = fmt.Sprintf(msg, status)

	// Truncate msg to terminal length
	msg = "\r" + p.truncate(msg)

	// Don't print if empty and never printed
	if len(msg) == 1 && p.maxLength == 0 {
		return
	}

	if len(msg) > p.maxLength {
		p.maxLength = len(msg)
	} else {
		fmt.Printf("\r%s", strings.Repeat(" ", p.maxLength))
	}

	fmt.Print(msg)
}
func (p *ProgressRenderer) Update(status string) {
	// Wait if needed
	timeout := p.wait.Sub(time.Now())
	if timeout.Seconds() > 0 {
		time.Sleep(timeout)
	}

	// Acquire rendering lock
	p.lock.Lock()
	defer p.lock.Unlock()

	// Check if we're already done
	if p.done {
		return
	}

	// Handle quiet mode
	if p.Quiet {
		return
	}

	// Skip status updates when not dealing with a terminal
	if p.terminal == 0 {
		if !termios.IsTerminal(int(os.Stdout.Fd())) {
			p.terminal = -1
		}

		p.terminal = 1
	}

	if p.terminal != 1 {
		return
	}

	// Print the new message
	msg := "%s"
	if p.Format != "" {
		msg = p.Format
	}

	msg = fmt.Sprintf(msg, status)

	// Truncate msg to terminal length
	msg = "\r" + p.truncate(msg)

	// Don't print if empty and never printed
	if len(msg) == 1 && p.maxLength == 0 {
		return
	}

	if len(msg) > p.maxLength {
		p.maxLength = len(msg)
	} else {
		fmt.Printf("\r%s", strings.Repeat(" ", p.maxLength))
	}

	fmt.Print(msg)
}
func ( p * ProgressRenderer ) Update ( status string ) { // Wait if needed timeout := p . wait . Sub ( time . Now ( ) ) if timeout . Seconds ( ) > 0 { time . Sleep ( timeout ) } // Acquire rendering lock p . lock . Lock ( ) defer p . lock . Unlock ( ) // Check if we're already done if p . done { return } // Handle quiet mode if p . Quiet { return } // Skip status updates when not dealing with a terminal if p . terminal == 0 { if ! termios . IsTerminal ( int ( os . Stdout . Fd ( ) ) ) { p . terminal = - 1 } p . terminal = 1 } if p . terminal != 1 { return } // Print the new message msg := " " if p . Format != " " { msg = p . Format } msg = fmt . Sprintf ( msg , status ) // Truncate msg to terminal length msg = " \r " + p . truncate ( msg ) // Don't print if empty and never printed if len ( msg ) == 1 && p . maxLength == 0 { return } if len ( msg ) > p . maxLength { p . maxLength = len ( msg ) } else { fmt . Printf ( " \r " , strings . Repeat ( " " , p . maxLength ) ) } fmt . Print ( msg ) }
// Update changes the status message to the provided string
Update changes the status message to the provided string