diff options
Diffstat (limited to 'librsync/helpers.go')
-rw-r--r-- | librsync/helpers.go | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/librsync/helpers.go b/librsync/helpers.go new file mode 100644 index 0000000..e560275 --- /dev/null +++ b/librsync/helpers.go @@ -0,0 +1,73 @@ +package librsync + +import ( + "io" +) + +// Some helper functions to make things more convenient. + +// CreateSignature wraps around a signature generation job and copies the result to the signature writer. +func CreateSignature(basis io.Reader, signature io.Writer) error { + siggen, err := NewDefaultSignatureGen(basis) + if err != nil { + return err + } + defer siggen.Close() + + _, err = io.Copy(signature, siggen) + return err +} + +// CreateDelta wraps around a delta generation job and copies the result to the delta writer. +func CreateDelta(signature, newfile io.Reader, delta io.Writer) error { + sig, err := LoadSignature(signature) + if err != nil { + return err + } + defer sig.Close() + + deltagen, err := NewDeltaGen(sig, newfile) + if err != nil { + return err + } + defer deltagen.Close() + + _, err = io.Copy(delta, deltagen) + return err +} + +// InstantDelta creates a delta file without the extra step of creating a signature. +func InstantDelta(basis, newfile io.Reader, delta io.Writer) error { + siggen, err := NewDefaultSignatureGen(basis) + if err != nil { + return err + } + defer siggen.Close() + + sig, err := LoadSignature(siggen) + if err != nil { + return err + } + defer sig.Close() + + deltagen, err := NewDeltaGen(sig, newfile) + if err != nil { + return err + } + defer deltagen.Close() + + _, err = io.Copy(delta, deltagen) + return err +} + +// Patch wraps around a Patcher job and copies the result to newfile. +func Patch(basis io.ReaderAt, delta io.Reader, newfile io.Writer) error { + patcher, err := NewPatcher(delta, basis) + if err != nil { + return err + } + defer patcher.Close() + + _, err = io.Copy(newfile, patcher) + return err +} |