バージョン間のコミット・ログを取得する
GitHub でリリース・ドキュメントを書くことを考える。
Go 言語で書いたツールのバイナリ・リリース時は GoReleaser にお任せで全部やってくれるのだが,ソースコードやドキュメントのみのリリースの場合は自前でドキュメントを書く必要がある。
このとき git log
コマンドでコミット・ログを参照するのだが,滅多に使わないコマンドなので毎回 Google 先生のお世話になる。
今度忘れたときに Google 先生のお世話にならなくても済むよう覚え書きとして残しておく。
コミット・ログの収集
たとえば v0.6.0 と v0.7.0 の間のコミット・ログを markdown 形式で箇条書きにしたい場合はこうする。
$ git log "--pretty=format:- %s %h" v0.6.0..v0.7.0
- Merge pull request #3 from spiegel-im-spiegel/signal-subpackage 01a70c3
- Update Document 3fe7b80
- Add signal subpackage cfff012
この出力から “Merge
” とか “typo
” とかいった単語を含む行を除きたければ grep と組み合わせればよい。
$ git log "--pretty=format:- %s %h" v0.6.0..v0.7.0 | grep -v Merge
- Update Document 3fe7b80
- Add signal subpackage cfff012
なお pretty format に使える %s
などのプレースホルダ等については以下が参考になる。
コマンドを NYAGOS の Alias として組み込む
NYAGOS には Lua で書いたコードを alias コマンドとして組み込めるという素敵な機能がある。
そこで,先ほどの git log
コマンドを NYAGOS の alias として組み込んでみる。
具体的には .nyagos
に以下の記述を追加する。
-- git log
nyagos.alias.gitlog = function(args)
local form = "--pretty=format:- %s %h"
if #args < 1 then
nyagos.rawexec("git", "log", form)
elseif #args == 1 then
nyagos.rawexec("git", "log", form, args[1])
elseif #args == 2 then
nyagos.rawexec("git", "log", form, args[1]..".."..args[2])
else
nyagos.writerr("Usage: gitlog [[<from>] <to>]\n")
end
end
これで gitlog
コマンドができた。
実際に動かしてみる。
$ gitlog v0.6.0 v0.7.0
- Merge pull request #3 from spiegel-im-spiegel/signal-subpackage 01a70c3
- Update Document 3fe7b80
- Add signal subpackage cfff012
$ gitlog v0.6.0 v0.7.0 | grep -v Merge
- Update Document 3fe7b80
- Add signal subpackage cfff012
よーし,うむうむ,よーし。