diff options
author | ben <ben@2b77aa54-bcbc-44c9-a7ec-4f6cf2b41109> | 2002-06-27 20:21:23 +0000 |
---|---|---|
committer | ben <ben@2b77aa54-bcbc-44c9-a7ec-4f6cf2b41109> | 2002-06-27 20:21:23 +0000 |
commit | 46cedd177d04372e1de7f67759a95c0d19d74ec3 (patch) | |
tree | 7329bcc875a4b1d45361d6bf0acb4fad16f20219 /rdiff-backup/rdiff_backup/myrdiff.py | |
parent | 3f44ce4239acd911683f05266934aa136538a3d9 (diff) | |
download | rdiff-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-x | rdiff-backup/rdiff_backup/myrdiff.py | 51 |
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],) |