へなちょこSEの考察

0x22歳のへなちょこSEが、日々思うことを考察します。自社内、金融系を経て現在法人系PKG開発に従事。

Redmineのチケット番号を指定してソース差分を取る

Redmineのチケット番号を指定してソース差分を取る

ソースの差分を取るとき、Redmineのチケット番号を指定したいなと思ったので、バッチを作りました。
チェックアウトしたフォルダで実行して、チケット番号をカンマ区切りで複数指定したら勝手にその前後のソースをフォルダにエクスポートして、StepCounterを使って差分取ってくれます。
※コミットログコメントにチケット番号が書いてあることが前提です。
因みにこちらのStepcounterを利用しています。
マジで感謝です。

https://github.com/takezoe/stepcounter

あんまイケてないけど、とりあえず晒してみます。

ECHO OFF
cd %~dp0
ECHO #######################################
ECHO # 
ECHO # ソース差分取得用
ECHO # 新旧ファイル取得バッチ
ECHO # 
ECHO # リビジョンを指定して新旧ファイルの
ECHO # 取得を行えます。
ECHO # Copyright HAL 2016
ECHO # 
ECHO #######################################
REM 
REM 使い方
REM 
REM  チェックアウトしたSVNのフォルダにこのバッチファイルをコピーし、
REM  stepcounter-3.0.3-jar-with-dependencies.jarを同じ階層に置く。
REM  ダブルクリックで実行後、変更した際のリビジョンをカンマ区切りで入れると
REM  その変更前後の差分を取得してcount.xlsに出力する
REM 
ECHO.
ECHO.
ECHO 対象チケット番号を指定してください(カンマ区切り複数指定可)
SET /P TARGET_TICKET=対象チケット番号:
ECHO 出力フォーマットを指定してください(text、html、excel)
SET /P EXPORT_FORMAT=出力フォーマット:
if "%EXPORT_FORMAT%" == "excel" (
    SET EXPORT_TYPE=xls
) ELSE IF "%EXPORT_FORMAT%" == "html" (
    SET EXPORT_TYPE=html
) ELSE IF "%EXPORT_FORMAT%" == "text" (
    SET EXPORT_TYPE=txt
)
ECHO.
ECHO.
setlocal ENABLEDELAYEDEXPANSION
rd /s /q old
rd /s /q new
mkdir old
mkdir new
ECHO. >changes.list
ECHO. >changes.log
REM チケット番号の件数分繰り返し
FOR %%i IN (%TARGET_TICKET%) DO (
    svn log --search "refs #"%%i | find "|" > ticket.lst
    ECHO ****対象リビジョン(#%%i)****
    FOR /F "tokens=1,2,3,4* delims=|" %%a IN (ticket.lst) DO (
        
        REM リビジョンの逆順を保持
        SET REV_TEMP= %%a
        ECHO !REV_TEMP:r=!
        SET TARGET_REV=!REV_TEMP:r=!,!TARGET_REV!
    )
    ECHO ****変更後ファイル取得(#%%i)****
    FOR %%a IN (%TARGET_REV%) DO (
        
        REM リビジョンの逆順を保持
        SET /A REV_TEMP= %%a
        SET REV_LIST=!REV_TEMP!,!REV_LIST!

        REM 新しい方のファイルをExport
        svn log -r %%a >>changes.log
        echo LIST >> changes.log
        FOR /F "usebackq tokens=1,2" %%t IN (`svn diff -c%%a --summarize`) DO (
         echo %%u >> changes.log
         mkdir new\%%~pu
         svn export -r %%a --force %%u %~dp0\new\%%~pu%%~nxu
        )
    )
    REM リビジョンの新しい順にリストを作成
    FOR %%a IN (%REV_LIST%) DO (
        SET /A REV_TEMP= %%a - 1
        SET REV_LIST=!REV_TEMP!,!REV_LIST!

        FOR /F "usebackq tokens=1,2" %%t IN (`svn diff -c%%a --summarize`) DO (
         echo !REV_TEMP!,%%~pu%%~nxu >> changes.list
         mkdir old\%%~pu
        )
    )
    ECHO ****変更前ファイル取得(#%%i)****
    REM リストを元にEXPORT
    FOR /F "skip=1 tokens=1,2* delims=," %%a IN (changes.list) DO (
        svn export -r %%a --force %%b %~dp0\old\%%b
    )
    ECHO ****出力が完了しました(#%%i)****
    ECHO ****差分出力(#%%i)****
    java -cp stepcounter-3.0.3-jar-with-dependencies.jar jp.sf.amateras.stepcounter.diffcount.Main -format=%EXPORT_FORMAT% -output=%%i.%EXPORT_TYPE% new old
    ECHO ****差分取得が完了しました(#%%i)****
    )
ECHO.
ECHO.
pause