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 }