237 lines
8.1 KiB
PHP
237 lines
8.1 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace Safe;
|
||
|
|
||
|
use Safe\Exceptions\XdiffException;
|
||
|
|
||
|
/**
|
||
|
* Makes a binary diff of two files and stores the result in a patch file.
|
||
|
* This function works with both text and binary files. Resulting patch
|
||
|
* file can be later applied using xdiff_file_bpatch/xdiff_string_bpatch.
|
||
|
*
|
||
|
* @param string $old_file Path to the first file. This file acts as "old" file.
|
||
|
* @param string $new_file Path to the second file. This file acts as "new" file.
|
||
|
* @param string $dest Path of the resulting patch file. Resulting file contains differences
|
||
|
* between "old" and "new" files. It is in binary format and is human-unreadable.
|
||
|
* @throws XdiffException
|
||
|
*
|
||
|
*/
|
||
|
function xdiff_file_bdiff(string $old_file, string $new_file, string $dest): void
|
||
|
{
|
||
|
error_clear_last();
|
||
|
$result = \xdiff_file_bdiff($old_file, $new_file, $dest);
|
||
|
if ($result === false) {
|
||
|
throw XdiffException::createFromPhpError();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Patches a file with a binary
|
||
|
* patch and stores the result in a file dest.
|
||
|
* This function accepts patches created both via xdiff_file_bdiff
|
||
|
* and xdiff_file_rabdiff functions or their string counterparts.
|
||
|
*
|
||
|
* @param string $file The original file.
|
||
|
* @param string $patch The binary patch file.
|
||
|
* @param string $dest Path of the resulting file.
|
||
|
* @throws XdiffException
|
||
|
*
|
||
|
*/
|
||
|
function xdiff_file_bpatch(string $file, string $patch, string $dest): void
|
||
|
{
|
||
|
error_clear_last();
|
||
|
$result = \xdiff_file_bpatch($file, $patch, $dest);
|
||
|
if ($result === false) {
|
||
|
throw XdiffException::createFromPhpError();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Makes a binary diff of two files and stores the result in a patch file.
|
||
|
* This function works with both text and binary files. Resulting patch
|
||
|
* file can be later applied using xdiff_file_bpatch.
|
||
|
*
|
||
|
* Starting with version 1.5.0 this function is an alias of xdiff_file_bdiff.
|
||
|
*
|
||
|
* @param string $old_file Path to the first file. This file acts as "old" file.
|
||
|
* @param string $new_file Path to the second file. This file acts as "new" file.
|
||
|
* @param string $dest Path of the resulting patch file. Resulting file contains differences
|
||
|
* between "old" and "new" files. It is in binary format and is human-unreadable.
|
||
|
* @throws XdiffException
|
||
|
*
|
||
|
*/
|
||
|
function xdiff_file_diff_binary(string $old_file, string $new_file, string $dest): void
|
||
|
{
|
||
|
error_clear_last();
|
||
|
$result = \xdiff_file_diff_binary($old_file, $new_file, $dest);
|
||
|
if ($result === false) {
|
||
|
throw XdiffException::createFromPhpError();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Makes an unified diff containing differences between old_file and
|
||
|
* new_file and stores it in dest file. The
|
||
|
* resulting file is human-readable. An optional context parameter
|
||
|
* specifies how many lines of context should be added around each change.
|
||
|
* Setting minimal parameter to true will result in outputting the shortest
|
||
|
* patch file possible (can take a long time).
|
||
|
*
|
||
|
* @param string $old_file Path to the first file. This file acts as "old" file.
|
||
|
* @param string $new_file Path to the second file. This file acts as "new" file.
|
||
|
* @param string $dest Path of the resulting patch file.
|
||
|
* @param int $context Indicates how many lines of context you want to include in diff
|
||
|
* result.
|
||
|
* @param bool $minimal Set this parameter to TRUE if you want to minimalize size of the result
|
||
|
* (can take a long time).
|
||
|
* @throws XdiffException
|
||
|
*
|
||
|
*/
|
||
|
function xdiff_file_diff(string $old_file, string $new_file, string $dest, int $context = 3, bool $minimal = false): void
|
||
|
{
|
||
|
error_clear_last();
|
||
|
$result = \xdiff_file_diff($old_file, $new_file, $dest, $context, $minimal);
|
||
|
if ($result === false) {
|
||
|
throw XdiffException::createFromPhpError();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Patches a file with a binary
|
||
|
* patch and stores the result in a file dest.
|
||
|
* This function accepts patches created both via xdiff_file_bdiff
|
||
|
* or xdiff_file_rabdiff functions or their string counterparts.
|
||
|
*
|
||
|
* Starting with version 1.5.0 this function is an alias of xdiff_file_bpatch.
|
||
|
*
|
||
|
* @param string $file The original file.
|
||
|
* @param string $patch The binary patch file.
|
||
|
* @param string $dest Path of the resulting file.
|
||
|
* @throws XdiffException
|
||
|
*
|
||
|
*/
|
||
|
function xdiff_file_patch_binary(string $file, string $patch, string $dest): void
|
||
|
{
|
||
|
error_clear_last();
|
||
|
$result = \xdiff_file_patch_binary($file, $patch, $dest);
|
||
|
if ($result === false) {
|
||
|
throw XdiffException::createFromPhpError();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Makes a binary diff of two files and stores the result in a patch file.
|
||
|
* The difference between this function and xdiff_file_bdiff is different
|
||
|
* algorithm used which should result in faster execution and smaller diff produced.
|
||
|
* This function works with both text and binary files. Resulting patch
|
||
|
* file can be later applied using xdiff_file_bpatch/xdiff_string_bpatch.
|
||
|
*
|
||
|
* For more details about differences between algorithm used please check libxdiff
|
||
|
* website.
|
||
|
*
|
||
|
* @param string $old_file Path to the first file. This file acts as "old" file.
|
||
|
* @param string $new_file Path to the second file. This file acts as "new" file.
|
||
|
* @param string $dest Path of the resulting patch file. Resulting file contains differences
|
||
|
* between "old" and "new" files. It is in binary format and is human-unreadable.
|
||
|
* @throws XdiffException
|
||
|
*
|
||
|
*/
|
||
|
function xdiff_file_rabdiff(string $old_file, string $new_file, string $dest): void
|
||
|
{
|
||
|
error_clear_last();
|
||
|
$result = \xdiff_file_rabdiff($old_file, $new_file, $dest);
|
||
|
if ($result === false) {
|
||
|
throw XdiffException::createFromPhpError();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Patches a string str with a binary patch.
|
||
|
* This function accepts patches created both via xdiff_string_bdiff
|
||
|
* and xdiff_string_rabdiff functions or their file counterparts.
|
||
|
*
|
||
|
* @param string $str The original binary string.
|
||
|
* @param string $patch The binary patch string.
|
||
|
* @return string Returns the patched string.
|
||
|
* @throws XdiffException
|
||
|
*
|
||
|
*/
|
||
|
function xdiff_string_bpatch(string $str, string $patch): string
|
||
|
{
|
||
|
error_clear_last();
|
||
|
$result = \xdiff_string_bpatch($str, $patch);
|
||
|
if ($result === false) {
|
||
|
throw XdiffException::createFromPhpError();
|
||
|
}
|
||
|
return $result;
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Patches a string str with a binary patch.
|
||
|
* This function accepts patches created both via xdiff_string_bdiff
|
||
|
* and xdiff_string_rabdiff functions or their file counterparts.
|
||
|
*
|
||
|
* Starting with version 1.5.0 this function is an alias of xdiff_string_bpatch.
|
||
|
*
|
||
|
* @param string $str The original binary string.
|
||
|
* @param string $patch The binary patch string.
|
||
|
* @return string Returns the patched string.
|
||
|
* @throws XdiffException
|
||
|
*
|
||
|
*/
|
||
|
function xdiff_string_patch_binary(string $str, string $patch): string
|
||
|
{
|
||
|
error_clear_last();
|
||
|
$result = \xdiff_string_patch_binary($str, $patch);
|
||
|
if ($result === false) {
|
||
|
throw XdiffException::createFromPhpError();
|
||
|
}
|
||
|
return $result;
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Patches a str string with an unified patch in patch parameter
|
||
|
* and returns the result. patch has to be an unified diff created by
|
||
|
* xdiff_file_diff/xdiff_string_diff function.
|
||
|
* An optional flags parameter specifies mode of operation. Any
|
||
|
* rejected parts of the patch will be stored inside error variable if
|
||
|
* it is provided.
|
||
|
*
|
||
|
* @param string $str The original string.
|
||
|
* @param string $patch The unified patch string. It has to be created using xdiff_string_diff,
|
||
|
* xdiff_file_diff functions or compatible tools.
|
||
|
* @param int $flags flags can be either
|
||
|
* XDIFF_PATCH_NORMAL (default mode, normal patch)
|
||
|
* or XDIFF_PATCH_REVERSE (reversed patch).
|
||
|
*
|
||
|
* Starting from version 1.5.0, you can also use binary OR to enable
|
||
|
* XDIFF_PATCH_IGNORESPACE flag.
|
||
|
* @param string|null $error If provided then rejected parts are stored inside this variable.
|
||
|
* @return string Returns the patched string.
|
||
|
* @throws XdiffException
|
||
|
*
|
||
|
*/
|
||
|
function xdiff_string_patch(string $str, string $patch, int $flags = null, ?string &$error = null): string
|
||
|
{
|
||
|
error_clear_last();
|
||
|
if ($error !== null) {
|
||
|
$result = \xdiff_string_patch($str, $patch, $flags, $error);
|
||
|
} elseif ($flags !== null) {
|
||
|
$result = \xdiff_string_patch($str, $patch, $flags);
|
||
|
} else {
|
||
|
$result = \xdiff_string_patch($str, $patch);
|
||
|
}
|
||
|
if ($result === false) {
|
||
|
throw XdiffException::createFromPhpError();
|
||
|
}
|
||
|
return $result;
|
||
|
}
|