(PECL svn >= 0.1.0)
svn_diff — 遞迴比較兩個路徑的差異
遞迴比較兩個路徑 path1
和 path2
的差異。
注意:
這不是一個通用的差異比較工具。只有版本控制下的本地檔案可以進行比較:其他檔案將會失敗。
path1
要比較差異的第一個路徑。這可以是 SVN 儲存庫中檔案/目錄的 URL 或本地檔案/目錄路徑。
注意事項:相對路徑將會解析為如同目前工作目錄是包含 PHP 執行檔的目錄。要使用呼叫腳本的工作目錄,請使用 realpath() 或 dirname(__FILE__)。
如果本地檔案路徑只有反斜線而沒有正斜線,此擴充功能將無法找到路徑。使用此函式時,請務必將所有反斜線替換為正斜線。
rev1
第一個路徑的版本號碼。使用 SVN_REVISION_HEAD
指定最新版本。
path2
要比較的第二個路徑。有關說明,請參閱 path1
。
rev2
第二個路徑的版本號碼。有關說明,請參閱 rev1
。
傳回一個由兩個串流組成的陣列列表:第一個是 diff 輸出,第二個包含錯誤串流輸出。可以使用 fread() 讀取串流。發生錯誤時傳回 false
或 null
。
預設情況下,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 版本中可能會有所變更,恕不另行通知。使用此函式需自行承擔風險。