|
|
@@ -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
|
|
|
+}
|