mirror of
https://github.com/octoleo/restic.git
synced 2024-12-23 03:18:55 +00:00
Remove IDSize, TestRandomID -> NewRandomID
This commit is contained in:
parent
0045f2fb61
commit
debf1fce54
@ -52,8 +52,9 @@ func PrefixLength(be Lister, t FileType) (int, error) {
|
||||
}
|
||||
|
||||
// select prefixes of length l, test if the last one is the same as the current one
|
||||
id := ID{}
|
||||
outer:
|
||||
for l := minPrefixLength; l < IDSize; l++ {
|
||||
for l := minPrefixLength; l < len(id); l++ {
|
||||
var last string
|
||||
|
||||
for _, name := range list {
|
||||
@ -66,5 +67,5 @@ outer:
|
||||
return l, nil
|
||||
}
|
||||
|
||||
return IDSize, nil
|
||||
return len(id), nil
|
||||
}
|
||||
|
@ -1,10 +1,6 @@
|
||||
package restic
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"crypto/sha256"
|
||||
"encoding/hex"
|
||||
"io"
|
||||
"testing"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
@ -21,9 +17,6 @@ type Config struct {
|
||||
ChunkerPolynomial chunker.Pol `json:"chunker_polynomial"`
|
||||
}
|
||||
|
||||
// repositoryIDSize is the length of the ID chosen at random for a new repository.
|
||||
const repositoryIDSize = sha256.Size
|
||||
|
||||
// RepoVersion is the version that is written to the config when a repository
|
||||
// is newly created with Init().
|
||||
const RepoVersion = 1
|
||||
@ -51,13 +44,7 @@ func CreateConfig() (Config, error) {
|
||||
return Config{}, errors.Wrap(err, "chunker.RandomPolynomial")
|
||||
}
|
||||
|
||||
newID := make([]byte, repositoryIDSize)
|
||||
_, err = io.ReadFull(rand.Reader, newID)
|
||||
if err != nil {
|
||||
return Config{}, errors.Wrap(err, "io.ReadFull")
|
||||
}
|
||||
|
||||
cfg.ID = hex.EncodeToString(newID)
|
||||
cfg.ID = NewRandomID().String()
|
||||
cfg.Version = RepoVersion
|
||||
|
||||
debug.Log("Repo.CreateConfig", "New config: %#v", cfg)
|
||||
@ -68,13 +55,7 @@ func CreateConfig() (Config, error) {
|
||||
func TestCreateConfig(t testing.TB, pol chunker.Pol) (cfg Config) {
|
||||
cfg.ChunkerPolynomial = pol
|
||||
|
||||
newID := make([]byte, repositoryIDSize)
|
||||
_, err := io.ReadFull(rand.Reader, newID)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create random ID: %v", err)
|
||||
}
|
||||
|
||||
cfg.ID = hex.EncodeToString(newID)
|
||||
cfg.ID = NewRandomID().String()
|
||||
cfg.Version = RepoVersion
|
||||
|
||||
return cfg
|
||||
|
@ -2,9 +2,11 @@ package restic
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"crypto/rand"
|
||||
"crypto/sha256"
|
||||
"encoding/hex"
|
||||
"encoding/json"
|
||||
"io"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
@ -14,11 +16,11 @@ func Hash(data []byte) ID {
|
||||
return sha256.Sum256(data)
|
||||
}
|
||||
|
||||
// IDSize contains the size of an ID, in bytes.
|
||||
const IDSize = sha256.Size
|
||||
// idSize contains the size of an ID, in bytes.
|
||||
const idSize = sha256.Size
|
||||
|
||||
// ID references content within a repository.
|
||||
type ID [IDSize]byte
|
||||
type ID [idSize]byte
|
||||
|
||||
// ParseID converts the given string to an ID.
|
||||
func ParseID(s string) (ID, error) {
|
||||
@ -28,7 +30,7 @@ func ParseID(s string) (ID, error) {
|
||||
return ID{}, errors.Wrap(err, "hex.DecodeString")
|
||||
}
|
||||
|
||||
if len(b) != IDSize {
|
||||
if len(b) != idSize {
|
||||
return ID{}, errors.New("invalid length for hash")
|
||||
}
|
||||
|
||||
@ -42,6 +44,17 @@ func (id ID) String() string {
|
||||
return hex.EncodeToString(id[:])
|
||||
}
|
||||
|
||||
// NewRandomID retuns a randomly generated ID. When reading from rand fails,
|
||||
// the function panics.
|
||||
func NewRandomID() ID {
|
||||
id := ID{}
|
||||
_, err := io.ReadFull(rand.Reader, id[:])
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return id
|
||||
}
|
||||
|
||||
const shortStr = 4
|
||||
|
||||
// Str returns the shortened string version of id.
|
||||
|
@ -50,13 +50,13 @@ func (p *Packer) Add(t restic.BlobType, id restic.ID, data []byte) (int, error)
|
||||
return n, errors.Wrap(err, "Write")
|
||||
}
|
||||
|
||||
var entrySize = uint(binary.Size(restic.BlobType(0)) + binary.Size(uint32(0)) + restic.IDSize)
|
||||
var entrySize = uint(binary.Size(restic.BlobType(0)) + binary.Size(uint32(0)) + len(restic.ID{}))
|
||||
|
||||
// headerEntry is used with encoding/binary to read and write header entries
|
||||
type headerEntry struct {
|
||||
Type uint8
|
||||
Length uint32
|
||||
ID [restic.IDSize]byte
|
||||
ID restic.ID
|
||||
}
|
||||
|
||||
// Finalize writes the header for all added blobs and finalizes the pack.
|
||||
|
@ -55,7 +55,7 @@ func verifyBlobs(t testing.TB, bufs []Buf, k *crypto.Key, rd io.ReaderAt, packSi
|
||||
// header length
|
||||
written += binary.Size(uint32(0))
|
||||
// header
|
||||
written += len(bufs) * (binary.Size(restic.BlobType(0)) + binary.Size(uint32(0)) + restic.IDSize)
|
||||
written += len(bufs) * (binary.Size(restic.BlobType(0)) + binary.Size(uint32(0)) + len(restic.ID{}))
|
||||
// header crypto
|
||||
written += crypto.Extension
|
||||
|
||||
|
@ -22,11 +22,11 @@ func TestIndexSerialize(t *testing.T) {
|
||||
|
||||
// create 50 packs with 20 blobs each
|
||||
for i := 0; i < 50; i++ {
|
||||
packID := restic.TestRandomID()
|
||||
packID := restic.NewRandomID()
|
||||
|
||||
pos := uint(0)
|
||||
for j := 0; j < 20; j++ {
|
||||
id := restic.TestRandomID()
|
||||
id := restic.NewRandomID()
|
||||
length := uint(i*100 + j)
|
||||
idx.Store(restic.PackedBlob{
|
||||
Blob: restic.Blob{
|
||||
@ -94,11 +94,11 @@ func TestIndexSerialize(t *testing.T) {
|
||||
// add more blobs to idx
|
||||
newtests := []testEntry{}
|
||||
for i := 0; i < 10; i++ {
|
||||
packID := restic.TestRandomID()
|
||||
packID := restic.NewRandomID()
|
||||
|
||||
pos := uint(0)
|
||||
for j := 0; j < 10; j++ {
|
||||
id := restic.TestRandomID()
|
||||
id := restic.NewRandomID()
|
||||
length := uint(i*100 + j)
|
||||
idx.Store(restic.PackedBlob{
|
||||
Blob: restic.Blob{
|
||||
@ -130,7 +130,7 @@ func TestIndexSerialize(t *testing.T) {
|
||||
Assert(t, idx.Final(),
|
||||
"index not final after encoding")
|
||||
|
||||
id := restic.TestRandomID()
|
||||
id := restic.NewRandomID()
|
||||
OK(t, idx.SetID(id))
|
||||
id2, err := idx.ID()
|
||||
Assert(t, id2.Equal(id),
|
||||
@ -167,11 +167,11 @@ func TestIndexSize(t *testing.T) {
|
||||
packs := 200
|
||||
blobs := 100
|
||||
for i := 0; i < packs; i++ {
|
||||
packID := restic.TestRandomID()
|
||||
packID := restic.NewRandomID()
|
||||
|
||||
pos := uint(0)
|
||||
for j := 0; j < blobs; j++ {
|
||||
id := restic.TestRandomID()
|
||||
id := restic.NewRandomID()
|
||||
length := uint(i*100 + j)
|
||||
idx.Store(restic.PackedBlob{
|
||||
Blob: restic.Blob{
|
||||
@ -353,11 +353,11 @@ func TestIndexPacks(t *testing.T) {
|
||||
packs := restic.NewIDSet()
|
||||
|
||||
for i := 0; i < 20; i++ {
|
||||
packID := restic.TestRandomID()
|
||||
packID := restic.NewRandomID()
|
||||
idx.Store(restic.PackedBlob{
|
||||
Blob: restic.Blob{
|
||||
Type: restic.DataBlob,
|
||||
ID: restic.TestRandomID(),
|
||||
ID: restic.NewRandomID(),
|
||||
Offset: 0,
|
||||
Length: 23,
|
||||
},
|
||||
|
@ -1,7 +1,6 @@
|
||||
package restic
|
||||
|
||||
import (
|
||||
crand "crypto/rand"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
@ -201,14 +200,3 @@ func TestParseID(s string) ID {
|
||||
|
||||
return id
|
||||
}
|
||||
|
||||
// TestRandomID retuns a randomly generated ID. When reading from rand fails,
|
||||
// the function panics.
|
||||
func TestRandomID() ID {
|
||||
id := ID{}
|
||||
_, err := io.ReadFull(crand.Reader, id[:])
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return id
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user