二进制增量编码工具。
detools的Python项目详细描述
关于
python 3和c中的二进制delta encoding。
基于http://www.daemonology.net/bsdiff/,如下所示 差异:
BZ2、LZMA、Zstandard、heatshrink或CRLE压缩。
线性补丁文件访问模式,允许流和较少的RAM 用法。
SA-IS而不是qsufsort。
可变长度大小字段。
Incremental apply patch用c实现,适用于内存 受限制的嵌入式设备。
可选的实验数据格式感知算法 较小的补丁。我不建议任何人使用此功能 因为相对于内存使用和代码来说,增益很小 复杂性!
这项功能有可能使用专利 https://patents.google.com/patent/EP1988455B1/en。无论如何,这个 据我所知,专利将于2019年8月到期。
支持的数据格式:
- 臂皮质-M4
- AARCH64
安装
pipinstalldetools
统计
“lzma ref.”是用lzma --best压缩的目标二进制文件。
百分比计算为“补丁大小/到大小”。下面是 更好。
Update | To size | LZMA ref. | LZMA | heatshrink | CRLE |
---|---|---|---|---|---|
upy v1.9.4 -> v1.10 | 615388 | 59.8 % | 11.7 % | 15.7 % | 26.2 % |
python 3.5 -> 3.6 | 4568920 | 30.7 % | 31.8 % | - | - |
foo old -> new | 2780 | 69.5 % | 4.5 % | 4.5 % | 6.8 % |
示例用法
c中的示例可以在src/c中找到。
命令行工具
创建修补程序子命令
创建修补程序foo.patch从tests/files/foo/old到 tests/files/foo/new。
$ detools create_patch tests/files/foo/old tests/files/foo/new foo.patch Successfully created patch 'foo.patch'! $ ls -l foo.patch -rw-rw-r-- 1 erik erik 127 Mar 1 19:18 foo.patch
创建与上面相同的面片,但不压缩。
$ detools create_patch --compression none \ tests/files/foo/old tests/files/foo/new foo-no-compression.patch Successfully created patch 'foo-no-compression.patch'! $ ls -l foo-no-compression.patch -rw-rw-r-- 1 erik erik 2792 Mar 1 19:18 foo-no-compression.patch
创建就地修补程序foo-in-place.patch。
$ detools create_patch --type in-place --memory-size 3000 --segment-size 500 \ tests/files/foo/old tests/files/foo/new foo-in-place.patch Successfully created patch 'foo-in-place.patch'! $ ls -l foo-in-place.patch -rw-rw-r-- 1 erik erik 672 Mar 16 08:49 foo-in-place.patch
创建bsdiff修补程序foo-bsdiff.patch,与 原始bsdiff程序。
$ detools create_patch --type bsdiff \ tests/files/foo/old tests/files/foo/new foo-bsdiff.patch Successfully created patch 'foo-bsdiff.patch'! $ ls -l foo-bsdiff.patch -rw-rw-r-- 1 erik erik 261 Apr 22 18:20 foo-bsdiff.patch
apply patch子命令
将修补程序foo.patch应用到tests/files/foo/old以创建 foo.new。
$ detools apply_patch tests/files/foo/old foo.patch foo.new $ ls -l foo.new -rw-rw-r-- 1 erik erik 2780 Mar 1 19:18 foo.new
就地应用修补程序子命令
将就地修补程序foo-in-place.patch应用到foo.mem。
$ cp tests/files/foo/old foo.mem $ detools apply_patch_in_place foo.mem foo-in-place.patch $ ls -l foo.mem -rwxrwxr-x 1 erik erik 2780 Mar 16 08:51 foo.mem
bsdiff apply patch子命令
应用修补程序foo-bsdiff.patch到tests/files/foo/old到 创建foo.new。
$ detools apply_patch_bsdiff tests/files/foo/old foo-bsdiff.patch foo.new $ ls -l foo.new -rw-rw-r-- 1 erik erik 2780 Mar 1 19:18 foo.new
patch info子命令
打印有关修补程序foo.patch的信息。
$ detools patch_info foo.patch Type: normal Patch size: 127 bytes To size: 2.71 KiB Patch/to ratio: 4.6 % (lower is better) Diff/extra ratio: 9828.6 % (higher is better) Size/data ratio: 0.3 % (lower is better) Compression: lzma Number of diffs: 2 Total diff size: 2.69 KiB Average diff size: 1.34 KiB Median diff size: 1.34 KiB Number of extras: 2 Total extra size: 28 bytes Average extra size: 14 bytes Median extra size: 14 bytes
贡献
分叉存储库。
安装必备组件。
pip install -r requirements.txt
实现新功能或错误修复。
实施测试用例以确保将来的更改不会中断 遗产。
运行测试。
make test
创建拉取请求。