2012年10月31日水曜日

[git] コミットした時、コミットメッセージにブランチ名つけた方がいいんじゃない?

背景


コミットメッセージにブランチ名をつけてくれるといいかなって思った。

prepare-commit-msg


コミットを実行するとき、呼ばれるhook スクリプト。
引数として、「コミットログメッセージを保存したファイル名」、「ログメッセージの出処」、
「コミットログメッセージを再利用している元のコミットオブジェクト名」の3つが渡される。


ログメッセージの出処には、5つの種類がある。

1,message
git commit コマンドに -m や -Fオプションでメッセージを与えた場合

2,template
git commit コマンドに -t でメッセージを与えた場合

3,merge
git merge コマンドでメッセージを与えた場合

4,squash
git merge --squash コマンドでメッセージを与えた場合

5,commit
git commit コマンドに -c や -Cオプションでメッセージを与えた場合

また、このフックがゼロ以外で終了すると、コミットを作らず終了してしまう。

なんかようわからんから、とりあえず、messageの時だけ、頭にブランチ名付けることにした



ソース


以下を、.git/hooks/したに、prepare-commit-msgという名前で保存しておくと、
コミットメッセージの頭に現在のブランチ名をつけてくれる。

#!/usr/bin/python
# coding: utf-8

import sys
import subprocess

def get_now_branch():

    # コマンドを実行
    proc = subprocess.Popen(['git', 'symbolic-ref', 'HEAD'],
                            #shell=True,
                            #cwd='/',
                            stdin=subprocess.PIPE,
                            stdout=subprocess.PIPE,
                            stderr=subprocess.STDOUT,
                            close_fds=True)

    # 結果を読む
    line = proc.stdout.readline()
    gitlist = line.rstrip("\n").split('/')
    branch  = gitlist[len(gitlist)-1]

    return branch


def get_commit_msg(file):
    for line in open(file, 'r'):
        return line.rstrip('\n')

def set_commit_msg(file, msg):
    f = open(file, 'w')
    f.write(msg)
    f.close()
    return

def main():


    # 引数取得
    argvs = sys.argv  # コマンドライン引数を格納したリストの取得

    # branch取得
    branch = get_now_branch()
    if branch.find('fatal')>=0:
        return

    # edit fileのパスを取得
    git_commit_editmsg=argvs[1]

    # commit msgにブランチを設定
    if len(argvs) >=3:
        if argvs[2] == 'message':

            # commit msgにブランチを設定
            cm = get_commit_msg(git_commit_editmsg)
            commit_msg =  "["+branch+"] " + cm

            # commmit messageを保存
            set_commit_msg(git_commit_editmsg, commit_msg)

if __name__ == '__main__':
    main()

0 件のコメント:

コメントを投稿