PHP Conference Japan 2024

svn_diff

(PECL svn >= 0.1.0)

svn_diff递归比较两个路径

描述

svn_diff(
    字符串 $path1,
    整数 $rev1,
    字符串 $path2,
    整数 $rev2
): 数组

递归比较两个路径,path1path2

注意:

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

参数

path1

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

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

警告

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

rev1

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

path2

第二个要比较的路径。请参阅 path1 以了解说明。

rev2

第二个路径的修订版本号。请参阅 rev1 以了解说明。

返回值

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

默认情况下,diff 输出将采用 Subversion 的自定义统一 diff 格式,但根据 Subversion 的配置,可以使用 » 外部 diff 引擎

示例

示例 #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