скрипт для генерации различий между последовательными коммитами и записи их в файл - PullRequest
0 голосов
/ 19 июля 2010

Чтобы просмотреть изменения или различия между коммитами, я использую следующее из командной строки:

svn diff -r 3000:3025 > daychanges.diff

Я хочу изменить команду, чтобы она генерировала различия между последовательными коммитами, объединяла их и выводила в файл, что-то вроде

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

как мне написать такой скрипт?

Ответы [ 3 ]

1 голос
/ 19 июля 2010

Должно быть что-то вроде:

diffs.sh * * 1004

#!/bin/bash
first=$(($1 + 1))
last=${2}
for a in `seq $first $last`; do
    svn diff -r $(($a - 1)):$a
done > daychanges.diff

тогда:

./diffs.sh 3000 3020
1 голос
/ 19 июля 2010

Вы можете написать for циклы в bash:

http://www.cyberciti.biz/tips/how-to-generating-print-range-sequence-of-numbers.html

Учитывая это, не должно быть так сложно написать скрипт, который вызывает svn diff черездиапазон коммитов.

В однострочной команде, которая может быть запущена из CLI:

for ((start=3000,finish=3001; finish<=3025; start++,finish++)); do svn diff -r $start:$finish; done > out.file

или, если вы предпочитаете, более короткая версия,

for ((i=3000; i<3025; i++)); do svn diff -r $i:$(($i + 1)); done > out.file

В многострочном скрипте:

#!/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

(пропустите > $outfile, если вы просто хотите вручную направить вывод скрипта.)

0 голосов
/ 28 марта 2014

Этот скрипт будет анализировать вывод 'svn log' для номеров коммитов и показывать весь шебанг (простите за каламбур) .. если вы хотите ограничить подачу диапазона фиксации одним аргументом, например, -r88833: HEAD... без пробелов:

#!/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
...