<# .SYNOPSIS Finds or installs the Tar command on this system. .DESCRIPTION This script searches for Tar on this system. If not found, downloads and extracts Git to use its tar.exe. Prefers global installation locations even if Git has been downloaded into this repo. .PARAMETER GitVersion The version of the Git to install. If not set, the default value is read from global.json. .PARAMETER Force Overwrite the existing installation if one exists in this repo and Tar isn't installed globally. #> param( [string]$GitVersion, [switch]$Force ) $ErrorActionPreference = 'Stop' $ProgressPreference = 'SilentlyContinue' # Workaround PowerShell/PowerShell#2138 Set-StrictMode -Version 1 # Find tar. If not found, install Git to get it. $repoRoot = (Join-Path $PSScriptRoot "..\.." -Resolve) $installDir = "$repoRoot\.tools\Git\win-x64" $tarCommand = "$installDir\usr\bin\tar.exe" $finalCommand = "$repoRoot\.tools\tar.exe" Write-Host "Windows version and other information, because who knows" cmd.exe /c ver systeminfo.exe Write-Host "Processor Architecture: $env:PROCESSOR_ARCHITECTURE" Write-Host "Dumping environment" Get-ChildItem env:\ Write-Host "Checking $env:SystemRoot\System32\tar.exe" Get-ChildItem "$env:SystemRoot\System32\ta*.exe" if (Test-Path "$env:SystemRoot\System32\tar.exe") { Write-Host "Found $env:SystemRoot\System32\tar.exe" $tarCommand = "$env:SystemRoot\System32\tar.exe" } elseif (Test-Path "$env:ProgramFiles\Git\usr\bin\tar.exe") { $tarCommand = "$env:ProgramFiles\Git\usr\bin\tar.exe" } elseif (Test-Path "${env:ProgramFiles(x86)}\Git\usr\bin\tar.exe") { $tarCommand = "${env:ProgramFiles(x86)}\Git\usr\bin\tar.exe" } elseif (Test-Path "$env:AGENT_HOMEDIRECTORY\externals\git\usr\bin\tar.exe") { $tarCommand = "$env:AGENT_HOMEDIRECTORY\externals\git\usr\bin\tar.exe" } elseif ((Test-Path $tarCommand) -And (-Not $Force)) { Write-Verbose "Repo-local Git installation and $tarCommand already exist, skipping Git install." } else { if (-not $GitVersion) { $globalJson = Get-Content "$repoRoot\global.json" | ConvertFrom-Json $GitVersion = $globalJson.tools.Git } $Uri = "https://netcorenativeassets.blob.core.windows.net/resource-packages/external/windows/git/Git-${GitVersion}-64-bit.zip" Import-Module -Name (Join-Path $PSScriptRoot "..\common\native\CommonLibrary.psm1" -Resolve) $InstallStatus = CommonLibrary\DownloadAndExtract -Uri $Uri -InstallDirectory "$installDir\" -Force:$Force -Verbose if ($InstallStatus -Eq $False) { Write-Error "Installation failed" exit 1 } } Copy-Item "$tarCommand" "$finalCommand" -Verbose Write-Host "Tar now available at '$finalCommand'" if ($tarCommand -like '*\Git\*') { $null >.\.tools\tar.fromGit }