LoginSignup
4
3

More than 5 years have passed since last update.

#if UNITY_EDITOR がなければSVNコミットさせない

Posted at

背景

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
4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3