aboutsummaryrefslogtreecommitdiff
path: root/librsync/helpers.go
diff options
context:
space:
mode:
authorKevin Chabowski <kevin@kch42.de>2013-03-27 14:54:49 +0100
committerKevin Chabowski <kevin@kch42.de>2013-03-27 14:54:49 +0100
commit5b8d50fc8b0929f758639089bb1186222cd21955 (patch)
tree1ff5f20e77dc8ee909813a65958ad2a0f2677d90 /librsync/helpers.go
parent10232b56dda085fafd7566b1dbb548d8438ea78b (diff)
downloadgolibrsync-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.go73
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
+}