ふにゃるんv2

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

Subversionの一括commitバッチ処理

突然ですが、Subversionって使い勝手が良くて、自分は、

等を管理しています。


ところが、野放図に色んな場所にチェックアウトしちゃっているものなので、暫くチェックインするのを忘れていたりするんですね。


という訳で、一括でチェックインするバッチファイルを作って見ました。

rem Subversion管理下のデータをチェックインする

call :SUB_SVN "<フォルダ1>"
call :SUB_SVN "<フォルダ2>"
call :SUB_SVN "<フォルダ3>"

pause
goto QUIT

:SUB_SVN
rem 一種のサブルーチン
@echo off
echo %1フォルダのチェック…
svn status %1 -q | find /v /c "?" > tmp.txt
for /f "usebackq tokens=*" %%i in (`type tmp.txt`) do @set NO=%%i
if NOT %NO% == 0 (
echo "==>チェックイン必要"
svn ci %1 --editor-cmd "notepad"
) else (
echo "==>チェックイン不要"
)
@echo on

:QUIT

このバッチファイルは、ちと小細工を行っています。

  1. 'for'文を使って、bashでやるようなバッククォート処理(コマンド呼び出しし、標準出力を取り込んで、パラメータ化する)を行っています。
    詳しくは、CodeZine:GUIのダイアログを使ったエンドユーザ向け対話バッチの実現(DOS, ダイアログ, バッチ)を読んでください。
  2. チェックインが必要か否かの判断に、'svn status'の出力結果の行数を、'find'コマンドで行数カウントしています。
    (正確には、'find'コマンドで行数カウントと類似の処理を実現している)
  3. 'call'文の拡張機能を使って、サブルーチン呼び出し的な事をしています。

もう少し複雑になるようだと、PowerShellや純粋にスクリプト言語で組んだ方が良いとは思いますが、この程度なら まぁOKでしょう。