svn_commit
svn_export
SVN Функции
PHP Manual

# svn_diff

(PECL svn >= 0.1.0)

svn_diff — Recursively diffs two paths

### Описание

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

Recursively diffs two paths, `path1` and `path2` .

> Замечание: This is not a general-purpose diff utility. Only local files that are versioned may be diffed: other files will fail.

### Список параметров

`path1`

  First path to diff. This can be a URL to a file/directory in an SVN repository or a local file/directory path.

  > Замечание: Relative paths will be resolved as if the current working directory was the one that contains the PHP binary. To use the calling script's working directory, use realpath() or dirname(__FILE__).

  Внимание

  If a local file path has only backslashes and no forward slashes, this extension will fail to find the path. Always replace all backslashes with forward slashes when using this function.

`rev1`

  First path's revision number. Use `SVN_REVISION_HEAD` to specify the most recent revision.

`path2`

  Second path to diff. See `path1` for description.

`rev2`

  Second path's revision number. See `rev1` for description.

### Возвращаемые значения

Returns an array-list consisting of two streams: the first is the diff output and the second contains error stream output. The streams can be read using fread(). Returns `FALSE` or `NULL` on error.

The diff output will, by default, be in the form of Subversion's custom unified diff format, but an » external diff engine may be used depending on Subversion's configuration.

### Примечания

Внимание

Эта функция является ЭКСПЕРИМЕНТАЛЬНОЙ. Поведение этой функции, ее имя и относящаяся к ней документация могут измениться в последующих версиях PHP без уведомления. Используйте эту функцию на свой страх и риск.

### Примеры

Пример #1 Basic example

This example demonstrates the basic usage of this function, and the retrieval of contents from the stream:

`<?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 Diffing two revisions of a repository path

This example implements a wrapper function that allows a user to easily diff two revisions of the same item using an external repository path (the default syntax is somewhat verbose):

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

Пример #3 Portably diffing two local files

This example implements a wrapper function that portably diffs two local files, compensating for the realpath() fix and the backslashes bug:

`<?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);
}
?>`

### Смотрите также

- » SVN documentation on svn diff

svn_commit
svn_export
SVN Функции
PHP Manual