3 个不稳定版本

使用旧的 Rust 2015

0.2.1 2016 年 9 月 9 日
0.1.1 2016 年 9 月 7 日
0.1.0 2016 年 8 月 16 日

#6 in #ot

MIT 许可证

99KB
1.5K SLoC

Optra

Build Status

Optra 是一个允许远程文件同步的 Rust 包。它提供了保持文件同步所需的算法,但不提供传输或文件更改检测所需的功能。这些功能分别由 wamp-rsrdiff 提供,或者您可以使用自己的机制。

Optra 目前需要 nightly rust 构建,因为它使用了链表的就地插入,这是一个功能门控(见 文档)。

Optra 使用 MIT 许可证(见 LICENSE

文档

使用方法

该引擎基于基于可接受性序列变换算法(doi: 10.1109/TPDS.2010.64),这是一种操作变换类型。想法是,每个想要同步文件的位置都将有一个 Engine 实例正在运行。对文件所做的任何更改都应通过引擎使用 process_diffs()process_transaction() 在广播之前执行。对远程站点所做的任何更改都应在将其应用于文件之前使用 integrate_remote() 执行。

该包通常与 rdiff 工作良好,但可以与任何生成仅限于插入和删除的差分操作的系统一起工作。

要使用,只需在您的 Cargo.toml 文件中包含以下内容

[dependencies]
optra = "^0.2"

即可

示例

假设您有一个从远程站点读取事务的 read_transaction 方法,将远程更改集成到本地文件的过程如下

let (mut remote_sequence, remote_lookup) = read_transaction();
engine.integrate_remote(&mut remote_sequence, &remote_lookup, &mut time_stamper);
let mut file = OpenOptions::new()
               .read(true)
               .write(true)
               .open("local_file")
               .unwrap();
remote_sequence.apply(&mut file).unwrap();

另一方面,如果您有一个检测到本地文件差异的 Diff,您可以对 diff 进行处理,然后将其发送出去(假设您有一个名为 send_transaction() 的方法)

let diffs = file_hashes.diff_and_update(File::open("local_file").unwrap()).unwrap();
let (transaction, lookup) = engine.process_diffs(diffs, &mut time_stamper);
send_transaction(transaction, lookup);

依赖关系

~4MB
~57K SLoC