0.23
All checks were successful
Build / Build project (push) Successful in 22s

This commit is contained in:
Alexander Zhirov 2025-08-30 23:19:41 +03:00
parent 2e381f5605
commit 1c6fe3b548
Signed by: alexander
GPG key ID: C8D8BE544A27C511
3 changed files with 55 additions and 0 deletions

24
README.md Normal file
View 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
View 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
View 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