A SmartFile Open Source project. Read more about how SmartFile uses and contributes to Open Source software.
A ctypes wrapper for librsync. Provides signature()
, delta()
, and
patch()
functions.
There are three steps necessary to synchronize a file. Two steps are performed on the source file and one on the destination.
- Generate a signature for the destination file.
- Generate a delta for the source file (using the signature).
- Patch the destination file using the generated delta.
Usually, these steps involve remote systems. Here is an example of synchronizing two local files.
import librsync
# The destination file.
dst = open('Resume-v1.0.pdf', 'rb')
# The source file.
src = open('Resume-v1.2.pdf', 'rb')
# Where we will write the synchronized copy.
synced = open('Resume-latest.pdf', 'wb')
# Step 1: prepare signature of the destination file
signature = librsync.signature(dst)
# Step 2: prepare a delta of the source file
delta = librsync.delta(src, signature)
# Step 3: synchronize the files.
# In many cases, you would overwrite the destination with the result of
# synchronization. However, by default a new file is created.
librsync.patch(dst, delta, synced)
This wrapper only exposes the most common operations that librsync provides. It is not meant to be a full wrapper, but should cover most use-cases. You can easily extend this wrapper. Information about librsync is available in it's manual which is linked below (I wish I had found this BEFORE writing this wrapper!)