mirror of
https://github.com/restic/restic.git
synced 2024-12-25 01:06:39 +00:00
Add RemovePack for index
This commit is contained in:
parent
69c2e8ce7e
commit
c0ef1ec6fd
2 changed files with 58 additions and 0 deletions
|
@ -189,6 +189,26 @@ func (idx *Index) AddPack(id backend.ID, size int64, entries []pack.Blob) error
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RemovePack deletes a pack from the index.
|
||||||
|
func (idx *Index) RemovePack(id backend.ID) error {
|
||||||
|
if _, ok := idx.Packs[id]; !ok {
|
||||||
|
return fmt.Errorf("pack %v not found in the index", id.Str())
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, blob := range idx.Packs[id].Entries {
|
||||||
|
h := pack.Handle{ID: blob.ID, Type: blob.Type}
|
||||||
|
idx.Blobs[h].Packs.Delete(id)
|
||||||
|
|
||||||
|
if len(idx.Blobs[h].Packs) == 0 {
|
||||||
|
delete(idx.Blobs, h)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
delete(idx.Packs, id)
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// DuplicateBlobs returns a list of blobs that are stored more than once in the
|
// DuplicateBlobs returns a list of blobs that are stored more than once in the
|
||||||
// repo.
|
// repo.
|
||||||
func (idx *Index) DuplicateBlobs() (dups pack.BlobSet) {
|
func (idx *Index) DuplicateBlobs() (dups pack.BlobSet) {
|
||||||
|
|
|
@ -239,6 +239,44 @@ func TestIndexSave(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestIndexAddRemovePack(t *testing.T) {
|
||||||
|
repo, cleanup := createFilledRepo(t, 3, 0)
|
||||||
|
defer cleanup()
|
||||||
|
|
||||||
|
idx, err := Load(repo)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Load() returned error %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
done := make(chan struct{})
|
||||||
|
defer close(done)
|
||||||
|
|
||||||
|
packID := <-repo.List(backend.Data, done)
|
||||||
|
|
||||||
|
t.Logf("selected pack %v", packID.Str())
|
||||||
|
|
||||||
|
blobs := idx.Packs[packID].Entries
|
||||||
|
|
||||||
|
idx.RemovePack(packID)
|
||||||
|
|
||||||
|
if _, ok := idx.Packs[packID]; ok {
|
||||||
|
t.Errorf("removed pack %v found in index.Packs", packID.Str())
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, blob := range blobs {
|
||||||
|
h := pack.Handle{ID: blob.ID, Type: blob.Type}
|
||||||
|
_, err := idx.FindBlob(h)
|
||||||
|
if err == nil {
|
||||||
|
t.Errorf("removed blob %v found in index", h)
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, ok := idx.Blobs[h]; ok {
|
||||||
|
t.Errorf("removed blob %v found in index.Blobs", h)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// example index serialization from doc/Design.md
|
// example index serialization from doc/Design.md
|
||||||
var docExample = []byte(`
|
var docExample = []byte(`
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue