github.com/tilt-dev/tilt@v0.36.0/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 defer func() { 28 _ = lockfile.Close() 29 }() 30 err = lock(lockfile, lt) 31 if err != nil { 32 return err 33 } 34 defer func() { 35 _ = Unlock(lockfile) 36 }() 37 return action() 38 }