From 5b8d50fc8b0929f758639089bb1186222cd21955 Mon Sep 17 00:00:00 2001 From: Kevin Chabowski Date: Wed, 27 Mar 2013 14:54:49 +0100 Subject: Added some helper functions. These should make things more convenient (e.g. no need to Close() all the objects) --- librsync/helpers.go | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 librsync/helpers.go (limited to 'librsync/helpers.go') 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 +} -- cgit v1.2.3-54-g00ecf