freezer.engine.rsync.pyrsync module

This is a pure Python implementation of the [rsync algorithm] [TM96]. Updated to use SHA256 hashing (instead of the standard implementation which uses outdated MD5 hashes), and packages for disutils distribution by Isis Lovecruft, <isis@patternsinthevoid.net>. The majority of the code is blatantly stolen from Eric Pruitt’s code as posted on [ActiveState] [1]. [1]: https://code.activestate.com/recipes/577518-rsync-algorithm/ [TM96]: Andrew Tridgell and Paul Mackerras. The rsync algorithm. Technical Report TR-CS-96-05, Canberra 0200 ACT, Australia, 1996. https://samba.anu.edu.au/rsync/.

freezer.engine.rsync.pyrsync.rollingchecksum(removed, new, a, b, blocksize=4096)

Generates a new weak checksum when supplied with the internal state of the checksum calculation for the previous window, the removed byte, and the added byte.

freezer.engine.rsync.pyrsync.weakchecksum(data)

Generates a weak checksum from an iterable set of bytes.

freezer.engine.rsync.pyrsync.rsyncdelta(datastream, remotesignatures, blocksize=4096)

Generates a binary patch when supplied with the weak and strong hashes from an unpatched target and a readable stream for the up-to-date data. The blocksize must be the same as the value used to generate remotesignatures.

freezer.engine.rsync.pyrsync.blockchecksums(instream, blocksize=4096)

Returns a list of weak and strong hashes for each block of the defined size for the given data stream.