@echo OFF
setlocal
:: ----------------------------------------------------------------------------
:: Incremental Subversion Repository Backup
:: ----------------------------------------------------------------------------
::
:: Creates a copy of the archive via the portable 'dump'-format
:: and additionally packs it into a 7-zip archive.
::
:: Output is generated on the default error-channel.
::
:: ----------------------------------------------------------------------------


:: ----------------------------------------------------------------------------
:: Settings
:: ----------------------------------------------------------------------------
set SVNPATH=
set SVNADMIN=%SVNPATH%svnadmin.exe
set SVNLOOK=%SVNPATH%svnlook.exe
set SVNRDUMP=%SVNPATH%svnrdump.exe
set SVNINFO=%SVNPATH%svn.exe
set ZIP="C:\Program Files\7-Zip\7z.exe"

set SRC="svn://svn.code.sf.net/p/shuttleultra/code"
set NAME=SSU
set DST=".\%NAME%.svn.backup"


:: ----------------------------------------------------------------------------
title %NAME% SVN Backup running...
:: ----------------------------------------------------------------------------


:: ----------------------------------------------------------------------------
:: Create (empty) local repository if not yet present
:: ----------------------------------------------------------------------------

if not exist "%DST%" %SVNADMIN% create --compatible-version 1.8.0 %DST%


:: ----------------------------------------------------------------------------
:: Get revision numbers
:: ----------------------------------------------------------------------------

for /f %%a in ('%SVNINFO% info --show-item revision --no-newline %SRC%') do set SRC_REV=%%a
for /f %%a in ('%SVNLOOK% youngest --no-newline %DST%') do set DST_REV=%%a
set /a DST_REV=%DST_REV%+1


:: ----------------------------------------------------------------------------
:: Build date part (YYYY-MM-DD) of backup repository archive name
:: ----------------------------------------------------------------------------

set YYYY=%date:~-4%
set MM=%date:~-7,2%
set DD=%date:~-10,2%
set TIMESTAMP=%YYYY%-%MM%-%DD%


:: ----------------------------------------------------------------------------
:: Check if update is really needed
:: ----------------------------------------------------------------------------

if %DST_REV% GTR %SRC_REV% (
  echo NO UPDATE NEEDED
  pause
  goto :eof
)


:: ----------------------------------------------------------------------------
:: Copy hooks (does *NOT* work for remote backup!)
:: ----------------------------------------------------------------------------

:: copy %SRC%\hooks\*.bat %DST%\hooks


:: ----------------------------------------------------------------------------
:: Do it!
:: ----------------------------------------------------------------------------
:: We should do it in 2 separate steps according to
:: http://subversion.tigris.org/faq.html#bdb-fsfs-convert
:: [...]Windows users should dump to a file and load from that file in two
:: separate steps.[...]
:: but we don't!

%SVNRDUMP% dump %SRC% -r%DST_REV%:%SRC_REV% --incremental | %SVNADMIN% load %DST%


:: ----------------------------------------------------------------------------
:: ZIP it!
:: ----------------------------------------------------------------------------

%ZIP% a -t7z -mx9 .\%NAME%_%TIMESTAMP%.svn.backup.7z %DST%\*


:: ----------------------------------------------------------------------------
:: EOF
:: ----------------------------------------------------------------------------
