Update clean-repos.ps1

This commit is contained in:
Markus Fleschutz 2023-10-15 12:01:45 +02:00
parent 51947ab13d
commit 2731540147

View File

@ -3,46 +3,50 @@
Cleans all Git repositories in a folder from untracked files
.DESCRIPTION
This PowerShell script cleans all Git repositories in a folder from untracked files (including submodules).
.PARAMETER ParentDir
Specifies the path to the parent folder
.PARAMETER parentDir
Specifies the path to the parent folder (current working dir by default)
.EXAMPLE
PS> ./clean-repos C:\MyRepos
PS> ./clean-repos.ps1 C:\MyRepos
(1) Searching for Git executable... git version 2.40.1
(2) Checking parent folder 📂Repos... 28 subfolders found
(3/30) Cleaning 📂base256unicode...
...
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
param([string]$ParentDir = "$PWD")
param([string]$parentDir = "$PWD")
try {
$StopWatch = [system.diagnostics.stopwatch]::startNew()
$stopWatch = [system.diagnostics.stopwatch]::startNew()
Write-Host "⏳ (1) Searching for Git executable... " -noNewline
& git --version
if ($lastExitCode -ne "0") { throw "Can't execute 'git' - make sure Git is installed and available" }
$ParentDirName = (Get-Item "$ParentDir").Name
Write-Host "⏳ (2) Checking parent folder 📂$ParentDirName... " -noNewline
$parentDirName = (Get-Item "$ParentDir").Name
Write-Host "⏳ (2) Checking parent folder 📂$parentDirName... " -noNewline
if (-not(Test-Path "$ParentDir" -pathType container)) { throw "Can't access folder: $ParentDir" }
$Folders = (Get-ChildItem "$ParentDir" -attributes Directory)
$NumFolders = $Folders.Count
Write-Host "$NumFolders subfolders found"
$folders = (Get-ChildItem "$ParentDir" -attributes Directory)
$numFolders = $folders.Count
Write-Host "$numFolders subfolders found"
[int]$Step = 2
foreach ($Folder in $Folders) {
$FolderName = (Get-Item "$Folder").Name
foreach ($folder in $folders) {
$FolderName = (Get-Item "$folder").Name
$Step++
"⏳ ($Step/$($NumFolders + 2)) Cleaning 📂$FolderName..."
"⏳ ($Step/$($numFolders + 2)) Cleaning 📂$FolderName..."
& git -C "$Folder" clean -xfd -f # force + recurse into dirs + don't use the standard ignore rules
& git -C "$folder" clean -xfd -f # force + recurse into dirs + don't use the standard ignore rules
if ($lastExitCode -ne "0") { throw "'git clean -xfd -f' failed with exit code $lastExitCode" }
& git -C "$Folder" submodule foreach --recursive git clean -xfd -f
& git -C "$folder" submodule foreach --recursive git clean -xfd -f
if ($lastExitCode -ne "0") { throw "'git clean -xfd -f' in submodules failed with exit code $lastExitCode" }
}
[int]$Elapsed = $StopWatch.Elapsed.TotalSeconds
"✔️ cleaned $NumFolders Git repositories at 📂$ParentDirName in $Elapsed sec."
[int]$elapsed = $stopWatch.Elapsed.TotalSeconds
"✔️ Cleaned $numFolders Git repos under 📂$parentDirName in $elapsed sec"
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"