Skip to content

Olshansk/erlang-rsync

 
 

Repository files navigation

Erlang librsync wrapper

Build Status

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.

Building

Requirements

  • GNU Make.
  • GCC.
  • rebar.
  • librsync (runtime library and header files).
  • Erlang/OTP 17.1 or higher.

Installation

$ git clone git://github.com/zinid/erlang-rsync.git
$ cd erlang-rsync
$ ./configure
$ make

Usage

API

The whole API documentation is located in the doc directory and can be built using edoc

$ make doc

Example

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.

Limitation

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.

About

Erlang librsync wrapper

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Erlang 66.5%
  • C 29.0%
  • M4 3.1%
  • Makefile 1.4%