-
https://stackoverflow.com/a/45224858/722393
-
https://stackoverflow.com/a/50925741/722393
[CmdletBinding()]
param(
[Parameter(Mandatory)][string] $Application,
[Parameter(Mandatory)][string] $LocalPath,
[Parameter(Mandatory)][string] $Token
)
. \\SERVER\Scripts\TfsBuild\Invoke-Git.ps1
$RemoteExists = $false
$AllRemotes = git remote
ForEach($Remote in $AllRemotes) {
If($Remote = $Application) {
$RemoteExists = $true
Break
}
}
If($RemoteExists) {
Invoke-Git -Command "remote remove $Application"
}
Invoke-Git -Command "remote add $Application https://Personal%20Access%20Token:$Token@customer.visualstudio.com/Applications/_git/$Application"
Set-Location $LocalPath
Invoke-Git -Command "push --mirror HydraMonitor"
<#
.Synopsis
Invoke git, handling its quirky stderr that isn't error
.Outputs
Git messages, and lastly the exit code
.Example
Invoke-Git push
.Example
Invoke-Git "add ."
#>
Function Invoke-Git
{
param(
[Parameter(Mandatory)]
[string] $Command )
Write-Output "##[command]. git $Command"
Try {
$Exit = 0
$Path = [System.IO.Path]::GetTempFileName()
Invoke-Expression "git $Command 2> $Path"
$Exit = $LASTEXITCODE
If ( $Exit -gt 0 ) {
Write-Error (Get-Content $Path).ToString()
}
Else {
Get-Content $Path
}
"Exit code: $Exit"
}
Catch {
Write-Host "Error: $_`n$($_.ScriptStackTrace)"
}
Finally {
If ( Test-Path $Path ) {
Remove-Item $Path
}
}
}