code: func NewLocker(
  	ctx context.Context,
  	timeout time.Duration,
  	ui cli.Ui,
  	color *colorstring.Colorize) Locker {
  
  	l := &locker{
  		ctx:     ctx,
  		timeout: timeout,
  		ui:      ui,
  		color:   color,
  	}
  	return l
  }
docs: // Create a new Locker.
  // This Locker uses state.LockWithContext to retry the lock until the provided
  // timeout is reached, or the context is canceled. Lock progress will be be
  // reported to the user through the provided UI.