内容简介:BinaryBased onThere is also a wrapper of
About
Binary delta encoding in Python 3 and C.
Based on http://www.daemonology.net/bsdiff/ , with the following differences:
-
BZ2, LZ4, LZMA, Zstandard , heatshrink or CRLE compression.
-
Linear patch file access pattern to allow streaming and less RAM usage.
-
SA-IS or divsufsort instead of qsufsort.
-
Variable length size fields.
-
Incremental apply patch implemented in C, suitable for memory constrained embedded devices.
-
Optional experimental data format aware algorithm for potentially smaller patches. I don't recommend anyone to use this functionality as the gain is small in relation to memory usage and code complexity!
There is a risk this functionality uses patent https://patents.google.com/patent/EP1988455B1/en . Anyway, this patent expires in August 2019 as I understand it.
Supported data formats:
- ARM Cortex-M4
- AArch64
There is also a wrapper of HDiffPatch , implementing basic operations. Adds a custom header, so it is not compatible with original HDiffPatch implementation as of today.
- See HDiffPatch for characteristics.
- Suitable for large files.
- Often slightly smaller patches than bsdiff.
- Often faster than bsdiff.
Project homepage: https://github.com/eerimoq/detools
Documentation: http://detools.readthedocs.org/en/latest
Installation
pip install detools
Statistics
The percentages are calculated as "patch size" / "to size". Lower is better.
Update | To size | normal | hdiffpatch |
---|---|---|---|
upy v1.9.4 -> v1.10 | 615388 | 11.7 % | 10.7 % |
python.tar 3.7 -> 3.8 | 87091200 | 4.1 % | 2.8 % |
foo old -> new | 2780 | 4.6 % | 5.3 % |
Example usage
Examples in C are found in src/c .
Command line tool
The create patch subcommand
Create a patch foo.patch
from tests/files/foo/old
to 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 feb 2 10:35 foo.patch
Create the same patch as above, but without compression.
$ 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 feb 2 10:35 foo-no-compression.patch
The create in-place patch subcommand
Create an in-place patch foo-in-place.patch
.
$ detools create_patch_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 feb 2 10:36 foo-in-place.patch
The create bsdiff patch subcommand
Create a bsdiff patch foo-bsdiff.patch
, compatible with the
original bsdiff program.
$ detools create_patch_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 feb 2 10:36 foo-bsdiff.patch
The create hdiffpatch patch subcommand
Create a hdiffpatch patch foo-hdiffpatch.patch
.
$ detools create_patch_hdiffpatch \ tests/files/foo/old tests/files/foo/new foo-hdiffpatch.patch Successfully created patch 'foo-hdiffpatch.patch'! $ ls -l foo-hdiffpatch.patch -rw-rw-r-- 1 erik erik 146 feb 2 10:37 foo-hdiffpatch.patch
Lower memory usage with --match-block-size
. Mainly useful for big
files. Creates slightly bigger patches.
$ detools create_patch_hdiffpatch --match-block-size 64 \ tests/files/foo/old tests/files/foo/new foo-hdiffpatch-64.patch Successfully created patch 'foo-hdiffpatch.patch'! $ ls -l foo-hdiffpatch-64.patch -rw-rw-r-- 1 erik erik 389 feb 2 10:38 foo-hdiffpatch-64.patch
The apply patch subcommand
Apply the patch foo.patch
to tests/files/foo/old
to create foo.new
.
$ detools apply_patch tests/files/foo/old foo.patch foo.new $ ls -l foo.new -rw-rw-r-- 1 erik erik 2780 feb 2 10:38 foo.new
The in-place apply patch subcommand
Apply the in-place patch foo-in-place.patch
to foo.mem
.
$ cp tests/files/foo/in-place-3000-500.mem foo.mem $ detools apply_patch_in_place foo.mem foo-in-place.patch $ ls -l foo.mem -rw-rw-r-- 1 erik erik 3000 feb 2 10:40 foo.mem
The bsdiff apply patch subcommand
Apply the patch foo-bsdiff.patch
to tests/files/foo/old
to
create 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 feb 2 10:41 foo.new
The patch info subcommand
Print information about the patch 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
Contributing
-
Fork the repository.
-
Install prerequisites.
pip install -r requirements.txt
-
Implement the new feature or bug fix.
-
Implement test case(s) to ensure that future changes do not break legacy.
-
Run the tests.
make test
-
Create a pull request.
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Uberland
Alex Rosenblat / University of California Press / 2018-11-19 / GBP 21.00
Silicon Valley technology is transforming the way we work, and Uber is leading the charge. An American startup that promised to deliver entrepreneurship for the masses through its technology, Uber ins......一起来看看 《Uberland》 这本书的介绍吧!