svn_diff

(PECL svn >= 0.1.0)

svn_diff递归比较两个路径

描述

svn_diff(
    string $path1,
    int $rev1,
    string $path2,
    int $rev2
): array

递归比较两个路径,path1path2

注意:

这不是一个通用的 diff 工具。只有版本控制的本地文件才能进行比较:其他文件将失败。

参数

path1

要比较的第一个路径。可以是 SVN 存储库中文件/目录的 URL,也可以是本地文件/目录路径。

注意: 相对路径将被解析,就好像当前工作目录是包含 PHP 二进制文件的目录一样。要使用调用脚本的工作目录,请使用 realpath() 或 dirname(__FILE__)。

警告

如果本地文件路径只有反斜杠,没有正斜杠,则此扩展将无法找到该路径。使用此函数时,始终将所有反斜杠替换为正斜杠。

rev1

第一个路径的版本号。使用 SVN_REVISION_HEAD 指定最新版本。

path2

要比较的第二个路径。有关描述,请参见 path1

rev2

第二个路径的版本号。有关描述,请参见 rev1

返回值

返回一个数组列表,包含两个流:第一个是 diff 输出,第二个包含错误流输出。可以使用 fread() 读取这些流。如果发生错误,则返回 falsenull

默认情况下,diff 输出将采用 Subversion 的自定义统一 diff 格式,但可能会使用 » 外部 diff 引擎,具体取决于 Subversion 的配置。

示例

示例 #1 基本示例

此示例演示了此函数的基本用法以及从流中检索内容的方法

<?php
list($diff, $errors) = svn_diff(
'http://www.example.com/svnroot/trunk/foo', SVN_REVISION_HEAD,
'http://www.example.com/svnroot/branches/dev/foo', SVN_REVISION_HEAD
);
if (!
$diff) exit;
$contents = '';
while (!
feof($diff)) {
$contents .= fread($diff, 8192);
}
fclose($diff);
fclose($errors);
var_dump($contents);
?>

上面的示例将输出

Index: http://www.example.com/svnroot/trunk/foo
===================================================================
--- http://www.example.com/svnroot/trunk/foo        (.../foo) (revision 23)
+++ http://www.example.com/svnroot/branches/dev/foo (.../foo) (revision 27)
 // further diff output

示例 #2 比较存储库路径的两个版本

此示例实现了一个包装函数,允许用户使用外部存储库路径轻松比较同一项目的两个版本(默认语法有些冗长)

<?php
function svn_diff_same_item($path, $rev1, $rev2) {
return
svn_diff($path, $rev1, $path, $rev2);
}
?>

示例 #3 可移植地比较两个本地文件

此示例实现了一个包装函数,可移植地比较两个本地文件,补偿 realpath() 修复和反斜杠错误

<?php
function svn_diff_local($path1, $rev1, $path2, $rev2) {
$path1 = str_replace('\\', '/', realpath($path1));
$path2 = str_replace('\\', '/', realpath($path2));
return
svn_diff($path1, $rev1, $path2, $rev2);
}
?>

注释

警告

此函数是实验性的。此函数的行为、名称和周围的文档可能在 PHP 的未来版本中发生变化,恕不另行通知。使用此函数的风险自负。

添加注释

用户贡献的注释

此页面没有用户贡献的注释。
To Top