(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: Los caminos relativos pueden ser resueltos si el directorio de trabajo actual es uno de los que contienen el binario PHP. Para utilizar el directorio de trabajo, utilice la función realpath(), o la instrucción 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 ejemplo anterior mostrará :
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 es EXPERIMENTAL. El comportamiento de esta función, su nombre, y toda la documentación alrededor de esta función puede cambiar sin previo aviso en una próxima versión de PHP. Esta función debe ser utilizada bajo su propio riesgo.