3 个不稳定版本
使用旧的 Rust 2015
0.2.1 | 2016 年 9 月 9 日 |
---|---|
0.1.1 | 2016 年 9 月 7 日 |
0.1.0 | 2016 年 8 月 16 日 |
#6 in #ot
99KB
1.5K SLoC
Optra
Optra 是一个允许远程文件同步的 Rust 包。它提供了保持文件同步所需的算法,但不提供传输或文件更改检测所需的功能。这些功能分别由 wamp-rs 和 rdiff 提供,或者您可以使用自己的机制。
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