summaryrefslogtreecommitdiff
path: root/Master/tlpkg/installer
diff options
context:
space:
mode:
authorNorbert Preining <preining@logic.at>2009-02-05 13:28:43 +0000
committerNorbert Preining <preining@logic.at>2009-02-05 13:28:43 +0000
commitb9477c893814746095eaf0aad80b354620ac2421 (patch)
tree7dad6a6d6bd56e7523f50a164bc7fd16920b52b4 /Master/tlpkg/installer
parent1bf50b63af76bad30fceebfb740ea39ffeda518e (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.cmd115
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