HEXA BLOG

いいモノづくり道プログラム

HEXA BLOGいいモノづくり道2015.2.26

フックスクリプト で文字コードと改行コードチェック

こんにちは。店長です。

 

皆さん、プログラムの文字コードと改行コードは統一できてますか?

 

新規で追加したファイルを commit したあとに、

 

あ!!文字コード変えるの忘れてた!

 

なんてことは無いでしょうか?

 

commitする前にチェックが欲しいと思いますよね?

ということで、そういうときに便利なフックスクリプトを作ってみようと思います。

 

#TortoiseSVN用のフックスクリプト
$retval=0
#Write-Error $args[3]
foreach ($fname in Get-Content $args[0]) 
{
    if( Test-Path $fname )
    {
        if( ($fname -like "*.h") -or ($fname -like "*.cpp") -or ($fname -like "*.c") -or ($fname -like "*.cs") ) 
        { 
            $fullresult = file.exe $fname
            # UTF8 BOM 付き で CRLF かどうかのチェック
            if( $fullresult -like "*UTF-8 Unicode (with BOM)*with CRLF line terminators" ) 
            {
	    # 一致していればこっち
                # Write-Error $fullresult
            }
            else
            {
		# 一致しないときはこっち
                Write-Error $fullresult
                $retval=1
            }
        }
    }
} 
exit $retval

これは、PowerShell で書いた TortoiseSVN用 の スクリプトです。

 

Fileコマンドを使ってチェックしているので、
Cygwin みたいな Unix ライクな環境をインストールして、
パスが通っていることを前提としています。
(もっと良いチェックの方法があれば、是非教えてください)

 

対象は .h, .c, .cpp, .cs の拡張子のファイル。
文字コードは UTF-8 BOM 付き で 改行コードは CRLF としてチェックしています。 
チェックに引っかかるとエラー出力に詳細を出して、終了ステータスを 1 にしておきます。

 

これを、TortoiseSVN の 設定 から Hook Scripts の pre-commit Hook に追加しておきます。
以下を参考に設定してみてください。

 

http://tortoisesvn.net/docs/nightly/TortoiseSVN_ja/tsvn-dug-settings.html#tsvn-dug-settings-hooks

 

これでcommit時に自動チェックされるようになりました

こんな感じでフックスクリプトを利用すると、色んなルールのチェックを自動化することができます。

〆切直前のとき用に、ビルドが通ったソースしかcommitさせないなんてこともできます。

是非、皆さんも有効活用してみてください

RECRUIT

大阪・東京共にスタッフを募集しています。
特にキャリア採用のプログラマー・アーティストに興味がある方は下のボタンをクリックしてください

RECRUIT SITE