github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/internal/tiltfile/watch/watch.go (about)

     1  package watch
     2  
     3  import (
     4  	"go.starlark.net/starlark"
     5  
     6  	"github.com/tilt-dev/tilt/internal/tiltfile/starkit"
     7  	"github.com/tilt-dev/tilt/internal/tiltfile/value"
     8  	"github.com/tilt-dev/tilt/pkg/model"
     9  )
    10  
    11  type Plugin struct {
    12  }
    13  
    14  func NewPlugin() Plugin {
    15  	return Plugin{}
    16  }
    17  
    18  func (e Plugin) NewState() interface{} {
    19  	return model.WatchSettings{}
    20  }
    21  
    22  func (e Plugin) OnStart(env *starkit.Environment) error {
    23  	return env.AddBuiltin("watch_settings", e.setWatchSettings)
    24  }
    25  
    26  func (e Plugin) setWatchSettings(thread *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
    27  	err := starkit.SetState(thread, func(settings model.WatchSettings) (model.WatchSettings, error) {
    28  		var ignores value.StringOrStringList
    29  		if err := starkit.UnpackArgs(thread, fn.Name(), args, kwargs,
    30  			"ignore?", &ignores,
    31  		); err != nil {
    32  			return settings, err
    33  		}
    34  
    35  		if len(ignores.Values) != 0 {
    36  			settings.Ignores = append(settings.Ignores, model.Dockerignore{
    37  				LocalPath: starkit.AbsWorkingDir(thread),
    38  				Patterns:  ignores.Values,
    39  				Source:    "watch_settings()",
    40  			})
    41  		}
    42  
    43  		return settings, nil
    44  	})
    45  
    46  	return starlark.None, err
    47  }
    48  
    49  var _ starkit.StatefulPlugin = Plugin{}
    50  
    51  func MustState(model starkit.Model) model.WatchSettings {
    52  	state, err := GetState(model)
    53  	if err != nil {
    54  		panic(err)
    55  	}
    56  	return state
    57  }
    58  
    59  func GetState(m starkit.Model) (model.WatchSettings, error) {
    60  	var state model.WatchSettings
    61  	err := m.Load(&state)
    62  	return state, err
    63  }