バージョン間のコミット・ログを取得する

no extension

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

よーし,うむうむ,よーし。

ブックマーク