diff options
author | n-peugnet <n.peugnet@free.fr> | 2021-10-06 11:34:14 +0200 |
---|---|---|
committer | n-peugnet <n.peugnet@free.fr> | 2021-10-06 11:34:14 +0200 |
commit | fccc89de47a3ed5fc576f28f7f02b1111a59c0c4 (patch) | |
tree | 9de36f7e6eab07c78d59428b2345aceab34df9cd /delta/delta.go | |
parent | 9b9710511b0dbe51ac030ef908f9468103b0bd0a (diff) | |
download | dna-backup-fccc89de47a3ed5fc576f28f7f02b1111a59c0c4.tar.gz dna-backup-fccc89de47a3ed5fc576f28f7f02b1111a59c0c4.zip |
refactor: move repo and delta in their own package
Diffstat (limited to 'delta/delta.go')
-rw-r--r-- | delta/delta.go | 59 |
1 files changed, 59 insertions, 0 deletions
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 +} |