International PHP Conference Munich 2025

svn_diff

(PECL svn >= 0.1.0)

svn_diffDiferencia recursivamente dois caminhos

Descrição

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

Diferencia recursivamente dois caminhos, path1 e path2.

Nota:

Este não é um utilitário de comparação de uso geral. Somente arquivos locais que são versionados podem ser comparados: outros arquivos falharão.

Parâmetros

path1

Primeiro caminho. Pode ser uma URL para um arquivo/diretório em um repositório SVN ou um caminho de arquivo/diretório local.

Nota: Os caminhos relativos serão resolvidos como se o diretório de trabalho atual fosse aquele que contém o binário do PHP. Para usar o diretório de trabalho do script de chamada, use realpath() ou dirname(__FILE__).

Aviso

Se um caminho de arquivo local tiver apenas barras invertidas e nenhuma barra normal, esta extensão não conseguirá encontrar o caminho. Sempre substitua todas as barras invertidas por barras normais ao usar esta função.

rev1

Número de revisão do primeiro caminho. Use SVN_REVISION_HEAD para especificar a revisão mais recente.

path2

Segundo caminho. Veja path1 para descrição.

rev2

Número de revisão do segundo caminho. Veja rev1 para descrição.

Valor Retornado

Retorna uma lista de arrays composta por dois fluxos: o primeiro é a saída do diff e o segundo contém a saída do fluxo de erro. Os fluxos podem ser lidos usando fread(). Retorna false ou null em caso de erro.

A saída do diff estará, por padrão, no formato diff unificado personalizado do Subversion, mas um » mecanismo diff externo pode ser usado dependendo da configuração do Subversion.

Exemplos

Exemplo #1 Exemplo básico

Este exemplo demonstra o uso básico desta função e a recuperação de conteúdo do fluxo:

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

O exemplo acima produzirá:

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

Exemplo #2 Comparando duas revisões de um caminho de repositório

Este exemplo implementa uma função envoltória que permite ao usuário comparar facilmente duas revisões do mesmo item usando um caminho de repositório externo (a sintaxe padrão é um tanto prolixa):

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

Exemplo #3 Diferenciando dois arquivos locais de forma portátil

Este exemplo implementa uma função envoltória que diferencia de forma portátil dois arquivos locais, compensando a correção do realpath() e o bug das barras invertidas:

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

Notas

Aviso

Esta função é EXPERIMENTAL. O comportamento desta função, seu nome e documentação poderão mudar sem aviso prévio em futuras versões do PHP. Use por sua conta e risco.

adicione uma nota

Notas Enviadas por Usuários (em inglês)

Não há notas de usuários para esta página.
To Top