prune: Fix newly created index

This fixes a bug introduced in c79fb6fcdd
where the index file after a prune contains pack files that do not exist
any more. Restic will detect this during backup and abort with an error
message until the user runs `prune` or `rebuild-index` again.
This commit is contained in:
Alexander Neumann 2017-07-18 23:07:40 +02:00
parent 7fc54ed98e
commit bd31281f1e
1 changed files with 4 additions and 3 deletions

View File

@ -235,22 +235,23 @@ func pruneRepository(gopts GlobalOptions, repo restic.Repository) error {
Verbosef("will delete %d packs and rewrite %d packs, this frees %s\n", Verbosef("will delete %d packs and rewrite %d packs, this frees %s\n",
len(removePacks), len(rewritePacks), formatBytes(uint64(removeBytes))) len(removePacks), len(rewritePacks), formatBytes(uint64(removeBytes)))
var repackedBlobs restic.IDSet var obsoletePacks restic.IDSet
if len(rewritePacks) != 0 { if len(rewritePacks) != 0 {
bar = newProgressMax(!gopts.Quiet, uint64(len(rewritePacks)), "packs rewritten") bar = newProgressMax(!gopts.Quiet, uint64(len(rewritePacks)), "packs rewritten")
bar.Start() bar.Start()
repackedBlobs, err = repository.Repack(ctx, repo, rewritePacks, usedBlobs, bar) obsoletePacks, err = repository.Repack(ctx, repo, rewritePacks, usedBlobs, bar)
if err != nil { if err != nil {
return err return err
} }
bar.Done() bar.Done()
} }
removePacks.Merge(obsoletePacks)
if err = rebuildIndex(ctx, repo, removePacks); err != nil { if err = rebuildIndex(ctx, repo, removePacks); err != nil {
return err return err
} }
removePacks.Merge(repackedBlobs)
if len(removePacks) != 0 { if len(removePacks) != 0 {
bar = newProgressMax(!gopts.Quiet, uint64(len(removePacks)), "packs deleted") bar = newProgressMax(!gopts.Quiet, uint64(len(removePacks)), "packs deleted")
bar.Start() bar.Start()