Fix to correctly use fallback URL for tools on Windows

This commit is contained in:
Shivam Mathur 2022-02-08 03:52:45 +05:30
parent d9cb143213
commit 948917a97b
No known key found for this signature in database
GPG Key ID: 3E13E4C8591ACC2A

View File

@ -101,7 +101,7 @@ Function Add-Tool() {
Param ( Param (
[Parameter(Position = 0, Mandatory = $true)] [Parameter(Position = 0, Mandatory = $true)]
[ValidateNotNull()] [ValidateNotNull()]
$url, $urls,
[Parameter(Position = 1, Mandatory = $true)] [Parameter(Position = 1, Mandatory = $true)]
[ValidateNotNull()] [ValidateNotNull()]
$tool, $tool,
@ -112,23 +112,26 @@ Function Add-Tool() {
if (Test-Path $bin_dir\$tool) { if (Test-Path $bin_dir\$tool) {
Copy-Item $bin_dir\$tool -Destination $bin_dir\$tool.old -Force Copy-Item $bin_dir\$tool -Destination $bin_dir\$tool.old -Force
} }
if($url.Count -gt 1) {
$url = $url[0]
}
$tool_path = "$bin_dir\$tool" $tool_path = "$bin_dir\$tool"
foreach ($url in $urls){
if (($url | Split-Path -Extension) -eq ".exe") { if (($url | Split-Path -Extension) -eq ".exe") {
$tool_path = "$tool_path.exe" $tool_path = "$tool_path.exe"
} }
try { try {
Invoke-WebRequest -Uri $url -OutFile $tool_path $status_code = (Invoke-WebRequest -Passthru -Uri $url -OutFile $tool_path).StatusCode
} catch { } catch {
if($url -match '.*github.com.*releases.*latest.*') { if($url -match '.*github.com.*releases.*latest.*') {
try { try {
$url = $url.replace("releases/latest/download", "releases/download/" + ([regex]::match((Invoke-WebRequest -Uri ($url.split('/release')[0] + "/releases")).Content, "([0-9]+\.[0-9]+\.[0-9]+)/" + ($url.Substring($url.LastIndexOf("/") + 1))).Groups[0].Value).split('/')[0]) $url = $url.replace("releases/latest/download", "releases/download/" + ([regex]::match((Invoke-WebRequest -Uri ($url.split('/release')[0] + "/releases")).Content, "([0-9]+\.[0-9]+\.[0-9]+)/" + ($url.Substring($url.LastIndexOf("/") + 1))).Groups[0].Value).split('/')[0])
Invoke-WebRequest -Uri $url -OutFile $tool_path $status_code = (Invoke-WebRequest -Passthru -Uri $url -OutFile $tool_path).StatusCode
} catch { } } catch { }
} }
} }
if($status_code -eq 200 -and (Test-Path $tool_path)) {
break
}
}
if (((Get-ChildItem -Path $bin_dir/* | Where-Object Name -Match "^$tool(.exe|.phar)*$").Count -gt 0)) { if (((Get-ChildItem -Path $bin_dir/* | Where-Object Name -Match "^$tool(.exe|.phar)*$").Count -gt 0)) {
$bat_content = @() $bat_content = @()
$bat_content += "@ECHO off" $bat_content += "@ECHO off"