github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/internal/filelock/with_lock.go (about) 1 package filelock 2 3 import ( 4 "os" 5 6 "k8s.io/client-go/tools/clientcmd" 7 ) 8 9 func init() { 10 // We're using our own file locking mechanism 11 clientcmd.UseModifyConfigLock = false 12 } 13 14 func WithLock(configAccess clientcmd.ConfigAccess, action func() error) error { 15 return withLock(configAccess.GetDefaultFilename()+".lock", writeLock, action) 16 } 17 18 func WithRLock(configAccess clientcmd.ConfigAccess, action func() error) error { 19 return withLock(configAccess.GetDefaultFilename()+".lock", readLock, action) 20 } 21 22 func withLock(filename string, lt lockType, action func() error) error { 23 lockfile, err := os.Create(filename) 24 if err != nil { 25 return err 26 } 27 err = lock(lockfile, lt) 28 if err != nil { 29 return err 30 } 31 defer func() { _ = Unlock(lockfile) }() 32 return action() 33 }