$ErrorActionPreference = "Stop" $scriptDir = $PSScriptRoot if ( [string]::IsNullOrWhiteSpace($scriptDir)) { $scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path } $root = (Resolve-Path -LiteralPath (Join-Path $scriptDir "..")).Path Set-Location -LiteralPath $root $origin = git remote get-url origin $origin = $origin.TrimEnd("/") $remoteRoot = $origin -replace "/[^/]+(\.git)?$", "" function Fetch-Repo { param( [string]$Repo, [string]$Branch, [string]$Dir ) if (Test-Path -LiteralPath $Dir -PathType Container) { git -C $Dir rev-parse --is-inside-work-tree *> $null git -C $Dir remote set-url origin $Repo git -C $Dir fetch origin $Branch git -C $Dir checkout $Branch git -C $Dir pull --ff-only origin $Branch } else { git clone --branch $Branch --single-branch $Repo $Dir } } function Fetch-RepoEx { param( [string]$Name ) $repo = "$remoteRoot/$Name" $branch = "master" Fetch-Repo -Repo $repo -Branch $branch -Dir "third_party/$Name" } Fetch-RepoEx "build_infra" Fetch-RepoEx "CPP_Core" Fetch-RepoEx "Renderive"