feat(config): allow specifying lockfile

This commit is contained in:
Boris Bera 2024-11-10 13:45:24 -05:00
parent 8de8d0070e
commit 0fdf9c77ae
No known key found for this signature in database
GPG Key ID: 97AF3BB8EEBDF180
2 changed files with 25 additions and 10 deletions

View File

@ -23,6 +23,7 @@ type Options map[string]OptionMap
type Config struct {
Version string `mapstructure:"version" yaml:"version"`
Lockfile string `mapstructure:"lockfile,omitempty" yaml:"lockfile,omitempty"`
Extras interface{} `mapstructure:"extras" yaml:"extras"`
Locations map[string]Location `mapstructure:"locations" yaml:"locations"`
Backends map[string]Backend `mapstructure:"backends" yaml:"backends"`

View File

@ -3,6 +3,7 @@ package internal
import (
"os"
"path"
"path/filepath"
"sync"
"github.com/cupcakearmy/autorestic/internal/colors"
@ -18,20 +19,33 @@ const (
RUNNING = "running"
)
// getLockfilePath returns the path to the lockfile. If flags.LOCKFILE_PATH is
// set, its value is used, otherwise the path is generated relative to the
// config file.
// getLockfilePath returns the path to the lockfile. The path for the lockfile
// can be sources from multiple places If flags.LOCKFILE_PATH is set, its value
// is used; if the config has the `lockfile` option set, its value is used;
// otherwise the path is generated relative to the config file.
func getLockfilePath() string {
if flags.LOCKFILE_PATH != "" {
return flags.LOCKFILE_PATH
} else {
p := viper.ConfigFileUsed()
if p == "" {
colors.Error.Println("cannot lock before reading config location")
os.Exit(1)
abs, err := filepath.Abs(flags.LOCKFILE_PATH)
if err != nil {
return flags.LOCKFILE_PATH
}
return path.Join(path.Dir(p), ".autorestic.lock.yml")
return abs
}
if lockfile := GetConfig().Lockfile; lockfile != "" {
abs, err := filepath.Abs(lockfile)
if err != nil {
return lockfile
}
return abs
}
p := viper.ConfigFileUsed()
if p == "" {
colors.Error.Println("cannot lock before reading config location")
os.Exit(1)
}
return path.Join(path.Dir(p), ".autorestic.lock.yml")
}
func getLock() *viper.Viper {