Рекурсивно показывает различия двух файлов


(PECL svn >= 0.1.0)

svn_diffРекурсивно показывает различия двух файлов

Описание

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

Рекурсивно показывает различия двух файлов path1 и path2.

Замечание:

Это не инструмент просмотра общих изменений. Могут быть просмотрены различия только локальных файлов, которые находятся в системе контроля версий SVN : для других файлов различия просмотреть не удастся.

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

path1

Первый путь. Это может быть URL файла/директории в репозитарии SVN или путь к локальному файлу/директории.

Замечание: Относительные пути будут вычислены, как если бы текущая рабочая директория являлась домашней папкой самого PHP. Чтобы использовать рабочую директорию вызывающего скрипта, используйте realpath() или dirname(__FILE__).

Внимание

Если путь к локальному файлу состоит только из обратных слэшей (\), без слэша (/), данному модулю не удастся найти необходимые файлы. Всегда заменяйте все обратные слэши (\) на слэши (/) используя эту функцию.

rev1

Номер ревизии первого файла. Используйте константу SVN_REVISION_HEAD для задания самой последней ревизии.

path2

Второй путь к файлу, аналогично path1

rev2

Номер ревизии второго файла, аналогично rev1.

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

Возвращает список массивов состоящий из двух потоков: первая - различия файлов; вторая - ошибки. Потоки могут быть прочитаны функцией fread(). При ошибке возвращает FALSE или NULL.

По умолчанию, вывод различий будет в стандартном формате Subversion, но также может использоваться »  внешним инструментом показа различий, в зависимости от настройки Subversion.

Примечания

Внимание

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

Примеры

Пример #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($diff8192);
}
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);
}
?>