From b9477c893814746095eaf0aad80b354620ac2421 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Thu, 5 Feb 2009 13:28:43 +0000 Subject: add the new stuff from Tomek for W32 updater git-svn-id: svn://tug.org/texlive/trunk@12096 c570f23f-e606-0410-a88d-b1316a301751 --- Master/tlpkg/installer/w32_updater.cmd | 115 +++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 Master/tlpkg/installer/w32_updater.cmd (limited to 'Master/tlpkg/installer') 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 +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 -- cgit v1.2.3