Para ver cambios o diferencias entre commits, uso lo siguiente desde la línea de command:
svn diff -r 3000:3025 > daychanges.diff
Quiero modificar el command para que genere diffs entre sucesivos commits, los concatene y produzca en el file, algo así como
svn diff -r 3000:3001 > daychanges.diff svn diff -r 3001:3002 >> daychanges.diff svn diff -r 3002:3003 >> daychanges.diff ... svn diff -r 3019:3020 >> daychanges.diff
¿Cómo puedo escribir una secuencia de commands?
Puedes escribir for
loops en bash:
http://www.cyberciti.biz/tips/how-to-generating-print-range-sequence-of-numbers.html
Dado eso, no debería ser tan difícil escribir un script que llame a svn diff
en un range de commits.
En un solo command de línea, eso podría ejecutarse desde la CLI:
for ((start=3000,finish=3001; finish<=3025; start++,finish++)); do svn diff -r $start:$finish; done > out.file
o si lo prefiere, la versión más corta,
for ((i=3000; i<3025; i++)); do svn diff -r $i:$(($i + 1)); done > out.file
En una secuencia de commands de varias líneas:
#!/bin/bash $begin=$1 $end=$2 $outfile=$3 for ((start=$begin,finish=$begin+1; finish <= $end; start++,finish++)) do svn diff -r $start:$finish done > $outfile
(Omita el > $outfile
si solo desea dirigir manualmente el resultado del script).
Debería ser algo así como:
diffs.sh
:
#!/bin/bash first=$(($1 + 1)) last=${2} for a in `seq $first $last`; do svn diff -r $(($a - 1)):$a done > daychanges.diff
entonces:
./diffs.sh 3000 3020
Este script analizará la salida 'svn log' para los numbers de confirmación y diferirá todo el shebang (perdón por el juego de palabras) … si quiere limitar el suministro del range de confirmación que en un argumento, por ejemplo, "-r88833: HEAD" … No hay espacios:
#!/bin/bash unset last; for r in `svn log $1|grep '^r'|awk '{print$1}'|sed -e 's/r//g'|sort`;do if [ ! -v last ]; then last=$r; continue; fi; echo ------------------------; echo diff $last:$r ; echo ------------------------; svn diff -r$last:$r;last=$r; done>diffs