g-branch-base.ps1
|
[CmdletBinding()] param([switch]$NoStashPop) . (Join-Path $PSScriptRoot 'g-registry.ps1') $repo = Get-Location $branch = git -C $repo branch --show-current 2>$null if (-not $branch) { Write-Host "not a git repo"; exit 1 } $baseBranch = (Get-GitboxConfig -RepoPath $repo).BaseBranch if ($branch -eq $baseBranch) { Write-Host "already on $baseBranch" exit 0 } $stashed = $false if (@(git -C $repo status --porcelain 2>$null | Where-Object { $_ }).Count -gt 0) { $stashOut = git -C $repo stash push -m 'gitbox-base' 2>&1 if ($LASTEXITCODE -ne 0) { Write-Host "stash failed" if ($VerbosePreference -ne 'SilentlyContinue') { $stashOut | ForEach-Object { Write-Host " $_" } } exit 1 } $stashed = $true } $coOut = git -C $repo checkout $baseBranch 2>&1 if ($LASTEXITCODE -ne 0) { Write-Host "checkout $baseBranch failed" if ($VerbosePreference -ne 'SilentlyContinue') { $coOut | ForEach-Object { Write-Host " $_" } } if ($stashed) { git -C $repo stash pop 2>$null | Out-Null } exit 1 } $pullOut = git -C $repo pull origin $baseBranch 2>&1 if ($LASTEXITCODE -ne 0) { Write-Host "pull $baseBranch failed" if ($VerbosePreference -ne 'SilentlyContinue') { $pullOut | ForEach-Object { Write-Host " $_" } } if ($stashed) { git -C $repo stash pop 2>$null | Out-Null } exit 1 } if ($stashed) { if ($NoStashPop) { Write-Host " stash preserved -- run: git stash pop to restore changes" } else { $popOut = git -C $repo stash pop 2>&1 if ($LASTEXITCODE -ne 0) { Write-Host "warning: stash pop failed -- run: git stash pop" if ($VerbosePreference -ne 'SilentlyContinue') { $popOut | ForEach-Object { Write-Host " $_" } } } } } Write-Host "on $baseBranch | pulled origin/$baseBranch" exit 0 |