[devel] gear-changelog

Alexey Gladkov legion на altlinux.ru
Вт Апр 14 22:20:28 MSD 2009


14.04.2009 19:16, Afanasov Dmitry wrote:
> /me до сих не допер, как gear-changelog юзать и ничего, живой вроде :)


Ну эта команда была сделана когда в нескольких своих проектах я устал
делать механическую работу перед релизом.

Эта утилита формирует 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 использует набор со своими правилами. Формат их таков:

width: <NUM>

Это глобальная директива в правилах, указывающая ширину строки.

group: <TITLE>
regexp: <PATTERN>
filter: <SED-S-COMMAND>

Первая строка это заголовок группы, вторая это grep-паттерн для того,
чтобы отнести коммит к этой группе, третья (необязательная) строчка
это 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

Вот как выглядbт его gear/changelog:

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

-- 
Rgrds, legion



Подробная информация о списке рассылки Devel