This commit is contained in:
parent
2e381f5605
commit
1c6fe3b548
3 changed files with 55 additions and 0 deletions
24
README.md
Normal file
24
README.md
Normal file
|
@ -0,0 +1,24 @@
|
|||
# LibXDiff
|
||||
|
||||
[[Оригинальная библиотека]](http://www.xmailserver.org/xdiff-lib.html)|[[Модификация для сборки в CMake]](https://github.com/opencor/libxdiff)
|
||||
|
||||
Библиотека **LibXDiff** реализует базовые, но при этом полноценные функции для создания различий/патчей как для бинарных, так и для текстовых файлов. Она использует «файлы в памяти» (memory files) как абстракцию для достижения производительности и переносимости.
|
||||
|
||||
Для бинарных файлов LibXDiff реализует (с некоторыми изменениями) алгоритмы из статьи *File System Support for Delta Compression* Джошуа П. МакДональда и *Fingerprinting By Random Polynomials* Майкла О. Рабина. Для текстовых файлов библиотека следует принципам из статьи Юджина В. Майерса *An O(ND) Difference Algorithm and Its Variations*.
|
||||
|
||||
Файлы в памяти представляют собой набор буферов, хранящих содержимое файла. При передаче их в функции diff/patch есть два разных требования:
|
||||
|
||||
* Для **текстовых файлов** одна строка не должна пересекать границы блоков.
|
||||
* Для **бинарных файлов** требуется компактное представление, то есть весь файл хранится в одном блоке.
|
||||
|
||||
Функции внутри библиотеки позволяют обеспечить эти условия. Например:
|
||||
|
||||
* флаг `XDL_MMF_ATOMIC` гарантирует, что запись не будет разделена между блоками;
|
||||
* функции `xdl_mmfile_iscompact()`, `xdl_mmfile_compact()` и `xdl_mmfile_writeallocate()` позволяют проверить, компактен ли файл, и при необходимости создать его компактную версию.
|
||||
|
||||
Для текстовых файлов результат выводится в формате **unified diff**, но без заголовков файлов, так как результат всегда относится к сравнению ровно двух файлов.
|
||||
Вывод бинарных патчей — это **собственный двоичный формат**, который представляет собой набор команд *copy* и *insert*, как описано в статье МакДональда.
|
||||
|
||||
Библиотека совместима почти со всеми Unix-системами (через `configure`) и также поддерживает Windows (через `nmake`-файлы). Примеры использования можно найти в подкаталоге `test` дистрибутива, там же есть регрессионный тест: он генерирует случайные данные, выполняет diff и patch, а затем сравнивает результат.
|
||||
|
||||
Регрессионные тесты без ошибок работали сутками на Linux, Solaris, FreeBSD и Windows, что даёт основания считать библиотеку готовой к промышленному использованию (несмотря на её версию).
|
9
files/xdiff.pc
Normal file
9
files/xdiff.pc
Normal file
|
@ -0,0 +1,9 @@
|
|||
prefix=/usr
|
||||
includedir=${prefix}/include
|
||||
libdir=${prefix}/lib
|
||||
|
||||
Name: xdiff
|
||||
Description: LibXDiff - a library for generating file diffs/patches
|
||||
Version: 0.23
|
||||
Libs: -L${libdir} -lxdiff
|
||||
Cflags: -I${includedir}
|
22
package.yml
Normal file
22
package.yml
Normal file
|
@ -0,0 +1,22 @@
|
|||
name : libxdiff
|
||||
version : 0.23
|
||||
release : 1
|
||||
source :
|
||||
- https://github.com/opencor/libxdiff/archive/refs/tags/v0.23.tar.gz : 69b951c9d47873968975ba637d9cfd907f82b085b228d11dcf1f8b2afcafc9a8
|
||||
homepage : http://www.xmailserver.org/xdiff-lib.html
|
||||
license : LGPL-2.1-or-later
|
||||
component : system.utils
|
||||
summary : The LibXDiff library implements basic and yet complete functionalities to create file differences/patches to both binary and text files.
|
||||
description: |
|
||||
The LibXDiff library implements basic and yet complete functionalities to create file differences/patches to both binary and text files.
|
||||
setup : |
|
||||
%cmake_ninja \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DENABLE_TESTS=OFF \
|
||||
-DENABLE_TOOLS=OFF \
|
||||
-DCMAKE_INSTALL_PREFIX=/usr
|
||||
build : |
|
||||
%ninja_build
|
||||
install : |
|
||||
%ninja_install
|
||||
install -Dm644 $pkgfiles/xdiff.pc -t $installdir/usr/lib/pkgconfig
|
Loading…
Add table
Add a link
Reference in a new issue