From 64258a2c2aa8a178afed12e886658698251eb81a Mon Sep 17 00:00:00 2001 From: Michael Eischer Date: Sun, 22 Aug 2021 17:58:21 +0200 Subject: [PATCH] rebuild-index: Ignore broken index files Previously, an e.g. truncated index could prevent rebuild-index from working. --- cmd/restic/cmd_rebuild_index.go | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/cmd/restic/cmd_rebuild_index.go b/cmd/restic/cmd_rebuild_index.go index 707309e64..718d2c767 100644 --- a/cmd/restic/cmd_rebuild_index.go +++ b/cmd/restic/cmd_rebuild_index.go @@ -73,7 +73,27 @@ func rebuildIndex(opts RebuildIndexOptions, gopts GlobalOptions, repo *repositor } } else { Verbosef("loading indexes...\n") - err := repo.LoadIndex(gopts.ctx) + mi := repository.NewMasterIndex() + err := repository.ForAllIndexes(ctx, repo, func(id restic.ID, idx *repository.Index, oldFormat bool, err error) error { + if err != nil { + Warnf("removing invalid index %v: %v\n", id, err) + obsoleteIndexes = append(obsoleteIndexes, id) + return nil + } + + mi.Insert(idx) + return nil + }) + if err != nil { + return err + } + + err = mi.MergeFinalIndexes() + if err != nil { + return err + } + + err = repo.SetIndex(mi) if err != nil { return err }