mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-20 23:36:38 +00:00
59 lines
1.6 KiB
PowerShell
59 lines
1.6 KiB
PowerShell
|
# Set error action preference to stop on errors
|
||
|
$ErrorActionPreference = "Stop"
|
||
|
|
||
|
# Define error patterns to catch
|
||
|
$ERRORS = @(
|
||
|
'fatal error C1060: compiler is out of heap space'
|
||
|
'cc1plus.exe: out of memory allocating'
|
||
|
'cl : Command line error D8027 : cannot execute'
|
||
|
'Access is denied (os error 5)'
|
||
|
'LINK : fatal error LNK1104: cannot open file'
|
||
|
'PermissionError: [Errno 13] Permission denied:'
|
||
|
'c1: fatal error C1356: unable to find mspdbcore.dll'
|
||
|
)
|
||
|
$RETRIES = 3
|
||
|
$LOGFILE = [System.IO.Path]::GetTempPath() + "logfile.txt"
|
||
|
|
||
|
while ($true) {
|
||
|
$spurious_error = ""
|
||
|
|
||
|
# Execute command and capture output to log file while displaying it
|
||
|
if ($env:JOB) {
|
||
|
# Bypass argument parsing -- https://github.com/PowerShell/PowerShell/issues/19451
|
||
|
& iex $env:JOB | Tee-Object -FilePath $LOGFILE *>&1
|
||
|
} else {
|
||
|
& $args[0] $args[1..($args.Count-1)] | Tee-Object -FilePath $LOGFILE *>&1
|
||
|
}
|
||
|
$ret = $LASTEXITCODE
|
||
|
|
||
|
if ($ret -eq 0) {
|
||
|
break
|
||
|
}
|
||
|
|
||
|
# Read log file and check for known errors
|
||
|
foreach ($line in Get-Content $LOGFILE) {
|
||
|
foreach ($e in $ERRORS) {
|
||
|
if ($line -match [regex]::Escape($e)) {
|
||
|
$spurious_error = $line
|
||
|
break
|
||
|
}
|
||
|
}
|
||
|
if ($spurious_error) {
|
||
|
break
|
||
|
}
|
||
|
}
|
||
|
|
||
|
# Clean up log file
|
||
|
if (Test-Path $LOGFILE) {
|
||
|
Remove-Item -Force $LOGFILE
|
||
|
}
|
||
|
|
||
|
# Exit if no spurious error found or no retries left
|
||
|
if ([string]::IsNullOrEmpty($spurious_error) -or $RETRIES -eq 0) {
|
||
|
exit $ret
|
||
|
}
|
||
|
|
||
|
$RETRIES--
|
||
|
Write-Host "`nRetrying, caught spurious failure: $spurious_error`n"
|
||
|
}
|