aboutsummaryrefslogtreecommitdiff
path: root/delta
diff options
context:
space:
mode:
authorn-peugnet <n.peugnet@free.fr>2021-10-06 11:34:14 +0200
committern-peugnet <n.peugnet@free.fr>2021-10-06 11:34:14 +0200
commitfccc89de47a3ed5fc576f28f7f02b1111a59c0c4 (patch)
tree9de36f7e6eab07c78d59428b2345aceab34df9cd /delta
parent9b9710511b0dbe51ac030ef908f9468103b0bd0a (diff)
downloaddna-backup-fccc89de47a3ed5fc576f28f7f02b1111a59c0c4.tar.gz
dna-backup-fccc89de47a3ed5fc576f28f7f02b1111a59c0c4.zip
refactor: move repo and delta in their own package
Diffstat (limited to 'delta')
-rw-r--r--delta/delta.go59
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
+}