mirror of
https://github.com/octoleo/restic.git
synced 2024-06-07 11:30:49 +00:00
246302375d
Change the index so that a blob can be contained in multiple packs. Require passing the blob type to all lookup functions.
56 lines
875 B
Go
56 lines
875 B
Go
package pack
|
|
|
|
import (
|
|
"fmt"
|
|
"restic/backend"
|
|
)
|
|
|
|
// Handle identifies a blob of a given type.
|
|
type Handle struct {
|
|
ID backend.ID
|
|
Type BlobType
|
|
}
|
|
|
|
func (h Handle) String() string {
|
|
return fmt.Sprintf("<%s/%s>", h.Type, h.ID.Str())
|
|
}
|
|
|
|
// Handles is an ordered list of Handles that implements sort.Interface.
|
|
type Handles []Handle
|
|
|
|
func (h Handles) Len() int {
|
|
return len(h)
|
|
}
|
|
|
|
func (h Handles) Less(i, j int) bool {
|
|
if h[i].Type != h[j].Type {
|
|
return h[i].Type < h[j].Type
|
|
}
|
|
|
|
for k, b := range h[i].ID {
|
|
if b == h[j].ID[k] {
|
|
continue
|
|
}
|
|
|
|
if b < h[j].ID[k] {
|
|
return true
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
func (h Handles) Swap(i, j int) {
|
|
h[i], h[j] = h[j], h[i]
|
|
}
|
|
|
|
func (h Handles) String() string {
|
|
elements := make([]string, 0, len(h))
|
|
for _, e := range h {
|
|
elements = append(elements, e.String())
|
|
}
|
|
return fmt.Sprintf("%v", elements)
|
|
}
|