| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- function Assert-Git {
- if (!(Get-Command git -ErrorAction Ignore)) {
- Write-Error 'git is required to execute this script'
- exit 1
- }
- }
- function Invoke-Block([scriptblock]$cmd) {
- $cmd | Out-String | Write-Verbose
- & $cmd
- # Need to check both of these cases for errors as they represent different items
- # - $?: did the powershell script block throw an error
- # - $lastexitcode: did a windows command executed by the script block end in error
- if ((-not $?) -or ($lastexitcode -ne 0)) {
- Write-Warning $error[0]
- throw "Command failed to execute: $cmd"
- }
- }
- function Get-Submodules {
- param(
- [Parameter(Mandatory = $true)]
- [string]$RepoRoot
- )
- Invoke-Block { & git submodule update --init } | Out-Null
- $moduleConfigFile = Join-Path $RepoRoot ".gitmodules"
- $submodules = @()
- Get-ChildItem "$RepoRoot/modules/*" -Directory | % {
- Push-Location $_ | Out-Null
- Write-Verbose "Attempting to get submodule info for $_"
- try {
- $data = @{
- path = $_
- module = $_.Name
- commit = $(git rev-parse HEAD)
- newCommit = $null
- changed = $false
- branch = $(git config -f $moduleConfigFile --get submodule.modules/$($_.Name).branch )
- }
- $submodules += $data
- }
- finally {
- Pop-Location | Out-Null
- }
- }
- return $submodules
- }
|