From a07bbe4ef22d642347d18f0e0a62d24868500d23 Mon Sep 17 00:00:00 2001 From: n-peugnet Date: Thu, 23 Sep 2021 18:10:30 +0200 Subject: Testing with Fdelta as the differ --- delta.go | 43 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 8 deletions(-) (limited to 'delta.go') diff --git a/delta.go b/delta.go index ff42e86..a127580 100644 --- a/delta.go +++ b/delta.go @@ -5,13 +5,9 @@ import ( "github.com/gabstv/go-bsdiff/pkg/bsdiff" "github.com/gabstv/go-bsdiff/pkg/bspatch" + "github.com/mdvan/fdelta" ) -type DeltaCodec interface { - Differ - Patcher -} - type Differ interface { Diff(source io.Reader, target io.Reader, patch io.Writer) error } @@ -20,13 +16,44 @@ type Patcher interface { Patch(source io.Reader, target io.Writer, patch io.Reader) error } -// TODO: maybe move this in its own file ? type Bsdiff struct{} -func (*Bsdiff) Diff(source io.Reader, target io.Reader, patch io.Writer) error { +func (Bsdiff) Diff(source io.Reader, target io.Reader, patch io.Writer) error { return bsdiff.Reader(source, target, patch) } -func (*Bsdiff) Patch(source io.Reader, target io.Writer, patch io.Reader) error { +func (Bsdiff) Patch(source io.Reader, target io.Writer, patch io.Reader) error { return bspatch.Reader(source, target, patch) } + +type Fdelta struct{} + +func (Fdelta) Diff(source io.Reader, target io.Reader, patch io.Writer) error { + sourceBuf, err := io.ReadAll(source) + if err != nil { + return err + } + targetBuf, err := io.ReadAll(target) + if err != nil { + return err + } + _, err = patch.Write(fdelta.Create(sourceBuf, targetBuf)) + return err +} + +func (Fdelta) Patch(source io.Reader, target io.Writer, patch io.Reader) error { + sourceBuf, err := io.ReadAll(source) + if err != nil { + return err + } + patchBuf, err := io.ReadAll(patch) + if err != nil { + return err + } + targetBuf, err := fdelta.Apply(sourceBuf, patchBuf) + if err != nil { + return err + } + _, err = target.Write(targetBuf) + return err +} -- cgit v1.2.3