Subversion svn_diff
(PECL svn >= 0.1.0)
svn_diff — 재귀 적으로 두 경로를 비교합니다.
설명
svn_diff( string $path1, int $rev1, string $path2, int $rev2 ): array
재귀적으로 path1
과 path2
의 두 경로를 비교합니다.
메모: 이것은 범용 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의 향후 릴리스에서 예고 없이 변경될 수 있습니다. 이 함수는 사용자의 책임하에 사용해야 합니다.