aboutsummaryrefslogtreecommitdiff
path: root/librsync/helpers.go
diff options
context:
space:
mode:
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
+}