forked from TrueCloudLab/restic
Remove LoadJSONPack, un-export loadBlob
This commit is contained in:
parent
878c1cd936
commit
1cc59010f5
2 changed files with 22 additions and 31 deletions
|
@ -173,12 +173,13 @@ func (cmd CmdCat) Execute(args []string) error {
|
||||||
blob := list[0]
|
blob := list[0]
|
||||||
|
|
||||||
buf := make([]byte, blob.Length)
|
buf := make([]byte, blob.Length)
|
||||||
data, err := repo.LoadBlob(id, t, buf)
|
n, err := repo.LoadDataBlob(id, buf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
buf = buf[:n]
|
||||||
|
|
||||||
_, err = os.Stdout.Write(data)
|
_, err = os.Stdout.Write(buf)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -186,8 +187,7 @@ func (cmd CmdCat) Execute(args []string) error {
|
||||||
|
|
||||||
case "tree":
|
case "tree":
|
||||||
debug.Log("cat", "cat tree %v", id.Str())
|
debug.Log("cat", "cat tree %v", id.Str())
|
||||||
tree := restic.NewTree()
|
tree, err := repo.LoadTree(id)
|
||||||
err = repo.LoadJSONPack(restic.TreeBlob, id, tree)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
debug.Log("cat", "unable to load tree %v: %v", id.Str(), err)
|
debug.Log("cat", "unable to load tree %v: %v", id.Str(), err)
|
||||||
return err
|
return err
|
||||||
|
|
|
@ -83,36 +83,36 @@ func (r *Repository) LoadAndDecrypt(t restic.FileType, id restic.ID) ([]byte, er
|
||||||
return plain[:n], nil
|
return plain[:n], nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// LoadBlob tries to load and decrypt content identified by t and id from a
|
// loadBlob tries to load and decrypt content identified by t and id from a
|
||||||
// pack from the backend, the result is stored in plaintextBuf, which must be
|
// pack from the backend, the result is stored in plaintextBuf, which must be
|
||||||
// large enough to hold the complete blob.
|
// large enough to hold the complete blob.
|
||||||
func (r *Repository) LoadBlob(id restic.ID, t restic.BlobType, plaintextBuf []byte) ([]byte, error) {
|
func (r *Repository) loadBlob(id restic.ID, t restic.BlobType, plaintextBuf []byte) (int, error) {
|
||||||
debug.Log("Repo.LoadBlob", "load %v with id %v (buf %d)", t, id.Str(), len(plaintextBuf))
|
debug.Log("Repo.loadBlob", "load %v with id %v (buf %d)", t, id.Str(), len(plaintextBuf))
|
||||||
|
|
||||||
// lookup plaintext size of blob
|
// lookup plaintext size of blob
|
||||||
size, err := r.idx.LookupSize(id, t)
|
size, err := r.idx.LookupSize(id, t)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// make sure the plaintext buffer is large enough, extend otherwise
|
// make sure the plaintext buffer is large enough, extend otherwise
|
||||||
if len(plaintextBuf) < int(size) {
|
if len(plaintextBuf) < int(size) {
|
||||||
return nil, errors.Errorf("buffer is too small: %d < %d", len(plaintextBuf), size)
|
return 0, errors.Errorf("buffer is too small: %d < %d", len(plaintextBuf), size)
|
||||||
}
|
}
|
||||||
|
|
||||||
// lookup packs
|
// lookup packs
|
||||||
blobs, err := r.idx.Lookup(id, t)
|
blobs, err := r.idx.Lookup(id, t)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
debug.Log("Repo.LoadBlob", "id %v not found in index: %v", id.Str(), err)
|
debug.Log("Repo.loadBlob", "id %v not found in index: %v", id.Str(), err)
|
||||||
return nil, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var lastError error
|
var lastError error
|
||||||
for _, blob := range blobs {
|
for _, blob := range blobs {
|
||||||
debug.Log("Repo.LoadBlob", "id %v found: %v", id.Str(), blob)
|
debug.Log("Repo.loadBlob", "id %v found: %v", id.Str(), blob)
|
||||||
|
|
||||||
if blob.Type != t {
|
if blob.Type != t {
|
||||||
debug.Log("Repo.LoadBlob", "blob %v has wrong block type, want %v", blob, t)
|
debug.Log("Repo.loadBlob", "blob %v has wrong block type, want %v", blob, t)
|
||||||
}
|
}
|
||||||
|
|
||||||
// load blob from pack
|
// load blob from pack
|
||||||
|
@ -120,7 +120,7 @@ func (r *Repository) LoadBlob(id restic.ID, t restic.BlobType, plaintextBuf []by
|
||||||
ciphertextBuf := make([]byte, blob.Length)
|
ciphertextBuf := make([]byte, blob.Length)
|
||||||
n, err := r.be.Load(h, ciphertextBuf, int64(blob.Offset))
|
n, err := r.be.Load(h, ciphertextBuf, int64(blob.Offset))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
debug.Log("Repo.LoadBlob", "error loading blob %v: %v", blob, err)
|
debug.Log("Repo.loadBlob", "error loading blob %v: %v", blob, err)
|
||||||
lastError = err
|
lastError = err
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
@ -128,7 +128,7 @@ func (r *Repository) LoadBlob(id restic.ID, t restic.BlobType, plaintextBuf []by
|
||||||
if uint(n) != blob.Length {
|
if uint(n) != blob.Length {
|
||||||
lastError = errors.Errorf("error loading blob %v: wrong length returned, want %d, got %d",
|
lastError = errors.Errorf("error loading blob %v: wrong length returned, want %d, got %d",
|
||||||
id.Str(), blob.Length, uint(n))
|
id.Str(), blob.Length, uint(n))
|
||||||
debug.Log("Repo.LoadBlob", "lastError: %v", lastError)
|
debug.Log("Repo.loadBlob", "lastError: %v", lastError)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -146,14 +146,14 @@ func (r *Repository) LoadBlob(id restic.ID, t restic.BlobType, plaintextBuf []by
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
return plaintextBuf, nil
|
return len(plaintextBuf), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if lastError != nil {
|
if lastError != nil {
|
||||||
return nil, lastError
|
return 0, lastError
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, errors.Errorf("loading blob %v from %v packs failed", id.Str(), len(blobs))
|
return 0, errors.Errorf("loading blob %v from %v packs failed", id.Str(), len(blobs))
|
||||||
}
|
}
|
||||||
|
|
||||||
// closeOrErr calls cl.Close() and sets err to the returned error value if
|
// closeOrErr calls cl.Close() and sets err to the returned error value if
|
||||||
|
@ -177,17 +177,6 @@ func (r *Repository) LoadJSONUnpacked(t restic.FileType, id restic.ID, item inte
|
||||||
return json.Unmarshal(buf, item)
|
return json.Unmarshal(buf, item)
|
||||||
}
|
}
|
||||||
|
|
||||||
// LoadJSONPack calls LoadBlob() to load a blob from the backend, decrypt the
|
|
||||||
// data and afterwards call json.Unmarshal on the item.
|
|
||||||
func (r *Repository) LoadJSONPack(t restic.BlobType, id restic.ID, item interface{}) (err error) {
|
|
||||||
buf, err := r.LoadBlob(id, t, nil)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return json.Unmarshal(buf, item)
|
|
||||||
}
|
|
||||||
|
|
||||||
// LookupBlobSize returns the size of blob id.
|
// LookupBlobSize returns the size of blob id.
|
||||||
func (r *Repository) LookupBlobSize(id restic.ID, tpe restic.BlobType) (uint, error) {
|
func (r *Repository) LookupBlobSize(id restic.ID, tpe restic.BlobType) (uint, error) {
|
||||||
return r.idx.LookupSize(id, tpe)
|
return r.idx.LookupSize(id, tpe)
|
||||||
|
@ -588,10 +577,11 @@ func (r *Repository) LoadTree(id restic.ID) (*restic.Tree, error) {
|
||||||
debug.Log("repo.LoadTree", "size is %d, create buffer", size)
|
debug.Log("repo.LoadTree", "size is %d, create buffer", size)
|
||||||
buf := make([]byte, size)
|
buf := make([]byte, size)
|
||||||
|
|
||||||
buf, err = r.LoadBlob(id, restic.TreeBlob, buf)
|
n, err := r.loadBlob(id, restic.TreeBlob, buf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
buf = buf[:n]
|
||||||
|
|
||||||
t := &restic.Tree{}
|
t := &restic.Tree{}
|
||||||
err = json.Unmarshal(buf, t)
|
err = json.Unmarshal(buf, t)
|
||||||
|
@ -614,10 +604,11 @@ func (r *Repository) LoadDataBlob(id restic.ID, buf []byte) (int, error) {
|
||||||
return 0, errors.Errorf("buffer is too small for data blob (%d < %d)", len(buf), size)
|
return 0, errors.Errorf("buffer is too small for data blob (%d < %d)", len(buf), size)
|
||||||
}
|
}
|
||||||
|
|
||||||
buf, err = r.LoadBlob(id, restic.DataBlob, buf)
|
n, err := r.loadBlob(id, restic.DataBlob, buf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
buf = buf[:n]
|
||||||
|
|
||||||
debug.Log("repo.LoadDataBlob", "loaded %d bytes into buf %p", len(buf), buf)
|
debug.Log("repo.LoadDataBlob", "loaded %d bytes into buf %p", len(buf), buf)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue