mirror of
https://github.com/cupcakearmy/autorestic.git
synced 2025-09-02 08:40:39 +00:00
go rewrite
This commit is contained in:
52
internal/lock/lock.go
Normal file
52
internal/lock/lock.go
Normal file
@@ -0,0 +1,52 @@
|
||||
package lock
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"path"
|
||||
"sync"
|
||||
|
||||
"github.com/spf13/viper"
|
||||
)
|
||||
|
||||
var lock *viper.Viper
|
||||
var file string
|
||||
var once sync.Once
|
||||
|
||||
func getLock() *viper.Viper {
|
||||
if lock == nil {
|
||||
|
||||
once.Do(func() {
|
||||
lock = viper.New()
|
||||
lock.SetDefault("running", false)
|
||||
p := path.Dir(viper.ConfigFileUsed())
|
||||
file = path.Join(p, ".autorestic.lock.yml")
|
||||
lock.SetConfigFile(file)
|
||||
lock.SetConfigType("yml")
|
||||
lock.ReadInConfig()
|
||||
})
|
||||
}
|
||||
return lock
|
||||
}
|
||||
|
||||
func set(locked bool) error {
|
||||
lock := getLock()
|
||||
if locked {
|
||||
running := lock.GetBool("running")
|
||||
if running {
|
||||
return errors.New("an instance is already running")
|
||||
}
|
||||
}
|
||||
lock.Set("running", locked)
|
||||
if err := lock.WriteConfigAs(file); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func Lock() error {
|
||||
return set(true)
|
||||
}
|
||||
|
||||
func Unlock() error {
|
||||
return set(false)
|
||||
}
|
Reference in New Issue
Block a user