From 01e40e62bf82308d676cdf003c3059fb0c211c53 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Sun, 24 Jan 2016 18:50:41 +0100 Subject: [PATCH] repo: Use Save() instead of Create() --- repository/repository.go | 35 ++++++++++------------------------- 1 file changed, 10 insertions(+), 25 deletions(-) diff --git a/repository/repository.go b/repository/repository.go index a3ed9c60f..275d6fdee 100644 --- a/repository/repository.go +++ b/repository/repository.go @@ -265,44 +265,29 @@ func (r *Repository) SaveJSON(t pack.BlobType, item interface{}) (backend.ID, er // SaveJSONUnpacked serialises item as JSON and encrypts and saves it in the // backend as type t, without a pack. It returns the storage hash. func (r *Repository) SaveJSONUnpacked(t backend.Type, item interface{}) (backend.ID, error) { - // create file - blob, err := r.be.Create() - if err != nil { - return backend.ID{}, err - } - debug.Log("Repo.SaveJSONUnpacked", "create new blob %v", t) - - // hash - hw := backend.NewHashingWriter(blob, sha256.New()) - - // encrypt blob - ewr := crypto.EncryptTo(r.key, hw) - - enc := json.NewEncoder(ewr) - err = enc.Encode(item) + debug.Log("Repo.SaveJSONUnpacked", "save new blob %v", t) + plaintext, err := json.Marshal(item) if err != nil { return backend.ID{}, fmt.Errorf("json.Encode: %v", err) } - err = ewr.Close() + ciphertext := make([]byte, len(plaintext)+crypto.Extension) + ciphertext, err = crypto.Encrypt(r.key, ciphertext, plaintext) if err != nil { return backend.ID{}, err } - // finalize blob in the backend - hash := hw.Sum(nil) - sid := backend.ID{} - copy(sid[:], hash) + id := backend.Hash(ciphertext) + h := backend.Handle{Type: t, Name: id.String()} - err = blob.Finalize(t, sid.String()) + err = r.be.Save(h, ciphertext) if err != nil { - debug.Log("Repo.SaveJSONUnpacked", "error saving blob %v as %v: %v", t, sid, err) + debug.Log("Repo.SaveJSONUnpacked", "error saving blob %v: %v", h, err) return backend.ID{}, err } - debug.Log("Repo.SaveJSONUnpacked", "new blob %v saved as %v", t, sid) - - return sid, nil + debug.Log("Repo.SaveJSONUnpacked", "blob %v saved", h) + return id, nil } // Flush saves all remaining packs.