#delta #version-control #text #diff #fossil #encoded-string

化石-delta

提供计算字符串之间差异并应用计算出的差分的函数

8 个版本

0.2.0 2023 年 1 月 14 日
0.1.6 2019 年 9 月 27 日
0.1.5 2019 年 7 月 9 日

#1093 in 算法


用于 2 crates

MIT 许可证

27KB
489

将 Delta 算法移植到 Rust

此算法在 fossil 中使用,该算法已在 C-99 中实现。此 crate 包含用 Rust 实现的相同算法。

它导出两个函数:delta(a:&str, b:&str) -> Stringdeltainv(b:&str, d:&str) -> String

// creating delta between a and its next version b
let d = delta(a, b);

// applying delta to b to get previous version a
let s = deltainv(b, d);

assert_eq!(s, a);

假设我们有一些文本值 a,用户将其更改为值 b。使用 delta 函数,我们可以获取一个压缩的差分值 d,我们可以将其存储并与其新文本值 b 一起保存。如果以后用户想查看之前的文本版本,我们可以使用 deltainv(b, d) 来获取之前的值 a。如果我们保留所有连续的差分,我们可以多次使用 deltainv 来获取任何早期的文本版本。

在两个 utf-8 编码字符串之间计算出的差分值本身是 utf-8 编码的字符串。

该算法在 fossil wiki 中的 这里 有很好的描述。

此存储库的代码最佳查看方式是使用Leo 编辑器。包含代码的概要文件在单个文件中:fossil-delta-ref.leo

此存储库还包含两个 Rust 包,py-fossil-delta,它将 fossil-delta 函数作为扩展模块导出到 Python。

第三个包是leo-ver-serv,这是一个二进制(可执行)的 Web 服务器,可以接收来自 Leo 的快照,计算与上一个快照的差异,并将所有差异存储在数据库中。另一方面,此服务器提供一个小型 Web 应用程序,允许用户浏览已知的 Leo 文件的历史记录。

无运行时依赖