Updated pull-repo.ps1

This commit is contained in:
Markus Fleschutz 2025-06-25 08:12:04 +02:00
parent e5ce800a76
commit f34760ad65

View File

@ -3,7 +3,7 @@
Pulls updates into a Git repo Pulls updates into a Git repo
.DESCRIPTION .DESCRIPTION
This PowerShell script pulls remote updates into a local Git repository (including submodules). This PowerShell script pulls remote updates into a local Git repository (including submodules).
.PARAMETER pathToRepo .PARAMETER path
Specifies the file path to the local Git repository (default is working directory) Specifies the file path to the local Git repository (default is working directory)
.EXAMPLE .EXAMPLE
PS> ./pull-repo.ps1 PS> ./pull-repo.ps1
@ -11,14 +11,14 @@
(2/4) Checking local repository... C:\Repos\rust (2/4) Checking local repository... C:\Repos\rust
(3/4) Pulling remote updates... (3/4) Pulling remote updates...
(4/4) Updating submodules... (4/4) Updating submodules...
Updates pulled into 📂rust repo in 14s. Repo 'rust' updated in 14s.
.LINK .LINK
https://github.com/fleschutz/PowerShell https://github.com/fleschutz/PowerShell
.NOTES .NOTES
Author: Markus Fleschutz | License: CC0 Author: Markus Fleschutz | License: CC0
#> #>
param([string]$pathToRepo = "$PWD") param([string]$path = "$PWD")
try { try {
$stopWatch = [system.diagnostics.stopwatch]::startNew() $stopWatch = [system.diagnostics.stopwatch]::startNew()
@ -27,27 +27,27 @@ try {
& git --version & git --version
if ($lastExitCode -ne 0) { throw "Can't execute 'git' - make sure Git is installed and available" } if ($lastExitCode -ne 0) { throw "Can't execute 'git' - make sure Git is installed and available" }
Write-Host "⏳ (2/4) Checking local repository... $pathToRepo" Write-Host "⏳ (2/4) Checking local repository... $path"
if (-not(Test-Path "$pathToRepo" -pathType container)) { throw "Can't access folder: $pathToRepo" } if (-not(Test-Path "$path" -pathType container)) { throw "Can't access folder: $path" }
$result = (git -C "$pathToRepo" status) $result = (git -C "$path" status)
if ("$result" -match "HEAD detached at ") { throw "Nothing to pull due to detached HEAD state (not on a branch!)" } if ("$result" -match "HEAD detached at ") { throw "Nothing to pull due to detached HEAD state (not on a branch!)" }
$pathToRepoName = (Get-Item "$pathToRepo").Name $dirName = (Get-Item "$path").Name
Write-Host "⏳ (3/4) Pulling remote updates... " -noNewline Write-Host "⏳ (3/4) Pulling remote updates... " -noNewline
& git -C "$pathToRepo" remote get-url origin & git -C "$path" remote get-url origin
if ($lastExitCode -ne 0) { throw "'git remote get-url origin' failed with exit code $lastExitCode" } if ($lastExitCode -ne 0) { throw "'git remote get-url origin' failed with exit code $lastExitCode" }
& git -C "$pathToRepo" pull --recurse-submodules=yes & git -C "$path" pull --recurse-submodules=yes
if ($lastExitCode -ne 0) { throw "'git pull' failed with exit code $lastExitCode" } if ($lastExitCode -ne 0) { throw "'git pull' failed with exit code $lastExitCode" }
Write-Host "⏳ (4/4) Updating submodules... " Write-Host "⏳ (4/4) Updating submodules... "
& git -C "$pathToRepo" submodule update --init --recursive & git -C "$path" submodule update --init --recursive
if ($lastExitCode -ne 0) { throw "'git submodule update' failed with exit code $lastExitCode" } if ($lastExitCode -ne 0) { throw "'git submodule update' failed with exit code $lastExitCode" }
[int]$elapsed = $stopWatch.Elapsed.TotalSeconds [int]$elapsed = $stopWatch.Elapsed.TotalSeconds
"Updates pulled into 📂$pathToRepoName repo in $($elapsed)s." "Repo '$dirName' updated in $($elapsed)s."
exit 0 # success exit 0 # success
} catch { } catch {
"⚠️ Error: $($Error[0]) in script line $($_.InvocationInfo.ScriptLineNumber)" "⚠️ ERROR: $($Error[0]) in script line $($_.InvocationInfo.ScriptLineNumber)"
exit 1 exit 1
} }