ふにゃるんv2

もとは、http://d.hatena.ne.jp/Wacky/

ChangeLogが先か、それとも commitが先か

ソースコードを書いて それをバージョン管理する時、大抵履歴を書きます。


ここで、よく使われる履歴の残し方としては、以下の2通りでは無いかと思います。

  • ChangeLogファイルに記入しておく
  • commit(コミット)時、メッセージを記入しておく


昔から ChangeLog を眺めている事が多いのですが、リグレッションやChangeLogは不要?(1/2) − @ITを見ると、今風はcommit時にメッセージ記入なのかな?と思ってもいます。

で、自分はどうなのか?と言うと、

  1. ChangeLogみたいなファイルに履歴をまず書いておく。
  2. おもむろに、commit時 メッセージ入力欄に 上記ファイルの履歴内容をコピペする。

という少々、回りくどい事をしています。

いや、commit時メッセージの方が良いと思うんですよ。でも、中途半端な状態(ビルドOKやテストOKじゃない等)でcommitするのは、少々気に食わないというか何と言うか…。


まぁ、これは癖みたいなものなので、せめてcommitする時、ChangeLog履歴から自動で取得するようにしようかと思いました。

#!/bin/env python
# -*- encoding: cp932 -*-
""" file名は、make_changelog.py とでもしてください。
"""
import sys
import pysvn

def main():
    if len(sys.argv) < 2: raise "changelogのパスを指定してください"
    fpath = sys.argv[1]
    print >>sys.stderr, "changelog:", fpath
    
    client = pysvn.Client()
    txt = client.diff(fpath, fpath)

    lines = txt.split('\n')[5:]
    for s in lines:
        if (len(s) > 0) and (s[0] == '+'):
            print s[1:].rstrip()

if __name__ == "__main__":
    main()


pysvnの導入方法は、pysvnを使って、ソースコードのリポジトリ情報を取得してみましょう - ふにゃるん を参照して頂くとして、以下のようにして使います。

  1. changelog.txt に履歴を記述する。
  2. 'python make_changelog.py changelog.txt > log.tmp'として呼び出す。
    これで、changelog.txtの追加分がlog.tmpに出力される。
  3. 'svn ci --file log.tmp'として、log.tmpの内容をcommitする。


これで、少し楽になりました。

どうでもいい話

履歴で思い出したんですが、昔バージョン管理ソフトが無い時代に書かれたと思わしきコードがありまして、まぁ人間diffしたようなソースコードだったんですね。

あの時は、「デカルチャー!!」と思いました。はい。