diff options
author | Kevin Chabowski <kevin@kch42.de> | 2013-03-27 14:54:49 +0100 |
---|---|---|
committer | Kevin Chabowski <kevin@kch42.de> | 2013-03-27 14:54:49 +0100 |
commit | 5b8d50fc8b0929f758639089bb1186222cd21955 (patch) | |
tree | 1ff5f20e77dc8ee909813a65958ad2a0f2677d90 /librsync/helpers.go | |
parent | 10232b56dda085fafd7566b1dbb548d8438ea78b (diff) | |
download | golibrsync-5b8d50fc8b0929f758639089bb1186222cd21955.tar.gz golibrsync-5b8d50fc8b0929f758639089bb1186222cd21955.tar.bz2 golibrsync-5b8d50fc8b0929f758639089bb1186222cd21955.zip |
Added some helper functions.
These should make things more convenient (e.g. no need to Close() all the
objects)
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 +} |