Наша группа в телеграмм для обмена идеями, проектами, мыслями, людьми в сфере ИТ г.Ростова-на-Дону: @it_rostov

svn_diff

(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 Простой пример

Пример ниже иллюстрирует простое использование данной функции и получение данных из потока.


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 Вывод различий между двумя ревизиями одного файла

Этот пример показывает как реализовать функцию-обертку, которая позволяет пользователю просматривать различия между двумя ревизиями одного файла, используя внешний путь репозитария (стандартный синтаксис такой реализации несколько избыточен):


function svn_diff_same_item($path, $rev1, $rev2) {
    return svn_diff($path, $rev1, $path, $rev2);
}

Пример #3 Более удобный способ вывода различий между двумя файла

Этот пример показывает как реализовать функцию-обертку для вывода различий между двумя локальными файлами, которая является переносимой и лишена ошибок при работе с функцией realpath() и обратным слэшом.


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


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


Описание на ru2.php.net
Описание на php.ru

.

Популярное:


Содержание: