From fccc89de47a3ed5fc576f28f7f02b1111a59c0c4 Mon Sep 17 00:00:00 2001 From: n-peugnet Date: Wed, 6 Oct 2021 11:34:14 +0200 Subject: refactor: move repo and delta in their own package --- delta/delta.go | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 delta/delta.go (limited to 'delta') diff --git a/delta/delta.go b/delta/delta.go new file mode 100644 index 0000000..439da1d --- /dev/null +++ b/delta/delta.go @@ -0,0 +1,59 @@ +package delta + +import ( + "io" + + "github.com/gabstv/go-bsdiff/pkg/bsdiff" + "github.com/gabstv/go-bsdiff/pkg/bspatch" + "github.com/mdvan/fdelta" +) + +type Differ interface { + Diff(source io.Reader, target io.Reader, patch io.Writer) error +} + +type Patcher interface { + Patch(source io.Reader, target io.Writer, patch io.Reader) error +} + +type Bsdiff struct{} + +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 { + 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