mirror of
https://github.com/restic/restic.git
synced 2024-08-30 08:07:23 +02:00
In order to change the backend initialization in `global.go` to be able to generically call cfg.ApplyEnvironment() for supported backends, the `interface{}` returned by `ParseConfig` must contain a pointer to the configuration. An alternative would be to use reflection to convert the type from `interface{}(Config)` to `interface{}(*Config)` (from value to pointer type). However, this would just complicate the type mess further.
39 lines
890 B
Go
39 lines
890 B
Go
package local
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/restic/restic/internal/errors"
|
|
"github.com/restic/restic/internal/options"
|
|
)
|
|
|
|
// Config holds all information needed to open a local repository.
|
|
type Config struct {
|
|
Path string
|
|
Layout string `option:"layout" help:"use this backend directory layout (default: auto-detect)"`
|
|
|
|
Connections uint `option:"connections" help:"set a limit for the number of concurrent operations (default: 2)"`
|
|
}
|
|
|
|
// NewConfig returns a new config with default options applied.
|
|
func NewConfig() Config {
|
|
return Config{
|
|
Connections: 2,
|
|
}
|
|
}
|
|
|
|
func init() {
|
|
options.Register("local", Config{})
|
|
}
|
|
|
|
// ParseConfig parses a local backend config.
|
|
func ParseConfig(s string) (*Config, error) {
|
|
if !strings.HasPrefix(s, "local:") {
|
|
return nil, errors.New(`invalid format, prefix "local" not found`)
|
|
}
|
|
|
|
cfg := NewConfig()
|
|
cfg.Path = s[6:]
|
|
return &cfg, nil
|
|
}
|