標準愚痴出力

個人的なIT作業ログです。もしかしたら一般的に参考になることが書いているかもしれません(弱気

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