From d38e6e0cf5a9790f4e774f6900c4b02a62e9e034 Mon Sep 17 00:00:00 2001 From: n-peugnet Date: Wed, 13 Oct 2021 15:42:17 +0200 Subject: try to make loadDeltas more robust aginst code change --- repo/repo.go | 24 +++++++----------------- repo/testdata/repo_8k_zlib/00000/files | Bin 114 -> 169 bytes repo/testdata/repo_8k_zlib/00000/hashes | Bin 570 -> 570 bytes repo/testdata/repo_8k_zlib/00000/recipe | Bin 2084 -> 2095 bytes 4 files changed, 7 insertions(+), 17 deletions(-) (limited to 'repo') diff --git a/repo/repo.go b/repo/repo.go index 27df54e..b8c07f2 100644 --- a/repo/repo.go +++ b/repo/repo.go @@ -337,14 +337,7 @@ func storeDelta(prevRaw []byte, curr interface{}, dest string, differ delta.Diff var encoder *gob.Encoder var err error - if len(prevRaw) == 0 { - encoder = gob.NewEncoder(&prevBuff) - if err = encoder.EncodeValue(reflect.ValueOf(curr)); err != nil { - logger.Panic(err) - } - } else { - prevBuff = *bytes.NewBuffer(prevRaw) - } + prevBuff = *bytes.NewBuffer(prevRaw) encoder = gob.NewEncoder(&currBuff) if err = encoder.Encode(curr); err != nil { logger.Panic(err) @@ -366,16 +359,10 @@ func storeDelta(prevRaw []byte, curr interface{}, dest string, differ delta.Diff } } -func loadDeltas(target interface{}, versions []string, patcher delta.Patcher, wrapper utils.ReadWrapper, name string) []byte { +func loadDeltas(target interface{}, versions []string, patcher delta.Patcher, wrapper utils.ReadWrapper, name string) (ret []byte) { var prev bytes.Buffer - var encoder *gob.Encoder var err error - encoder = gob.NewEncoder(&prev) - if err = encoder.Encode(target); err != nil { - logger.Panic(err) - } - for _, v := range versions { var curr bytes.Buffer path := filepath.Join(v, name) @@ -398,12 +385,15 @@ func loadDeltas(target interface{}, versions []string, patcher delta.Patcher, wr logger.Panic(err) } } - ret := prev.Bytes() + ret = prev.Bytes() + if len(ret) == 0 { + return + } decoder := gob.NewDecoder(&prev) if err = decoder.Decode(target); err != nil { logger.Panic(err) } - return ret + return } // storeFileList stores the given list in the repo dir as a delta against the diff --git a/repo/testdata/repo_8k_zlib/00000/files b/repo/testdata/repo_8k_zlib/00000/files index e9bb403..98a7a44 100644 Binary files a/repo/testdata/repo_8k_zlib/00000/files and b/repo/testdata/repo_8k_zlib/00000/files differ diff --git a/repo/testdata/repo_8k_zlib/00000/hashes b/repo/testdata/repo_8k_zlib/00000/hashes index 8c6a857..ec622b2 100644 Binary files a/repo/testdata/repo_8k_zlib/00000/hashes and b/repo/testdata/repo_8k_zlib/00000/hashes differ diff --git a/repo/testdata/repo_8k_zlib/00000/recipe b/repo/testdata/repo_8k_zlib/00000/recipe index 7d33a6a..ef8e6d1 100644 Binary files a/repo/testdata/repo_8k_zlib/00000/recipe and b/repo/testdata/repo_8k_zlib/00000/recipe differ -- cgit v1.2.3