Side by side diffs are much more legible and useful than those in unified format or any other lineardiff
. By default, thesvn diff
command presents output in the unified format, though it has an option,--diff-cmd
, which allows you to specify the program that will perform thediff
. Passingvimdiff
as thediff
command doesn't work as the options passed bysvn diff
are a bit complicated:
Veamos que es así. Escribimos el siguiente programa de prueba:
generaciondecodigos@nereida:~/bin$ cat -n ./foo.pl 1 #!/usr/bin/perl 2 3 print "'$_' " for @ARGV; 4 print "\n";
Ejecución:
$ svn diff --diff-cmd=/home/generaciondecodigos/bin/foo.pl overloading.tex -rPREV Index: overloading.tex =================================================================== '-u' '-L' 'overloading.tex (revisión: 5112)' '-L' 'overloading.tex (copia de trabajo)' '.svn/tmp/tempfile.tmp' 'overloading.tex'El argumento
-u
indica que se debe usar unified format y el
argumento -L
especifica la etiqueta que describe la correspondiente
versión.
Es necesario escribir un wrapper que prescinda de esas opciones y que se quede con los nombres de los dos ficheros:
pp2@nereida:~$ cat -n bin/diffwrap.sh 1 #!/bin/sh 2 3 # Configure your favorite diff program here. 4 DIFF="/usr/bin/vimdiff" 5 6 # Subversion provides the paths we need as the sixth and seventh 7 # parameters. 8 LEFT=${6} 9 RIGHT=${7} 10 11 # Call the diff command (change the following line to make sense for 12 # your merge program). 13 $DIFF $LEFT $RIGHT 14 15 # Return an errorcode of 0 if no differences were detected, 1 if some were. 16 # Any other errorcode will be treated as fatal.Ahora podemos establecer que este programa sea nuestro comando
diff
para
svn
editando el fichero de configuración ~/.subversion/config
:
pp2@nereida:~/Lbook$ grep 'diff' ~/.subversion/config ### Set diff-cmd to the absolute path of your 'diff' program. ### Subversion's internal diff implementation. # diff-cmd = diff_program (diff, gdiff, etc.) ### Set diff3-cmd to the absolute path of your 'diff3' program. ### Subversion's internal diff3 implementation. # diff3-cmd = diff3_program (diff3, gdiff3, etc.) ### Set diff3-has-program-arg to 'true' or 'yes' if your 'diff3' ### program accepts the '--diff-program' option. # diff3-has-program-arg = [true | false] diff-cmd = /home/pp2/bin/diffwrap.sh
Casiano Rodríguez León