Subversion svn_diff

(PECL svn >= 0.1.0)

svn_diff — 재귀 적으로 두 경로를 비교합니다.


설명

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

재귀적으로 path1path2의 두 경로를 비교합니다.

메모: 이것은 범용 diff 유틸리티가 아닙니다. 버전이 지정된 로컬 파일만 diff할 수 있습니다. 다른 파일은 실패합니다.


매개변수

path1
diff의 첫 번째 경로. 이것은 SVN 저장소의 파일/디렉토리 또는 로컬 파일/디렉토리 경로에 대한 URL일 수 있습니다.

참고: 상대 경로는 현재 작업 디렉터리가 PHP 바이너리가 포함된 디렉터리인 것처럼 확인됩니다. 호출 스크립트의 작업 디렉토리를 사용하려면 realpath() 또는 dirname(__FILE__)을 사용하십시오.

경고 로컬 파일 경로에 백슬래시만 있고 슬래시가 없는 경우 이 확장은 경로를 찾지 못합니다. 이 함수를 사용할 때는 항상 모든 백슬래시를 슬래시로 바꾸십시오.

rev1
첫 번째 경로의 개정 번호입니다. 가장 최근 버전을 지정하려면 SVN_REVISION_HEAD를 사용하십시오.
path2
diff의 두 번째 경로. 설명은 path1을 참조하십시오.
rev2
두 번째 경로의 개정 번호입니다. 설명은 rev1을 참조하십시오.

반환 값

두 개의 스트림으로 구성된 배열 목록을 반환합니다. 첫 번째는 diff 출력이고 두 번째는 오류 스트림 출력을 포함합니다. 스트림은 fread()를 사용하여 읽을 수 있습니다. 오류가 발생하면 false 또는 null을 반환합니다.

diff 출력은 기본적으로 Subversion의 사용자 정의 통합 diff 형식의 형식입니다. 그러나 Subversion의 구성에 따라 » external diff 엔진을 사용할 수 있습니다.


Examples

예제 #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 두 개의 로컬 파일을 이식 가능하게 비교

이 예제는 두 개의 로컬 파일을 이식 가능하게 diff하는 래퍼 함수를 ​​구현하여 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의 향후 릴리스에서 예고 없이 변경될 수 있습니다. 이 함수는 사용자의 책임하에 사용해야 합니다.


기타