Subversion で git show とか stash とかの動作をエミュレーション

あまりしっかりテストしていないので、ご利用はバックアップをとった上で、自己責任で… (自分の用事が終ったら放置モード)

svn-show.cmd

svn diff -r1000:1001 とかやっていられないので、svn-show 1001 で同じことをする。

@echo off
setlocal
if "%1" == "" (
    for /F "skip=1 tokens=1" %%I in ('svn log -l 1') do call :show %%I & exit /b
) else (
    call :show "%1"
)
endlocal
exit /b

:show
    set "REV2=%~1"
    set REV2=%REV2:r=%
    set /A REV1=REV2-1
    svn diff -r%REV1%:%REV2%
    exit /b

svn-stash.cmd

svn-stash とすると、コミットされていない修正が svn-stach.1 などというファイルに保存され、修正は消える。元に戻すには svn-stash svn-stash.1 とパッチファイルを引数に渡す。

setlocal
if "%1" == "" ( call :diff ) else ( call :patch "%~1")
endlocal
exit /b

:diff
    set /A cnt=cnt+1
    if exist svn-stash.%cnt%  goto :diff
    svn diff > svn-stash.%cnt%
    svn revert -R .
    exit /b

:patch
    svn patch "%~1"
    exit /b