mirror of
https://github.com/arehnman/yttrium-virtio-gpu.git
synced 2026-11-07 02:06:32 +00:00
280 lines
7.0 KiB
Batchfile
280 lines
7.0 KiB
Batchfile
@echo off
|
|
|
|
:: Set this to the path of the 7zip exe file on your local machine.--------------::
|
|
::-------------------------------------------------------------------------------::
|
|
set z7_path_exe=C:\Program Files\7-Zip\7z.exe
|
|
|
|
:: Set this to the path of the sysStore exe file on your local machine.----------::
|
|
::-------------------------------------------------------------------------------::
|
|
set path_to_systore_exe=C:\Program Files (x86)\Windows Kits\8.1\Debuggers\x86\symstore.exe
|
|
|
|
:: Set this to the minimum size of an iso file in bytes to be considered valid.--::
|
|
::-------------------------------------------------------------------------------::
|
|
set min_iso_size=1000000
|
|
|
|
|
|
|
|
|
|
:: CODE SECTION
|
|
if "%DSTORE_LOCATION%"=="" (
|
|
echo.
|
|
echo Symbol store path is not configured on this machine.
|
|
echo.
|
|
echo Should be configured as: %%DSTORE_LOCATION%%
|
|
echo "(environment variable.)"
|
|
call :usage %~0
|
|
goto :eof
|
|
)
|
|
|
|
set store_address=%DSTORE_LOCATION%
|
|
|
|
:: Creating GUID for the push session
|
|
for /F "delims=" %%A in ('powershell -command "$([guid]::NewGuid().ToString())"') do set GUID=%%A
|
|
|
|
:: Saving local file full path for use in :add_local
|
|
set localfilepath=%~f1
|
|
|
|
:: Creating a folder for the push session, that will be later deleted
|
|
:: It helps is concurrency of the push sessions
|
|
mkdir %GUID%
|
|
pushd %GUID%
|
|
|
|
if "%~1"=="" (
|
|
call :usage %~0
|
|
) else if "%~1"=="-u" (
|
|
call :add_url "%~2"
|
|
) else if "%~2"=="" (
|
|
call :add_local "%localfilepath%"
|
|
) else call :usage %~0
|
|
|
|
popd
|
|
rmdir /s /q %GUID%
|
|
|
|
goto :eof
|
|
|
|
:add_url
|
|
echo url remote file
|
|
echo.
|
|
|
|
echo Downloading file...
|
|
|
|
start /wait cmd /c powershell -Command "Start-BitsTransfer -Source %1 -Destination %~nx1"
|
|
|
|
if not exist "%~nx1" (
|
|
echo.
|
|
echo Download failed for some reason, aborting ...
|
|
) else call :add_local "%cd%\%~nx1"
|
|
|
|
exit /b 0
|
|
|
|
:: Adding a local file.
|
|
:add_local
|
|
if not exist "%~1" (
|
|
echo.
|
|
echo File "%~1" does not exist.
|
|
|
|
exit /b 0
|
|
)
|
|
|
|
if "%~x1"==".pdb" goto add_pdb
|
|
if "%~x1"==".zip" goto add_zip
|
|
if "%~x1"==".rpm" goto add_rpm
|
|
:: Checking if the input is a directory
|
|
for %%i in (%1) do if exist %%~si\NUL goto add_dir
|
|
|
|
echo.
|
|
echo File type of "%~nx1" NOT supported.
|
|
|
|
exit /b 0
|
|
|
|
:: Handle adding a single pdb symbol file.
|
|
:add_pdb
|
|
echo pdb file
|
|
echo.
|
|
|
|
pushd "%~dp1"
|
|
call :push_pdb "%~1"
|
|
popd
|
|
|
|
exit /b 0
|
|
|
|
:: Handle adding zip archive, which includes extraction of the zip.
|
|
:add_zip
|
|
echo zip file
|
|
echo.
|
|
|
|
echo Extracting the zip...
|
|
call "%z7_path_exe%" x -o"%~n1" "%~1" > NUL
|
|
if ERRORLEVEL 1 (
|
|
echo.
|
|
echo Something went wrong with the extraction, aborting ...
|
|
) else (
|
|
echo Searching recursively for pdb files to push...
|
|
echo.
|
|
|
|
pushd "%~n1"
|
|
for /d /r %%p in (.) do call :rec_find_pdb "%%p"
|
|
popd
|
|
|
|
rmdir /s /q "%~n1"
|
|
)
|
|
|
|
exit /b 0
|
|
|
|
:: Handle adding rpm archive, which includes extraction of the rpm.
|
|
:add_rpm
|
|
echo rpm file
|
|
echo.
|
|
|
|
echo Extracting the rpm...
|
|
call "%z7_path_exe%" x -o"%~n1" "%~1" > NUL
|
|
if ERRORLEVEL 1 (
|
|
echo.
|
|
echo Something went wrong with the extraction, aborting ...
|
|
) else (
|
|
pushd "%~n1"
|
|
|
|
echo Extracting the cpio...
|
|
call "%z7_path_exe%" x -o"%~n1" "%~n1.cpio" > NUL
|
|
if ERRORLEVEL 1 (
|
|
echo.
|
|
echo Something went wrong with the extraction, aborting ...
|
|
) else (
|
|
pushd "%~n1"
|
|
|
|
echo Searching for the iso package and extracting it...
|
|
for /d /r %%p in (.) do (
|
|
pushd "%%p"
|
|
for %%f in (*) do (
|
|
if "%%~xf"==".iso" (
|
|
if %%~zf gtr %min_iso_size% (
|
|
call "%z7_path_exe%" x -o"%%~nf" "%%~f" > NUL
|
|
echo Searching recursively for pdb files to push...
|
|
echo.
|
|
pushd "%%~nf"
|
|
for /d /r %%p in (.) do call :rec_find_pdb "%%p"
|
|
popd
|
|
|
|
rmdir /s /q "%%~nf"
|
|
)
|
|
)
|
|
)
|
|
popd
|
|
)
|
|
|
|
popd
|
|
|
|
rmdir /s /q "%~n1"
|
|
)
|
|
|
|
popd
|
|
|
|
rmdir /s /q "%~n1"
|
|
)
|
|
|
|
exit /b 0
|
|
|
|
:: Handle adding a directory which has pdb symbol files.
|
|
:add_dir
|
|
echo directory path
|
|
echo.
|
|
|
|
echo Searching recursively for pdb files to push...
|
|
echo.
|
|
|
|
pushd "%~1"
|
|
for /d /r %%p in (.) do call :rec_find_pdb "%%p"
|
|
popd
|
|
|
|
exit /b 0
|
|
|
|
:: Searches recursively for pdb files in all sub-directories.
|
|
:rec_find_pdb
|
|
pushd "%~1"
|
|
for %%f in (*) do (
|
|
if "%%~xf"==".pdb" call :push_pdb "%%~f"
|
|
)
|
|
popd
|
|
exit /b 0
|
|
|
|
:: Executing the push of the pdb.
|
|
:push_pdb
|
|
if exist "%~n1.inf" (
|
|
for /f "tokens=2 delims=," %%t in ('findstr /b "DriverVer" "%~n1.inf"') do (
|
|
for /f "tokens=1 delims= " %%v in ('echo %%~t') do (
|
|
call :lock_file
|
|
echo Pushing %~1 version %%~v to the symbol store.
|
|
if "%DSTORE_BUILD_TAG%"=="" (
|
|
call "%path_to_systore_exe%" add /s "%store_address%" /f "%~1" /t "%~n1" /v "%%~v" /c "eng" > NUL
|
|
if ERRORLEVEL 1 (
|
|
echo - Last push was not completed successfully, skipping ...
|
|
)
|
|
) else (
|
|
call "%path_to_systore_exe%" add /s "%store_address%" /f "%~1" /t "%~n1" /v "%%~v" /c "%DSTORE_BUILD_TAG%" > NUL
|
|
if ERRORLEVEL 1 (
|
|
echo - Last push was not completed successfully, skipping ...
|
|
)
|
|
)
|
|
call :unlock_file
|
|
)
|
|
)
|
|
)
|
|
exit /b 0
|
|
|
|
:: Lock file mechanism, works as follows.
|
|
:: Creates a lock file with its unique stamp, tries to copy it to the stores
|
|
:: location, then compares the lock at the store with its own, if equal then
|
|
:: we locked and we continue, if not then we wait for 2 seconds then try again.
|
|
:lock_file
|
|
:loop
|
|
(
|
|
echo User : %USERNAME%
|
|
echo Domain : %USERDOMAIN%
|
|
echo Working Directory : %cd%
|
|
echo Date and time : %DATE% %TIME%
|
|
echo GUID : %GUID%
|
|
) > %GUID%.lock
|
|
echo n | copy /-y %GUID%.lock "%store_address%\lock" > NUL
|
|
|
|
fc %GUID%.lock "%store_address%\lock" > NUL 2>&1
|
|
|
|
if not ERRORLEVEL 1 (
|
|
exit /b 0
|
|
) else (
|
|
echo someone else is pushing, waiting for 2 secs
|
|
timeout /t 2 /nobreak > NUL
|
|
goto :loop
|
|
)
|
|
|
|
:unlock_file
|
|
ren "%store_address%\lock" %GUID%.lock > NUL
|
|
if ERRORLEVEL 1 goto :unlock_file
|
|
del /q "%store_address%\%GUID%.lock" > NUL
|
|
del /q %GUID%.lock > NUL
|
|
exit /b 0
|
|
|
|
:usage
|
|
echo.
|
|
echo This script adds a pdb file to the specified symbol store.
|
|
echo.
|
|
echo Usage:
|
|
echo.
|
|
echo %~1 [-u] [Path]
|
|
echo.
|
|
echo.
|
|
echo -u [Path] Download a remote file (zip or rpm) and push pdbs.
|
|
echo NOTE: Path MUST BE a URL.
|
|
echo [Path] Push pdbs, Path can be pdb, zip or rpm or a folder.
|
|
echo NOTE: If one pdb is chosen, make sure .inf file is
|
|
echo in the same directory.
|
|
echo.
|
|
echo USED ENVIRONMENT VARIABLES:
|
|
echo.
|
|
echo %%DSTORE_LOCATION%% - The symbol store path, that pdb files
|
|
echo will be pushed to.
|
|
echo.
|
|
echo %%DSTORE_BUILD_TAG%% - Will serve as a tag for future versions,
|
|
echo pushed with the pdb as a message.(Optional)
|
|
echo if not configured, the default is "eng".
|
|
exit /b 0
|