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: