more fix
This commit is contained in:
2
.vscode/launch.json
vendored
2
.vscode/launch.json
vendored
@@ -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"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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.")
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user