(PECL svn >= 0.1.0)
svn_diff — Compara dos rutas de acceso recursivamente
$path1
, int $rev1
, string $path2
, int $rev2
)
Compara dos rutas de acceso recursivamente, path1
y
path2
.
Nota:
No es una utilidad general de comparación. Únicamente se pueden comparar ficheros locales que estan versionados: los otros ficheros fallarán.
path1
La primera ruta de acceso a comparar. Puede ser una URL a un fichero/directorio en un repositorio SVN o una ruta de acceso a un fichero/directorio local.
Nota: Las rutas relativas se resolverán como si el directorio de trabajo actual es el que contiene el binario de PHP. Para utilizar el directorio de trabajo que contiene el script a llamar, use realpath() o dirname(__FILE__).
Si la ruta de acceso a un fichero local únicamente tiene el caracter de barra invertida '\' y no la barra '/', esta extensión no podrá encontrar la ruta de acceso. Se debe reemplazar siempre la barra invertida '\' con la barra '/' cuando se utilice esta función.
rev1
Número de revisión de la primera ruta de acceso. Utilizar SVN_REVISION_HEAD
para especificar la versión más reciente.
path2
Segunda ruta de acceso a comparar. Ver path1
para descripción.
rev2
Número de revisión de la segunda ruta de acceso. Ver rev1
para descripción.
Devuelve un array consistente en dos flujos: el primero es la salida de la comparación
y el segundo contiene el flujo de salida de error. El flujo se puede
leer utilizando fread(). Devuelve FALSE
o NULL
en
caso de error.
Por defecto, la salida de la comparación tendrá el formato Subversión de cliente unificado, pero un » motor externo de comparativa puede ser utilizado dependiendo de la configuración de la Subversión.
Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.
Ejemplo #1 Ejemplo básico
Este ejemplo demuestra el uso básico de esta función, y la obtención de contenidos del flujo:
<?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);
?>
El resultado del ejemplo sería:
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
Ejemplo #2 Comparando dos revisiones de una ruta de acceso a repositorio
Este ejemplo implementa una función de envoltorio que permite a un usuario comparar fácilmente dos revisiones del mismo elemento utilizando un camino de acceso externo al repositorio (la sintaxis por defecto es detallada):
<?php
function svn_diff_same_item($path, $rev1, $rev2) {
return svn_diff($path, $rev1, $path, $rev2);
}
?>
Ejemplo #3 Comparativa portable de dos ficheros locales
Este ejemplo implementa una función envoltorio que compara de forma portable dos ficheros locales, compensando el problema realpath() y el de las 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);
}
?>