diff --git a/internal/vaultik/prune.go b/internal/vaultik/prune.go index dff9dd9..51e279e 100644 --- a/internal/vaultik/prune.go +++ b/internal/vaultik/prune.go @@ -35,6 +35,7 @@ func (v *Vaultik) PruneBlobs(opts *PruneOptions) error { log.Info("Listing remote snapshots") objectCh := v.Storage.ListStream(v.ctx, "metadata/") + seen := make(map[string]bool) var snapshotIDs []string for object := range objectCh { if object.Err != nil { @@ -47,15 +48,8 @@ func (v *Vaultik) PruneBlobs(opts *PruneOptions) error { // Check if this is a directory by looking for trailing slash if strings.HasSuffix(object.Key, "/") || strings.Contains(object.Key, "/manifest.json.zst") { snapshotID := parts[1] - // Only add unique snapshot IDs - found := false - for _, id := range snapshotIDs { - if id == snapshotID { - found = true - break - } - } - if !found { + if !seen[snapshotID] { + seen[snapshotID] = true snapshotIDs = append(snapshotIDs, snapshotID) } } diff --git a/internal/vaultik/snapshot.go b/internal/vaultik/snapshot.go index e0d93b2..dd1570f 100644 --- a/internal/vaultik/snapshot.go +++ b/internal/vaultik/snapshot.go @@ -913,6 +913,7 @@ func (v *Vaultik) RemoveAllSnapshots(opts *RemoveOptions) (*RemoveResult, error) log.Info("Listing all snapshots") objectCh := v.Storage.ListStream(v.ctx, "metadata/") + seen := make(map[string]bool) var snapshotIDs []string for object := range objectCh { if object.Err != nil { @@ -927,14 +928,8 @@ func (v *Vaultik) RemoveAllSnapshots(opts *RemoveOptions) (*RemoveResult, error) } if strings.HasSuffix(object.Key, "/") || strings.Contains(object.Key, "/manifest.json.zst") { sid := parts[1] - found := false - for _, id := range snapshotIDs { - if id == sid { - found = true - break - } - } - if !found { + if !seen[sid] { + seen[sid] = true snapshotIDs = append(snapshotIDs, sid) } }