二进制增量编码工具。

detools的Python项目详细描述


buildstatusappveyorcoveragecodecov

关于

python 3和c中的二进制delta encoding

基于http://www.daemonology.net/bsdiff/,如下所示 差异:

  • BZ2、LZMA、Zstandardheatshrink或CRLE压缩。

  • 线性补丁文件访问模式,允许流和较少的RAM 用法。

  • SA-IS而不是qsufsort。

  • 可变长度大小字段。

  • Incremental apply patch用c实现,适用于内存 受限制的嵌入式设备。

  • Normalin-place(可恢复)更新。

  • 可选的实验数据格式感知算法 较小的补丁。我不建议任何人使用此功能 因为相对于内存使用和代码来说,增益很小 复杂性!

    这项功能有可能使用专利 https://patents.google.com/patent/EP1988455B1/en。无论如何,这个 据我所知,专利将于2019年8月到期。

    支持的数据格式:

    • 臂皮质-M4
    • AARCH64

项目主页:https://github.com/eerimoq/detools

文档:http://detools.readthedocs.org/en/latest

安装

pipinstalldetools

统计

“lzma ref.”是用lzma --best压缩的目标二进制文件。

百分比计算为“补丁大小/到大小”。下面是 更好。

UpdateTo sizeLZMA ref.LZMAheatshrinkCRLE
upy v1.9.4 -> v1.1061538859.8 %11.7 %15.7 %26.2 %
python 3.5 -> 3.6456892030.7 %31.8 %--
foo old -> new278069.5 %4.5 %4.5 %6.8 %

示例用法

c中的示例可以在src/c中找到。

命令行工具

创建修补程序子命令

创建修补程序foo.patchtests/files/foo/oldtests/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.patchtests/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

贡献

  1. 分叉存储库。

  2. 安装必备组件。

    pip install -r requirements.txt
    
  3. 实现新功能或错误修复。

  4. 实施测试用例以确保将来的更改不会中断 遗产。

  5. 运行测试。

    make test
    
  6. 创建拉取请求。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JavaSpringbean已创建但未自动连接   java LibGDX游戏在三星Galaxy Grand Prime上结束   如何在Java中列出字符串句子中所有匹配条件的单词   java在Recyclerview中使用“putExtra”传递数据   java从一个特定的数组中提取特定的JSON对象,以便在Android中通过一个意图放入另一个活动   java需要使用IntelliJ和设置项目SDK的帮助   java springcontextindexer和Swagger 3   java使用indexOf和substring计算数字   java使用xml解析在word文档中查找隐式分页符   在添加<context:componentscan basepackage=“com.young.user”/   java无条件更改JTable单元格的背景色   选择列表中的java调用oracle函数:节点无数据类型   java如何添加缓冲图像作为JFrame的背景,然后在此图像上添加面板?   java Javadoc找不到用scala编写的类   java连接到文件共享程序的IP地址   java将数组元素加载到集合中   Tomcat中的java servlet、过滤器和线程   非Bean对象中的java EJB CDI注入?   java与println和printf的不同舍入