summaryrefslogtreecommitdiff
path: root/rdiff-backup/rdiff_backup/myrdiff.py
diff options
context:
space:
mode:
authorben <ben@2b77aa54-bcbc-44c9-a7ec-4f6cf2b41109>2002-06-27 20:21:23 +0000
committerben <ben@2b77aa54-bcbc-44c9-a7ec-4f6cf2b41109>2002-06-27 20:21:23 +0000
commit46cedd177d04372e1de7f67759a95c0d19d74ec3 (patch)
tree7329bcc875a4b1d45361d6bf0acb4fad16f20219 /rdiff-backup/rdiff_backup/myrdiff.py
parent3f44ce4239acd911683f05266934aa136538a3d9 (diff)
downloadrdiff-backup-46cedd177d04372e1de7f67759a95c0d19d74ec3.tar.gz
Directly interface to librsync instead of going through rdiff. Added
some supplementary scripts for testing. git-svn-id: http://svn.savannah.nongnu.org/svn/rdiff-backup/trunk@149 2b77aa54-bcbc-44c9-a7ec-4f6cf2b41109
Diffstat (limited to 'rdiff-backup/rdiff_backup/myrdiff.py')
-rwxr-xr-xrdiff-backup/rdiff_backup/myrdiff.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/rdiff-backup/rdiff_backup/myrdiff.py b/rdiff-backup/rdiff_backup/myrdiff.py
new file mode 100755
index 0000000..48485f7
--- /dev/null
+++ b/rdiff-backup/rdiff_backup/myrdiff.py
@@ -0,0 +1,51 @@
+#!/usr/bin/env python
+
+"""Like rdiff, but written in python and uses librsync module.
+
+Useful for benchmarking and testing of librsync and _librsync.
+
+"""
+
+import librsync, sys
+blocksize = 32768
+
+def makesig(inpath, outpath):
+ """Write a signature of inpath at outpath"""
+ sf = librsync.SigFile(open(inpath, "rb"))
+ fout = open(outpath, "wb")
+ while 1:
+ buf = sf.read(blocksize)
+ if not buf: break
+ fout.write(buf)
+ assert not sf.close()
+ assert not fout.close()
+
+def makedelta(sigpath, newpath, deltapath):
+ """Write delta at deltapath using signature at sigpath"""
+ df = librsync.DeltaFile(open(sigpath, "rb"), open(newpath, "rb"))
+ fout = open(deltapath, "wb")
+ while 1:
+ buf = df.read(blocksize)
+ if not buf: break
+ fout.write(buf)
+ assert not df.close()
+ assert not fout.close()
+
+def makepatch(basis_path, delta_path, new_path):
+ """Write new given basis and delta"""
+ pf = librsync.PatchedFile(open(basis_path, "rb"), open(delta_path, "rb"))
+ fout = open(new_path, "wb")
+ while 1:
+ buf = pf.read(blocksize)
+ if not buf: break
+ fout.write(buf)
+ assert not pf.close()
+ assert not fout.close()
+
+if sys.argv[1] == "signature":
+ makesig(sys.argv[2], sys.argv[3])
+elif sys.argv[1] == "delta":
+ makedelta(sys.argv[2], sys.argv[3], sys.argv[4])
+elif sys.argv[1] == "patch":
+ makepatch(sys.argv[2], sys.argv[3], sys.argv[4])
+else: assert 0, "Bad mode argument %s" % (sys.argv[1],)