背景
Editor用のスクリプトなんだけどEditorフォルダには格納できない。
そういう類のスクリプトでは、#if UNITY_EDITOR を使用します。
(GameObjectにコンポーネントとしてアタッチする系)
が、書き忘れてコミットしてしまうとビルドエラーになったりします。
それを防ぐ手段としてSVNのフックスクリプトを用意しました。
※今回はクライアントスクリプトです。
概要
- フックスクリプトとは?設定方法は?などは省略します。
- フックタイプは pre-commit です。
- 特定フォルダ以下にある *.cs を処理することだけを考えています
- バッチファイルにしましたがjs/vbs/pythonなどで書いたほうがきっと楽です
コードサンプル
@ECHO OFF
REM ---------------------------------------------------------------------------------
REM ユーザー指定のチェック用文字列
REM ---------------------------------------------------------------------------------
REM チェック対象のフォルダ
SET SEARTH_PATH=D:/projects/test/Assets/Scritps
REM チェック対象の拡張子
SET SERACH_EXT=cs
REM チェック条件(1行目の文字列)
SET SEARCHTEXT=#if UNITY_EDITOR
REM ---------------------------------------------------------------------------------
REM ユーザー指定のチェック用文字列
REM ---------------------------------------------------------------------------------
REM subversionから渡される引数を格納
REM Tempフォルダの svn*.tmpファイルへのパス
SET PATH_TMP=%1
REM tmpファイル内のパスをフィルタリングする文字列
SET QUERY="^%SEARTH_PATH%[^?]*\.%SERACH_EXT%$"
REM ---------------------------------------------------------------------------------
REM メインルーチン:tmpファイルの行を読み込みチェック対象ファイルパスをサブで処理
REM ---------------------------------------------------------------------------------
for /f "delims=" %%a in ('FINDSTR /R %QUERY% %PATH_TMP%') do CALL :CHECK_FILE %%a
GOTO OK
REM ---------------------------------------------------------------------------------
REM サブルーチン:対象となるファイルの1行目を取得してサブで処理
REM ---------------------------------------------------------------------------------
:CHECK_FILE
SET PATH_FILE=%1
IF NOT EXIST "%PATH_FILE%" (
REM 削除コミットの場合はファイルが存在しないのでチェックしない
ECHO %PATH_FILE%が存在しません。チェックをスキップします。>&2
EXIT /B
)
for /f "delims=" %%c in (%PATH_FILE%) do (
CALL :CHECK_HEADER "%%c"
EXIT /B
)
REM ---------------------------------------------------------------------------------
REM サブルーチン:受け取った1行目がチェック条件文字に合致するかチェック
REM ---------------------------------------------------------------------------------
:CHECK_HEADER
SET FIRST_LINE=%1
REM 合致しない場合は直接エラー終了へジャンプ
ECHO %FIRST_LINE% | find "%SEARCHTEXT%" >NUL
IF NOT ERRORLEVEL 1 (
ECHO EXISTS %SEARCHTEXT%>&2
EXIT /B
) ELSE (
ECHO NO EXISTS %SEARCHTEXT%>&2
GOTO NG
)
REM ---------------------------------------------------------------------------------
REM EXIT
REM ---------------------------------------------------------------------------------
:OK
EXIT 0
:NG
EXIT 1