Gear/changelog

Материал из ALT Linux Wiki

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:

http://git.altlinux.org/people/legion/packages/libshell.git?p=libshell.git;a=blob;f=.gear/changelog;hb=HEAD