erlang-rsync is an Erlang wrapper of librsync
library. It provides basic functions for direct file manipulations
(sig/1
, delta/2
, etc) as well as low-level functions
for fine-grained control (sig_init/0
, delta_update/2
, etc).
The low-level interface is somewhat similar to the hashing functions
from crypto
module.
$ git clone git://github.com/zinid/erlang-rsync.git
$ cd erlang-rsync
$ ./configure
$ make
The whole API documentation is located in the doc
directory and can be built
using edoc
$ make doc
Let's say we have two files: local_file
and remote_file
, and we want local_file
to have the content of remote_file
.
We first generate the signature of local_file
. The signature is written in sig_file
:
> rsync:sig("local_file", "sig_file").
ok.
We then generate the delta from remote_file
and sig_file
.
The delta is written in delta_file
:
> rsync:delta("sig_file", "remote_file", "delta_file").
ok.
Finally, using delta_file
and local_file
we reconstruct remote_file
. The
result is written in new_local_file
.
> rsync:patch("local_file", "delta_file", "new_local_file").
ok.
Now new_local_file
is "equal" to remote_file
.
> file:read_file("new_local_file") == file:read_file("remote_file").
true.
For patch/2
, patch/3
and patch_init/1
functions to work the whole content of
the original file should be read into the memory.
This is due to a limitation of librsync API and Erlang's NIF API.
So don't use these functions for extremely large files.