[PECL-CVS] [pecl-text-xdiff] main: add proper README
[email protected] (Rasmus Lerdorf) Tue, 7 Apr 2026 11:44:12 +0000
| Newsgroups | php.pecl.cvs |
|---|---|
| Message-ID | <[email protected]> |
Author: Rasmus Lerdorf (rlerdorf) Date: 2026-04-07T07:44:04-04:00 Commit: https://github.com/php/pecl-text-xdiff/commit/c5a711c6eeb6a7ffd7d3fc175c75e07ab2fb5015 Raw diff: https://github.com/php/pecl-text-xdiff/commit/c5a711c6eeb6a7ffd7d3fc175c75e07ab2fb5015.diff add proper README Changed paths: A README.md Diff: diff --git a/README.md b/README.md new file mode 100644 index 0000000..d172b1f --- /dev/null +++ b/README.md @@ -0,0 +1,104 @@ +# xdiff + +PHP extension for creating and applying patches to both text and binary files. Wraps the [libxdiff](http://www.xmailserver.org/xdiff-lib.html) library. + +## Installation + +### PIE (recommended) + +```bash +pie install pecl/xdiff +``` + +### PECL + +```bash +pecl install xdiff +``` + +### From source + +Requires libxdiff with `xdl_set_allocator`, `xdl_rabdiff`, and `XDL_PATCH_IGNOREBSPACE` support. + +```bash +phpize +./configure --with-xdiff +make +make install +``` + +## API + +### Diff + +#### `xdiff_string_diff(string $str1, string $str2, int $context = 3, bool $minimal = false): string|false` + +Creates a unified diff of two strings. `$context` sets the number of surrounding lines. `$minimal` reduces diff size at the cost of speed. + +#### `xdiff_file_diff(string $file1, string $file2, string $dest, int $context = 3, bool $minimal = false): bool` + +Creates a unified diff of two files and writes the result to `$dest`. + +#### `xdiff_string_diff_binary(string $str1, string $str2): string|false` + +Creates a binary diff of two strings. + +#### `xdiff_file_diff_binary(string $file1, string $file2, string $dest): bool` + +Creates a binary diff of two files and writes the result to `$dest`. + +#### `xdiff_string_rabdiff(string $str1, string $str2): string|false` + +Creates a binary diff of two strings using the Rabin fingerprint algorithm. + +#### `xdiff_file_rabdiff(string $file1, string $file2, string $dest): bool` + +Creates a binary diff of two files using the Rabin fingerprint algorithm and writes the result to `$dest`. + +### Patch + +#### `xdiff_string_patch(string $file, string $patch, int $flags = XDIFF_PATCH_NORMAL, ?string &$error = null): string|bool` + +Applies a unified patch to a string. Returns the patched string, or `false` on error. Rejected chunks are returned via `$error`. + +`$flags`: `XDIFF_PATCH_NORMAL` (default) or `XDIFF_PATCH_REVERSE`. + +#### `xdiff_file_patch(string $file, string $patch, string $dest, int $flags = XDIFF_PATCH_NORMAL): string|bool` + +Applies a unified patch from a file. Returns `true` on success, a string of rejected chunks on partial failure, or `false` on error. + +#### `xdiff_string_patch_binary(string $str, string $patch): string|false` + +Applies a binary patch to a string. Works with both bdiff and rabdiff patches. + +#### `xdiff_file_patch_binary(string $file, string $patch, string $dest): bool` + +Applies a binary patch from a file and writes the result to `$dest`. + +### Merge + +#### `xdiff_string_merge3(string $str1, string $str2, string $str3, ?string &$error = null): string|bool` + +Three-way merge of strings. Returns the merged string, or `false` on error. Conflicts are returned via `$error`. + +#### `xdiff_file_merge3(string $file1, string $file2, string $file3, string $dest): string|bool` + +Three-way merge of files. Returns `true` on success, a string of rejected chunks on conflict, or `false` on error. + +### Binary diff size + +#### `xdiff_string_bdiff_size(string $patch): int|false` + +Returns the size of the file that would be created by applying the given binary patch. + +#### `xdiff_file_bdiff_size(string $patch_file): int|false` + +Same as above, but reads the patch from a file. + +## Constants + +| Constant | Description | +|---|---| +| `XDIFF_PATCH_NORMAL` | Apply patch normally (default) | +| `XDIFF_PATCH_REVERSE` | Reverse the patch | +| `XDIFF_PATCH_IGNORESPACE` | Ignore whitespace when patching |