diff --git a/application/application.go b/application/application.go index 59550a4..53d631f 100644 --- a/application/application.go +++ b/application/application.go @@ -50,8 +50,10 @@ func (a *Application) Start(ctx context.Context, wg *sync.WaitGroup) error { org = org.WithOverwrite() } - if err := org.FullSync(ctx); err != nil { - return fmt.Errorf("full sync: %w", err) + if !a.config.SkipFullSync { + if err := org.FullSync(ctx); err != nil { + return fmt.Errorf("full sync: %w", err) + } } if a.config.Watch { diff --git a/application/config.go b/application/config.go index cd629c0..6a66c25 100644 --- a/application/config.go +++ b/application/config.go @@ -15,13 +15,14 @@ const ( ) type Config struct { - SourceDir string - TargetDir string - Mode Mode - Overwrite bool - DirMode uint64 - FileMode uint64 - Watch bool + SourceDir string + TargetDir string + Mode Mode + Overwrite bool + DirMode uint64 + FileMode uint64 + Watch bool + SkipFullSync bool } func (c *Config) Validate() error { @@ -37,5 +38,9 @@ func (c *Config) Validate() error { return fmt.Errorf("invalid mode %s", c.Mode) } + if c.SkipFullSync && !c.Watch { + return fmt.Errorf("skip full sync and watch disabled — nothing to do") + } + return nil } diff --git a/internal/organizer/organizer.go b/internal/organizer/organizer.go index 88ab545..3c8971e 100644 --- a/internal/organizer/organizer.go +++ b/internal/organizer/organizer.go @@ -17,6 +17,11 @@ import ( "github.com/derfenix/photocatalog/v2/internal/metadata" ) +const ( + defaultDirMode = 0o777 + defaultFileMode = 0o644 +) + type MetaExtractor interface { Extract(_ string, data io.Reader) (metadata.Metadata, error) } @@ -31,8 +36,8 @@ func NewOrganizer(mode Mode, source, target string) *Organizer { sourceDir: source, targetDir: target, - dirMode: 0777, - fileMode: 0644, + dirMode: defaultDirMode, + fileMode: defaultFileMode, metaExtractors: map[string]MetaExtractor{ "": &metadata.Default{}, diff --git a/main.go b/main.go index 8fa6593..61be7ae 100644 --- a/main.go +++ b/main.go @@ -33,25 +33,18 @@ func main() { } func loadCfg() application.Config { - cfg := application.Config{ - SourceDir: "", - TargetDir: "", - Mode: "", - Overwrite: false, - DirMode: 0, - FileMode: 0, - Watch: false, - } + cfg := application.Config{} flag.StringVar(&cfg.SourceDir, "source", "", "Source directory") flag.StringVar(&cfg.TargetDir, "target", "", "Target directory") flag.BoolVar(&cfg.Overwrite, "overwrite", false, "Overwrite existing files") - flag.BoolVar(&cfg.Watch, "watch", false, "Watch for changes in the source directory") + flag.BoolVar(&cfg.Watch, "watch", true, "Watch for changes in the source directory") + flag.BoolVar(&cfg.SkipFullSync, "skip-full-sync", false, "Skip full sync at startup") var dirMode string var fileMode string - flag.StringVar(&dirMode, "dirmode", "0777", "Mode bits for directories can be created while syncing") - flag.StringVar(&fileMode, "filemode", "0644", "Mode bits for files created while syncing (not applicable for hardlink mode)") + flag.StringVar(&dirMode, "dir-mode", "0777", "Mode bits for directories can be created while syncing") + flag.StringVar(&fileMode, "file-mode", "0644", "Mode bits for files created while syncing (not applicable for hardlink mode)") var mode string flag.StringVar(&mode, "mode", "hardlink", "Mode")