diff options
Diffstat (limited to 'scripts/common.psm1')
-rw-r--r-- | scripts/common.psm1 | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/scripts/common.psm1 b/scripts/common.psm1 new file mode 100644 index 0000000000..3eeca4b250 --- /dev/null +++ b/scripts/common.psm1 @@ -0,0 +1,66 @@ +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, + [switch]$Shipping + ) + + $moduleConfigFile = Join-Path $RepoRoot ".gitmodules" + $submodules = @() + + [xml] $submoduleConfig = Get-Content "$RepoRoot/build/submodules.props" + $repos = $submoduleConfig.Project.ItemGroup.Repository | % { $_.Include } + + Get-ChildItem "$RepoRoot/modules/*" -Directory ` + | ? { (-not $Shipping) -or $($repos -contains $($_.Name)) -or $_.Name -eq 'Templating' } ` + | % { + Push-Location $_ | Out-Null + Write-Verbose "Attempting to get submodule info for $_" + + if (Test-Path 'version.props') { + [xml] $versionXml = Get-Content 'version.props' + $versionPrefix = $versionXml.Project.PropertyGroup.VersionPrefix + } else { + $versionPrefix = '' + } + + try { + $data = @{ + path = $_ + module = $_.Name + commit = $(git rev-parse HEAD) + newCommit = $null + changed = $false + branch = $(git config -f $moduleConfigFile --get submodule.modules/$($_.Name).branch ) + versionPrefix = $versionPrefix + } + + $submodules += $data + } + finally { + Pop-Location | Out-Null + } + } + + return $submodules +} |