func generateStoreLockName() string {
	h := sha256.New()
	_, _ = h.Write([]byte(JujuControllersPath()))
	fullHash := fmt.Sprintf("%x", h.Sum(nil))
	return fmt.Sprintf("store-lock-%x", fullHash[:8])
}
// generateStoreLockName uses part of the hash of the controller path as the
// name of the lock. This is to avoid contention between multiple users on a
// single machine with different controller files, but also helps with
// contention in tests.
generateStoreLockName uses part of the hash of the controller path as the
name of the lock. This is to avoid contention between multiple users on a
single machine with different controller files, but also helps with
contention in tests.
// generateStoreLockName uses part of the hash of the controller path as the // name of the lock . This is to avoid contention between multiple users on a // single machine with different controller files but also helps with // contention in tests .
func generateStoreLockName() string {
	h := sha256.New()
	_, _ = h.Write([]byte(JujuControllersPath()))
	fullHash := fmt.Sprintf("%x", h.Sum(nil))
	return fmt.Sprintf("store-lock-%x", fullHash[:8])
}
func generateStoreLockName ( ) string { h := sha256 . New ( ) _ , _ = h . Write ( [ ] byte ( JujuControllersPath ( ) ) ) fullHash := fmt . Sprintf ( " " , h . Sum ( nil ) ) return fmt . Sprintf ( " " , fullHash [ : 8 ] ) }
generateStoreLockName uses part of the hash of the controller path as the
name of the lock.
generateStoreLockName uses part of the hash of the controller path as the name of the lock .