aboutsummaryrefslogtreecommitdiffsponsor
diff options
context:
space:
mode:
-rw-r--r--cmd/mirror/main.go5
-rw-r--r--internal/service/config.go41
-rw-r--r--internal/service/service.go3
3 files changed, 23 insertions, 26 deletions
diff --git a/cmd/mirror/main.go b/cmd/mirror/main.go
index 4d2e712..8276a10 100644
--- a/cmd/mirror/main.go
+++ b/cmd/mirror/main.go
@@ -32,11 +32,10 @@ func exitOnError(err error) {
func main() {
flags := ParseFlags()
- var cfg service.Config
- err := service.ApplyFileConfig(&cfg, flags.Config)
+ cfg, err := service.ReadConfig(flags.Config)
exitOnError(err)
- srv, err := service.NewService(&cfg)
+ srv, err := service.NewService(cfg)
exitOnError(err)
err = srv.Run()
diff --git a/internal/service/config.go b/internal/service/config.go
index 0c42755..27368b3 100644
--- a/internal/service/config.go
+++ b/internal/service/config.go
@@ -49,36 +49,33 @@ var DefaultConfig = Config{
},
}
-func (c *Config) Apply(src Config) {
- if c.MaxInterval.Duration == 0 && src.MaxInterval.Duration != 0 {
- c.MaxInterval = src.MaxInterval
- }
- if c.MinInterval.Duration == 0 && src.MinInterval.Duration != 0 {
- c.MinInterval = src.MinInterval
- }
- if len(c.Mirrors) == 0 {
- c.Mirrors = src.Mirrors
- }
-}
-
-// ApplyFileConfig loads the configuration described by the given yaml file.
-func ApplyFileConfig(cfg *Config, filePath string) error {
- var ret Config
+func ReadConfig(fp string) (*Config, error) {
+ var config Config
- f, err := os.Open(filePath)
+ f, err := os.Open(fp)
if os.IsNotExist(err) {
- return nil
+ return nil, nil
} else if err != nil {
- return err
+ return nil, err
}
defer f.Close()
- _, err = toml.NewDecoder(f).Decode(&ret)
+ _, err = toml.NewDecoder(f).Decode(&config)
if err != nil {
- return fmt.Errorf("loading configuration file: %w", err)
+ return nil, fmt.Errorf("loading configuration file: %w", err)
}
- cfg.Apply(ret)
+ return &config, nil
+}
- return nil
+func (c *Config) Merge(src *Config) {
+ if c.MaxInterval.Duration == 0 && src.MaxInterval.Duration != 0 {
+ c.MaxInterval = src.MaxInterval
+ }
+ if c.MinInterval.Duration == 0 && src.MinInterval.Duration != 0 {
+ c.MinInterval = src.MinInterval
+ }
+ if len(c.Mirrors) == 0 {
+ c.Mirrors = src.Mirrors
+ }
}
diff --git a/internal/service/service.go b/internal/service/service.go
index 9fbacfb..637a1cf 100644
--- a/internal/service/service.go
+++ b/internal/service/service.go
@@ -31,7 +31,8 @@ type Service struct {
}
func NewService(cfg *Config) (*Service, error) {
- cfg.Apply(DefaultConfig)
+ // Apply defaults
+ cfg.Merge(&DefaultConfig)
for _, cmd := range requiredCommands {
if err := internal.RequireCommand(cmd); err != nil {