From 2ff191fecfb7feba6326721b342162cc0923eb00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lie=20DELHAIE?= Date: Mon, 18 Aug 2025 20:04:32 +0200 Subject: [PATCH] more fix --- .vscode/launch.json | 2 +- cmd/cli/commands/add/add.go | 2 +- cmd/cli/commands/run/run.go | 15 ++++++++------- cmd/cli/commands/sync/sync.go | 2 +- pkg/data/data.go | 22 +++++++++++++--------- pkg/repository/repository.go | 6 ++++++ 6 files changed, 30 insertions(+), 19 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index a0ec5ce..8d21f0c 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -18,7 +18,7 @@ "type": "go", "request": "launch", "mode": "auto", - "args": ["run"], + "args": ["sync"], "console": "integratedTerminal", "program": "${workspaceFolder}/cmd/cli" } diff --git a/cmd/cli/commands/add/add.go b/cmd/cli/commands/add/add.go index ba466cd..51ad19b 100644 --- a/cmd/cli/commands/add/add.go +++ b/cmd/cli/commands/add/add.go @@ -56,7 +56,7 @@ func (p *AddCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{}) s return subcommands.ExitFailure } - if err := p.Service.Scan(gameID); err != nil { + if _, err := p.Service.Scan(gameID); err != nil { fmt.Fprintln(os.Stderr, "error: failed to scan:", err) return subcommands.ExitFailure } diff --git a/cmd/cli/commands/run/run.go b/cmd/cli/commands/run/run.go index ed645bc..93c68b5 100644 --- a/cmd/cli/commands/run/run.go +++ b/cmd/cli/commands/run/run.go @@ -37,15 +37,16 @@ func (p *RunCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{}) s } for _, metadata := range datastore { - if err := p.Service.MakeBackup(metadata.ID); err != nil { - fmt.Fprintln(os.Stderr, "error: failed to make backup:", err) - return subcommands.ExitFailure + changed, err := p.Service.Scan(metadata.ID) + if err != nil { + fmt.Println("❌", metadata.Name, ":", err.Error()) + continue } - if err := p.Service.Scan(metadata.ID); err != nil { - fmt.Fprintln(os.Stderr, "error: failed to scan:", err) - return subcommands.ExitFailure + if changed { + fmt.Println("✅", metadata.Name, ": backed up") + } else { + fmt.Println("🆗", metadata.Name, ": up to date") } - fmt.Println("✅", metadata.Name) } fmt.Println("done.") diff --git a/cmd/cli/commands/sync/sync.go b/cmd/cli/commands/sync/sync.go index bc3bd91..148aef1 100644 --- a/cmd/cli/commands/sync/sync.go +++ b/cmd/cli/commands/sync/sync.go @@ -66,7 +66,6 @@ func (p *SyncCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{}) pg.Finish() pg.Clear() pg.Close() - } pg.Describe(fmt.Sprintf("[%s] Checking status...", g.Name)) @@ -88,6 +87,7 @@ func (p *SyncCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{}) destroyPg() slog.Warn("failed to push backup files", "err", err) } + destroyPg() fmt.Println(g.Name + ": pushed") continue } diff --git a/pkg/data/data.go b/pkg/data/data.go index 93c4304..4bef18f 100644 --- a/pkg/data/data.go +++ b/pkg/data/data.go @@ -82,47 +82,51 @@ func (s *Service) UpdateMetadata(gameID string, m repository.Metadata) error { return nil } -func (s *Service) Scan(gameID string) error { +func (s *Service) Scan(gameID string) (bool, error) { id := repository.NewGameIdentifier(gameID) lastRun, err := s.repo.LastScan(id) if err != nil { - return fmt.Errorf("failed to get last scan time: %w", err) + return false, fmt.Errorf("failed to get last scan time: %w", err) } m, err := s.repo.Metadata(id) if err != nil { - return fmt.Errorf("failed to get game metadata: %w", err) + return false, fmt.Errorf("failed to get game metadata: %w", err) } if !IsDirectoryChanged(m.Path, lastRun) { - return nil + return false, nil + } + + if err := s.MakeBackup(gameID); err != nil { + return false, fmt.Errorf("failed to make the backup: %w", err) } f, err := s.repo.WriteBlob(id) if err != nil { - return fmt.Errorf("failed to get datastore stream: %w", err) + return false, fmt.Errorf("failed to get datastore stream: %w", err) } if v, ok := f.(io.Closer); ok { defer v.Close() } if err := archive.Tar(f, m.Path); err != nil { - return fmt.Errorf("failed to make archive: %w", err) + return false, fmt.Errorf("failed to make archive: %w", err) } if err := s.repo.ResetLastScan(id); err != nil { - return fmt.Errorf("failed to reset scan date: %w", err) + return false, fmt.Errorf("failed to reset scan date: %w", err) } m.Date = time.Now() m.Version += 1 if err := s.repo.WriteMetadata(id, m); err != nil { - return fmt.Errorf("failed to update metadata: %w", err) + return false, fmt.Errorf("failed to update metadata: %w", err) } - return nil + return true, nil } func (s *Service) MakeBackup(gameID string) error { diff --git a/pkg/repository/repository.go b/pkg/repository/repository.go index 563a7d6..233036b 100644 --- a/pkg/repository/repository.go +++ b/pkg/repository/repository.go @@ -459,6 +459,12 @@ func (r *EagerRepository) WriteMetadata(id GameIdentifier, m Metadata) error { return err } + // reload from disk because md5 + m, err = r.Repository.Metadata(id) + if err != nil { + return err + } + d := r.data[id.gameID] d.Metadata = m r.data[id.gameID] = d