This commit is contained in:
2025-08-18 20:04:32 +02:00
parent b2425d310b
commit 2ff191fecf
6 changed files with 30 additions and 19 deletions

2
.vscode/launch.json vendored
View File

@@ -18,7 +18,7 @@
"type": "go", "type": "go",
"request": "launch", "request": "launch",
"mode": "auto", "mode": "auto",
"args": ["run"], "args": ["sync"],
"console": "integratedTerminal", "console": "integratedTerminal",
"program": "${workspaceFolder}/cmd/cli" "program": "${workspaceFolder}/cmd/cli"
} }

View File

@@ -56,7 +56,7 @@ func (p *AddCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{}) s
return subcommands.ExitFailure 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) fmt.Fprintln(os.Stderr, "error: failed to scan:", err)
return subcommands.ExitFailure return subcommands.ExitFailure
} }

View File

@@ -37,15 +37,16 @@ func (p *RunCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{}) s
} }
for _, metadata := range datastore { for _, metadata := range datastore {
if err := p.Service.MakeBackup(metadata.ID); err != nil { changed, err := p.Service.Scan(metadata.ID)
fmt.Fprintln(os.Stderr, "error: failed to make backup:", err) if err != nil {
return subcommands.ExitFailure fmt.Println("❌", metadata.Name, ":", err.Error())
continue
} }
if err := p.Service.Scan(metadata.ID); err != nil { if changed {
fmt.Fprintln(os.Stderr, "error: failed to scan:", err) fmt.Println("✅", metadata.Name, ": backed up")
return subcommands.ExitFailure } else {
fmt.Println("🆗", metadata.Name, ": up to date")
} }
fmt.Println("✅", metadata.Name)
} }
fmt.Println("done.") fmt.Println("done.")

View File

@@ -66,7 +66,6 @@ func (p *SyncCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{})
pg.Finish() pg.Finish()
pg.Clear() pg.Clear()
pg.Close() pg.Close()
} }
pg.Describe(fmt.Sprintf("[%s] Checking status...", g.Name)) pg.Describe(fmt.Sprintf("[%s] Checking status...", g.Name))
@@ -88,6 +87,7 @@ func (p *SyncCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{})
destroyPg() destroyPg()
slog.Warn("failed to push backup files", "err", err) slog.Warn("failed to push backup files", "err", err)
} }
destroyPg()
fmt.Println(g.Name + ": pushed") fmt.Println(g.Name + ": pushed")
continue continue
} }

View File

@@ -82,47 +82,51 @@ func (s *Service) UpdateMetadata(gameID string, m repository.Metadata) error {
return nil return nil
} }
func (s *Service) Scan(gameID string) error { func (s *Service) Scan(gameID string) (bool, error) {
id := repository.NewGameIdentifier(gameID) id := repository.NewGameIdentifier(gameID)
lastRun, err := s.repo.LastScan(id) lastRun, err := s.repo.LastScan(id)
if err != nil { 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) m, err := s.repo.Metadata(id)
if err != nil { 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) { 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) f, err := s.repo.WriteBlob(id)
if err != nil { 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 { if v, ok := f.(io.Closer); ok {
defer v.Close() defer v.Close()
} }
if err := archive.Tar(f, m.Path); err != nil { 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 { 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.Date = time.Now()
m.Version += 1 m.Version += 1
if err := s.repo.WriteMetadata(id, m); err != nil { 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 { func (s *Service) MakeBackup(gameID string) error {

View File

@@ -459,6 +459,12 @@ func (r *EagerRepository) WriteMetadata(id GameIdentifier, m Metadata) error {
return err return err
} }
// reload from disk because md5
m, err = r.Repository.Metadata(id)
if err != nil {
return err
}
d := r.data[id.gameID] d := r.data[id.gameID]
d.Metadata = m d.Metadata = m
r.data[id.gameID] = d r.data[id.gameID] = d