(PECL svn >= 0.1.0)
svn_diff — Comparar dos rutas de forma recursiva
Compara dos rutas, path1
y
path2
, de forma recursiva.
Nota:
No es una utilidad de comparación real. Solo los ficheros locales que están versionados pueden ser comparados: otros ficheros fallarán.
path1
Primera ruta. Puede ser una URL hacia un fichero/directorio de un repositorio SVN o una ruta hacia 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 una ruta hacia un fichero local solo tiene barras invertidas y ninguna barra, esta extensión fallará. Reemplace siempre todas las barras invertidas con barras al utilizar esta función.
rev1
Número de revisión de la primera ruta. Utilice la constante
SVN_REVISON_HEAD
para especificar la revisión
más reciente.
path2
Segunda ruta a comparar. Ver el argumento
path1
para la descripción.
rev2
Número de revisión de la segunda ruta. Ver el argumento
rev1
para la descripción.
Devuelve un array que contiene 2 flujos: el primero representa la salida
de la comparación, y el segundo contiene los errores. Los flujos pueden
ser leídos utilizando la función fread(). Devuelve
false
o null
si ocurre un error.
La salida del comparador puede, por omisión, estar en formato de comparación unificado Subversion, pero un » motor externo de comparación puede ser utilizado, según la configuración SVN.
Ejemplo #1 Ejemplo de uso
Este ejemplo muestra un uso básico de esta función y recupera el contenido desde los flujos:
<?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 Comparación de dos revisiones de una ruta del repositorio
Este ejemplo implementa un gestor que permite a un usuario comparar fácilmente dos revisiones de un elemento utilizando una ruta de repositorio externa (la sintaxis por omisión es verbosa):
<?php
function svn_diff_same_item($path, $rev1, $rev2) {
return svn_diff($path, $rev1, $path, $rev2);
}
?>
Ejemplo #3 Comparación, más portable, de dos ficheros locales
Este ejemplo implementa un gestor para comparar dos ficheros locales, de forma más portable gestionando el problema de realpath() y el error con 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);
}
?>
Esta función ha sido declarada EXPERIMENTAL. Su funcionamiento, nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Utilícela bajo su propia responsabilidad.