Gear/changelog
gear-changelog
gear-changelog vs git-shortlog
Эта утилита формирует changelog, но делает это несколько иначе чем git-shortlog. Вот, например, вывод последнего:
Alexey Gladkov (11): Add license shell-var: Add new source shell-args: parse_common_option(): Option --quiet cancels option --verbose shell-var: shell_var_unquote(): Returns the value through eval shell-var: Rename shell_var_{no,yes} -> shell_var_is_{no,yes} Merge branch 'shell-var' shell-lists: Add new source shell-quote: Add quote_shell_args() shell-quote: Fix Usage for quote_shell_args shell_var_unquote(), string_quote_remove(): Fix "'" unquote for bash shell-quote: Rewrite quote_shell_args() from scratch, to avoid the dangerous shell constructions
Из 11 коммитов как тут сделать changelog можно, но если коммитов значительно больше и изменения ещё более дифференцированы, то радости никакой при этом не испытываешь. Я сломался на втором большом релизе.
Утилита gear-changelog выводит коммиты от последнего тега, если не указано другое.
Вот вывод тех же изменений, но полученные через gear-changelog:
$ gear-changelog * Tue Apr 14 2009 Alexey Gladkov <legion@altlinux.org> 0.0.9-alt2 - shell-quote changes: + Rewrite quote_shell_args() from scratch, to avoid the dangerous shell constructions. + Fix Usage for quote_shell_args. + Add quote_shell_args(). - shell-var changes: + Rename shell_var_{no,yes} -> shell_var_is_{no,yes}. + shell_var_unquote(): Returns the value through eval. + Add new source. - Other changes: + Update .gear/changelog. + shell_var_unquote(), string_quote_remove(): Fix "'" unquote for bash. + shell-lists: Add new source. + shell-args: parse_common_option(): Option --quiet cancels option --verbose. + Add license.
Они сгруппированы и из них выброшены некоторые лишние коммиты.
Как это сделано
gear-changelog использует набор со своими правилами. Правила находятся в файле .gear/changelog. Формат правил таков:
width: <NUM>
Это глобальная директива в правилах, указывающая ширину строки.group: <TITLE>
Заголовок группыregexp: <PATTERN>
grep-паттерн для того, чтобы отнести коммит к этой группеfilter: <SED-S-COMMAND>
sed’овкий s/// для возможных исправлений.
Пример:
group: shell*-config changes regexp: ^shell(-ini)?-config: filter: s/^shell(-ini)?-config: // group: Documentation changes regexp: ^[^:]+\.man: group: Other changes regexp: .*
Можно не заниматься группировками и вызвать утилиту без правил вообще (--no-rules) и/или не применять группировку (--no-groups). В этом случае вывод будет прост. Но мне кажется что группировать по префиксу коммита очень удобно… особенно если с терминологией определишься. Это помогает и коммиты более понятные делать и changelog формировать.
У самой утилиты gear-changelog очень мало опций, единственная которая ещё достойна внимания это --format. Эта утилита генерирует changelog не только в rpm-формате, формально она поддерживает ещё и deb и gnu.
За два последних прошу не пинать. Я добавлял их из соображений не прибивания одного какого-то формата вывода. Они сделаны just-for-fun, но похожи на настоящие :)
Замечание
Приведённый тут вывод был получен на репозитории:
http://git.altlinux.org/people/legion/packages/libshell.git
Вот как выглядит его gear/changelog: