Наглядное представление активности коммитов SVN в терминале

    В небольших личных проектах я использую SVN и bug-трекером в таких случаях служит лист формата A4. svn log никогда не был легко читаем для меня, поэтому я написал bash-скрипт, позволяющий наглядно видеть активность разработки за последнее время или список коммитов заданной даты:

    image



    #!/bin/bash
    
    usage='usage: 
      ./svn_log <days>    OR    ./svn_log <date>
    
    examples: 
      ./svn_log 10        OR    ./svn_log 2013-08-02'
    
    # 1. получаем входной параметр - количество дней ($days) или дата в формате YYYY-MM-DD ($date)
    param=$1
    if [ -n "$param" ]; then
        if [[ "$param" =~ ^[0-9]+$ ]] ; then
            days="$param"
        elif [[ "$param" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
            date="$param"
        else
            echo "$usage"
            exit 1
        fi
    else
        days=7 # по умолчанию показываем статистику коммитов за прошедшую неделю
    fi
    
    # 2. запуск без параметра или с числовым параметром - статистика коммитов по дням
    if [ -n "$days" ]; then
        # svn log в переменную чтобы обойтись одним вызовом
        start=`date +"%Y-%m-%d" --date "$end -$days day"`
        svn_log=`svn log -r {$start}:HEAD`
    
        for (( i=0; i<$days; i++ ))
        do
            # получаем дату каждого для в формате YYYY-MM-DD
            day=`date +"%Y-%m-%d" --date "$end -$i day"`
    
            # используем полученную дату для поиска по svn log
            num_commits=$(echo "$svn_log" | grep "$day" | wc -l)
            
            # вывод результатов
            echo -ne "$day "
            for (( c=0; c<$num_commits; c++ )); do
                echo -ne '#'
            done
            echo ''
        done
    fi
    
    # 3. запуск с параметром даты - перечень коммитов в указанный день
    if [ -n "$date" ]; then
        svn_log=`svn log -r {$date}:HEAD`
        echo "$svn_log" | grep -A 2 -B 1 "$date" | awk "NR%4==0"
    fi
    


    Скачать скрипт: pastebin.com

    Буду рад, если этот инструмент пригодится кому-либо еще.
    Поделиться публикацией

    Комментарии 7

      +4
      А что, кто-то еще юзает svn?))

      П.С. Ладно-ладно. Это была шутка. Понятно что есть куча легаси-кода и народу просто лень переводить все на git/hg. Но в любом случае, ни разу не было потребности увидеть активность коммитов в терминале…
        +1
        git/hg далеко не для всего лучше. К примеру бальшое svn дерево, и нужно работать только с поддеревом. В CVN/CVS это сходу, а для распределённых — совсем нужно изголятся. Подобных приколов масса (правда они важны лишь для специфических задач).
          0
          Что-то вы такое странное говорите… Во-первых, в гите есть submodules и subtree, если вы имеете в виду возможность работать с поддеревом одного большого проекта, как с отдельным компонентом, собственно для этого они и были придуманы. Во-вторых, если у вас и вправду бАльшое дерево, то переключение между ветками в SVN/CVS — это просто мука, долго и медленно. Впрочем, это вполне очевидные недостатки… Да и вообще, я не нашел ни одного плюса у svn по сравнению с git/hg. Но это, как говорится, уже совсем другая история. :)
        +3
        А что с ним будет, если дату укажут в commit message? Чтобы от таких вещей не страдать, лучше использовать svn log --xml + какую-нибудь утилиту, умеющую xpath, а чтобы не ждать, пока высосется лог с самого начала проекта (а это может быть лог за много лет) — сразу ограничивать диапазон результатов, примерно так: svn log -r {2012-11-20 00:00:00}:HEAD
          0
          Спасибо, это хорошие дополнения. Добавил в код скрипта svn log -r {$date}:HEAD
          +1
          Для анализа логов исторически используют не консоль, а что-нибудь графическое. TortoiseSVN, например. Или SmartSVN. Графическое решение лучше отображает стоолбцы, выделяет жирным нужные элементы, позволяет легко производить динамические выборки/фильтрации уже отображенного списка. позволяет выбирать индивидуальные элементы и смотреть для них diff / полный комментарий.
            –1
            Тут дело про гит сказали. Иногда нужен именно SVN, но для типичного небольшого проекта чаще лучше гит. И с друзьями поделиться, и на github потом переехать будет удобнее. Отчасти из-за подхода «да я щас тут быстренько» мы и мучаемся до сих пор со всякими cvs/svn.

            А если по существу было бы круче в 1-й команде показывать ту часть вывода 2-й (1-е строки commit message-ей), которая влезет в строку.

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

            Самое читаемое