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  }