diff options
author | Norbert Preining <preining@logic.at> | 2009-02-05 13:28:43 +0000 |
---|---|---|
committer | Norbert Preining <preining@logic.at> | 2009-02-05 13:28:43 +0000 |
commit | b9477c893814746095eaf0aad80b354620ac2421 (patch) | |
tree | 7dad6a6d6bd56e7523f50a164bc7fd16920b52b4 /Master/tlpkg/installer | |
parent | 1bf50b63af76bad30fceebfb740ea39ffeda518e (diff) |
add the new stuff from Tomek for W32 updater
git-svn-id: svn://tug.org/texlive/trunk@12096 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/tlpkg/installer')
-rw-r--r-- | Master/tlpkg/installer/w32_updater.cmd | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/Master/tlpkg/installer/w32_updater.cmd b/Master/tlpkg/installer/w32_updater.cmd new file mode 100644 index 00000000000..781f035b50a --- /dev/null +++ b/Master/tlpkg/installer/w32_updater.cmd @@ -0,0 +1,115 @@ +@echo off +rem Update script for TeX Live infrastructure +rem called automatically if detected by tlmgr launcher +rem +rem Copyright 2009 by Tomasz M. Trzeciak <t.m.trzeciak@googlemail.com> +rem Public Domain +rem + +rem make environment changes local & enable cmd extensions +2>nul verify nonzero_errorlevel +setlocal enableextensions +if not errorlevel 1 goto :begin +>&2 echo CMD.EXE extensions not available. Aborting... +exit /b 1 + +:begin +rem let's make sure that we can use dynamic variables +set "errorlevel=" +set "date=" +set "time=" +rem get root location +for /f "delims=" %%D in ('kpsewhich -var-value=SELFAUTOPARENT') do set "TLROOT=%%~fD" +rem get location of the log file +for /f "delims=" %%D in ('kpsewhich -var-value=TEXMFSYSVAR') do set "logdir=%%~fD\web2c\" +rem cd to root +cd /d "%TLROOT%" +rem create tar.exe backup +>nul copy /y "%~dp0tar.exe" "%~dp0tarsave.exe" +rem set up perl environment +set "PERL5LIB=%TLROOT%\tlpkg\tlperl\lib" +rem get package list from arguments +set pkglist=%* +if not defined pkglist goto :finish + +echo DO NOT CLOSE THIS WINDOW! +echo TeX Live infrastructure update in progress... +call :foreachpkg :untar "temp\" %pkglist% || goto :rollback +call :foreachpkg :tlobj "tlpkg\tlpobj\" %pkglist% || goto :rollback +set pkglist=& call :foreachpkg :filter_src_doc "" %pkglist% +call :foreachpkg :update_info "" %pkglist% +echo Update complete. +set exitcode=0 +goto :finish + +:rollback +set pkglist=& call :foreachpkg :filter_src_doc "" %pkglist% +call :foreachpkg :update_info ">&2" %pkglist% +>&2 echo Update failed! Rolling back to previous version... +call :foreachpkg :untar "temp\__BACKUP_" %pkglist% || goto :panic +call :foreachpkg :tlobj "tlpkg\tlpobj\" %pkglist% || goto :panic +call :foreachpkg :restore_info "" %pkglist% +echo Recovery from backup successful. + >temp\popup.vbs echo MsgBox "TeX Live infrastructure update failed." ^& Chr(10) ^& _ +>>temp\popup.vbs echo "Recovery from backup succeeded.", _ +>>temp\popup.vbs echo 48, "TeX Live update" +start /wait wscript temp\popup.vbs +del temp\popup.vbs +set exitcode=1 +goto :finish + +:finish +del tlpkg\installer\tarsave.exe temp\__BACKUP_* +rem start /b cmd /c del "%~f0" & exit /b 0 +exit /b %exitcode% + +:panic +call :foreachpkg :restore_info ">&2" %pkglist% +>&2 echo FATAL ERROR: recovery from backup failed! +echo To repair your TeX Live installation download and run: +echo http://mirror.ctan.org/systems/texlive/tlnet/2008/update-tlmgr-latest.exe + >temp\popup.vbs echo MsgBox "TeX Live infrastructure update failed and so did recovery from backup." ^& Chr(10) ^& _ +>>temp\popup.vbs echo "To repair your TeX Live installation download and run:" ^& Chr(10) ^& _ +>>temp\popup.vbs echo "http://mirror.ctan.org/systems/texlive/tlnet/2008/update-tlmgr-latest.exe", _ +>>temp\popup.vbs echo 16, "FATAL ERROR: TeX Live update" +start /wait wscript temp\popup.vbs +del temp\popup.vbs +rem Evil has taken over - emit adequate exit code +exit /b 666 + +REM SUBROUTINES + +:foreachpkg cmd prefix [pkg_name oldrev newrev [...]] +if [%3]==[] exit /b 0 +call %~1 %2 %3 %4 %5 +if errorlevel 1 exit /b %errorlevel% +shift /3 & shift /3 & shift /3 +goto :foreachpkg + +:untar temp\[__BACKUP_] pkg_name +set "ext=tar" +if %~n1_==__BACKUP__ set "ext=r%~3.tar" +tlpkg\installer\tarsave.exe -x -f "%~1%~2.%ext%" && del "%~1%~2.%ext%" +exit /b %errorlevel% + +:tlobj tlpkg\tlpobj\ pkg_name +tlpkg\tlperl\bin\perl.exe texmf\scripts\texlive\tlmgr.pl _include_tlpobj "%~1%~2.tlpobj" +exit /b %errorlevel% + +:filter_src_doc +if /i %~x2.==.src. exit /b 0 +if /i %~x2.==.doc. exit /b 0 +set pkglist=%pkglist% %2 %3 %4 +exit /b 0 + +:update_info redir pkg_name oldrev newrev +set "infomsg=update: %~2 (%~3 -^> %~4)" +goto :continue_info +:restore_info redir pkg_name oldrev newrev +set "infomsg=restore: %~2 (%~3)" +:continue_info +rem exit /b 0 +if "%~1"==">&2" set "infomsg=failed %infomsg% +rem >>%logdir%tlmgr.log echo [%date% %time%] %infomsg% +%~1 echo %infomsg% +exit /b 0 |