diff --git a/src/cmds/restic/cmd_prune.go b/src/cmds/restic/cmd_prune.go index a7f81da38..d9306c34c 100644 --- a/src/cmds/restic/cmd_prune.go +++ b/src/cmds/restic/cmd_prune.go @@ -180,22 +180,22 @@ func (cmd CmdPrune) Execute(args []string) error { return err } - id, err := idx.Save(repo) + var supersedes backend.IDs + for idxID := range repo.List(backend.Index, done) { + err := repo.Backend().Remove(backend.Index, idxID.String()) + if err != nil { + fmt.Fprintf(os.Stderr, "unable to remove index %v: %v\n", idxID.Str(), err) + } + + supersedes = append(supersedes, idxID) + } + + id, err := idx.Save(repo, supersedes) if err != nil { return err } cmd.global.Verbosef("saved new index as %v\n", id.Str()) - for oldIndex := range repo.List(backend.Index, done) { - if id.Equal(oldIndex) { - continue - } - err := repo.Backend().Remove(backend.Index, oldIndex.String()) - if err != nil { - fmt.Fprintf(os.Stderr, "unable to remove index %v: %v\n", oldIndex.Str(), err) - } - } - cmd.global.Verbosef("done\n") return nil } diff --git a/src/restic/index/index.go b/src/restic/index/index.go index 6bd934dc1..887e1234a 100644 --- a/src/restic/index/index.go +++ b/src/restic/index/index.go @@ -287,15 +287,14 @@ func (idx *Index) FindBlob(h pack.Handle) ([]Location, error) { return result, nil } -// Save writes the complete index to the repo and includes all previously read -// indexes to the Supersedes field. -func (idx *Index) Save(repo types.Repository) (backend.ID, error) { +// Save writes the complete index to the repo. +func (idx *Index) Save(repo types.Repository, supersedes backend.IDs) (backend.ID, error) { packs := make(map[backend.ID][]pack.Blob, len(idx.Packs)) for id, p := range idx.Packs { packs[id] = p.Entries } - return Save(repo, packs, idx.IndexIDs.List()) + return Save(repo, packs, supersedes) } // Save writes a new index containing the given packs.