diff options
author | n-peugnet <n.peugnet@free.fr> | 2021-09-23 18:10:30 +0200 |
---|---|---|
committer | n-peugnet <n.peugnet@free.fr> | 2021-09-23 18:10:30 +0200 |
commit | a07bbe4ef22d642347d18f0e0a62d24868500d23 (patch) | |
tree | dd634dc57d5525033146c197dc6822a8c0466eb0 /delta.go | |
parent | e4f6bf0d972b8e851a6fcaa20c1f305680f61884 (diff) | |
download | dna-backup-a07bbe4ef22d642347d18f0e0a62d24868500d23.tar.gz dna-backup-a07bbe4ef22d642347d18f0e0a62d24868500d23.zip |
Testing with Fdelta as the differ
Diffstat (limited to 'delta.go')
-rw-r--r-- | delta.go | 43 |
1 files changed, 35 insertions, 8 deletions
@@ -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 +} |